Lemmatize法语文本

yel*_*yed 23 python nltk lemmatization

我有一些法语文本,我需要以某种方式处理.为此,我需要:

  • 首先,将文本标记为单词
  • 然后将这些单词解释为避免多次处理同一个根

据我所知,NLTK中的wordnet lemmatizer只适用于英语.当我给它"voudrais"等时,我想要一些可以返回"vouloir"的东西.由于撇号,我也无法正确标记.任何指针都将非常感激.:)

Jun*_*uxx 15

是一个nltk dev的旧的但相关的评论.看起来nltk中最先进的词干分析器都是英语特定的:

nltk.stem模块目前包含3个词干分析器:Porter词干分析器,Lancaster词干分析器和基于正则表达式的词干分析器.Porter stemmer和Lancaster stemmer都是英语特有的.可以自定义基于正则表达式的词干分析器以使用您希望的任何正则表达式.所以你应该能够使用regexp词干分析器为非英语语言编写一个简单的词干分析器.例如,对于法语:

from nltk import stem
stemmer = stem.Regexp('s$|es$|era$|erez$|ions$| <etc> ')
Run Code Online (Sandbox Code Playgroud)

但是你需要自己想出特定于语言的正则表达式.对于更高级的词干分析器,可能需要添加新模块.(这可能是一个很好的学生项目.)

有关regexp词干分析器的更多信息:

http://nltk.org/doc/api/nltk.stem.regexp.Regexp-class.html

-Edward

注意:他给出的链接已经死了,请参阅此处了解当前的regexstemmer文档.

最近添加的雪球套杆似乎能够阻止法国人.让我们来测试一下:

>>> from nltk.stem.snowball import FrenchStemmer
>>> stemmer = FrenchStemmer()
>>> stemmer.stem('voudrais')
u'voudr'
>>> stemmer.stem('animaux')
u'animal'
>>> stemmer.stem('yeux')
u'yeux'
>>> stemmer.stem('dors')
u'dor'
>>> stemmer.stem('couvre')
u'couvr'
Run Code Online (Sandbox Code Playgroud)

如您所见,某些结果有点可疑.

不是你想要的,但我想这是一个开始.


小智 6

我发现最好的解决方案是spacy,似乎可以完成工作

安装:

pip3 install spacy
python3 -m spacy download fr_core_news_md
Run Code Online (Sandbox Code Playgroud)

使用方法:

import spacy
nlp = spacy.load('fr_core_news_md')

doc = nlp(u"voudrais non animaux yeux dors couvre.")
for token in doc:
    print(token, token.lemma_)
Run Code Online (Sandbox Code Playgroud)

结果:

voudrais vouloir
non non
animaux animal
yeux oeil
dors dor
couvre couvrir
Run Code Online (Sandbox Code Playgroud)

查看文档以获取更多详细信息:https : //spacy.io/models/fr && https://spacy.io/usage