我有一些法语文本,我需要以某种方式处理。为此,我需要:
据我所知,NLTK中的wordnet lemmatizer只适用于英语。当我给它“voudrais”等时,我想要一些可以返回“vouloir”的东西。由于撇号,我也无法正确标记。任何指针都将非常感激。 :)
答案 0 :(得分:14)
Here是一个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> ')
但是你需要提出特定于语言的常规 表达自己。对于更高级的词干分析器,它可能会 有必要添加一个新模块。 (这可能是一个好学生 项目。)
有关regexp词干分析器的更多信息:
http://nltk.org/doc/api/nltk.stem.regexp.Regexp-class.html
-Edward
注意:他提供的链接已失效,请参阅here了解当前的regexstemmer文档。
最近添加的snowball stemmer似乎能阻止法语。让我们来测试一下:
>>> 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'
如你所见,有些结果有点可疑。
不完全是你所希望的,但我想这是一个开始。
答案 1 :(得分:5)
我发现最好的解决方案是spacy,似乎可以完成工作
import spacy
nlp = spacy.load('fr')
doc = nlp(u"voudrais non animaux yeux dors couvre.")
for token in doc:
print(token, token.lemma_)
结果:
voudrais vouloir
non non
animaux animal
yeux oeil
dors dor
couvre couvrir
查看文档以获取更多详细信息:https://spacy.io/models/fr && https://spacy.io/usage
答案 2 :(得分:2)
也许使用TreeTagger?我没试过,但这个应用程序可以用法语工作
http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/
http://txm.sourceforge.net/installtreetagger_fr.html
答案 3 :(得分:1)
如果您在文本上执行机器学习算法,则可以使用n-gram而不是单词标记。它不是严格的词形还原,但是它会检测出一系列相似的字母,并且收集具有相同含义的词语具有强大的功能。
我使用sklearn的函数CountVectorizer(analyzer='char_wb')
,对于某些特定的文本,它比单词包更有效。
答案 4 :(得分:0)
如果您正在法国一家银行中进行文本挖掘项目,建议使用软件包 cltk 。
install cltk
from cltk.lemmatize.french.lemma import LemmaReplacer