我有一些用法语写的文本需要进行处理。为此,我需要:
- 首先,将文本分词成单词
- 然后对这些单词进行词形还原,以避免处理相同的词根多次出现
就我所知,NLTK 中的 WordNet 词形还原器只适用于英语。我希望能找到一个可以在输入“voudrais”时返回“vouloir”等结果的工具。同时,由于使用了撇号,我也无法正确地进行分词。若有任何指导意见,请不吝赐教。 :)
我有一些用法语写的文本需要进行处理。为此,我需要:
就我所知,NLTK 中的 WordNet 词形还原器只适用于英语。我希望能找到一个可以在输入“voudrais”时返回“vouloir”等结果的工具。同时,由于使用了撇号,我也无法正确地进行分词。若有任何指导意见,请不吝赐教。 :)
pip3 install spacy
python3 -m spacy download fr_core_news_md
使用:
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_)
结果:
voudrais vouloir
non non
animaux animal
yeux oeil
dors dor
couvre couvrir
查看文档以获取更多详细信息:https://spacy.io/models/fr && https://spacy.io/usage
这里有一位nltk开发者的旧评论,虽然时间比较久远但仍有参考价值。看起来nltk中大多数先进的词干提取器都是针对英语的:
nltk.stem模块目前包含三种词干提取器:Porter词干提取器、Lancaster词干提取器和基于正则表达式的词干提取器。Porter词干提取器和Lancaster词干提取器都是专门为英语设计的。基于正则表达式的词干提取器可以按照您的意愿自定义使用任何正则表达式。因此,您应该能够使用正则表达式词干提取器编写非英语语言的简单词干提取器。例如,对于法语:
from nltk import stem stemmer = stem.Regexp('s$|es$|era$|erez$|ions$| <etc> ')
但是你需要自己想出特定语言的正则表达式。对于更高级的词干提取器,可能需要添加新模块。(这可能是一个不错的学生项目。)
有关正则表达式词干提取器的更多信息:
http://www.nltk.org/api/nltk.stem.html#module-nltk.stem.regexp
- Edward
注意:他给出的链接已经失效,可以在这里找到当前的RegexStemmer文档。
最近添加的Snowball词干提取器似乎能够提取法语。让我们来测试一下:
>>> 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'
正如你所看到的,有些结果可能有点可疑。
虽然不完全符合你的期望,但我想这是一个开始。
http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/
http://txm.sourceforge.net/installtreetagger_fr.html
安装cltk
from cltk.lemmatize.french.lemma import LemmaReplacer
更多细节请参见cltk。CountVectorizer(analyzer ='char_wb')
,对于某些特定的文本,它比词袋模型更有效。