Lemmatize法语文本

时间:2012-10-29 23:27:58

标签: python nltk lemmatization

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

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

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

5 个答案:

答案 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

cltk

中的更多详细信息