Python 用于词性标记和Lemmatizer的多语言NLTK

Python 用于词性标记和Lemmatizer的多语言NLTK,python,nlp,nltk,pos-tagger,lemmatization,Python,Nlp,Nltk,Pos Tagger,Lemmatization,最近我接触了NLP,并尝试使用和来分析文本。我想开发一个应用程序,分析旅行者的评论,因此我必须管理许多用不同语言编写的文本。我需要做两个主要的操作:词性标记和柠檬化。我已经看到,在NLTK中,有可能选择正确的语言进行句子标记化,如下所示: tokenizer = nltk.data.load('tokenizers/punkt/PY3/italian.pickle') 我还没有找到在不同语言中设置词性标记和Lemmatizer语言的正确方法。如何为非英语文本(如意大利语、法语、西班牙语或德语)

最近我接触了NLP,并尝试使用和来分析文本。我想开发一个应用程序,分析旅行者的评论,因此我必须管理许多用不同语言编写的文本。我需要做两个主要的操作:词性标记和柠檬化。我已经看到,在NLTK中,有可能选择正确的语言进行句子标记化,如下所示:

tokenizer = nltk.data.load('tokenizers/punkt/PY3/italian.pickle')
我还没有找到在不同语言中设置词性标记和Lemmatizer语言的正确方法。如何为非英语文本(如意大利语、法语、西班牙语或德语)设置正确的语料库/词典?我还看到有可能导入“树库”或“WordNet”模块,但我不明白如何使用它们。否则,我在哪里可以找到相应的语料库

你能给我一些建议或参考吗?请注意,我不是NLTK的专家


非常感谢

没有任何选项可以传递给NLTK的词性标记和柠檬化函数,使它们处理其他语言

一个解决方案是为每种语言获取一个训练语料库,并用NLTK训练你自己的词性标记者,然后为每种语言找出一个柠檬化的解决方案,也许是基于听写的

但这可能有点过头了,因为意大利语、法语、西班牙语和德语(以及许多其他语言)已经有了一站式解决方案:。它不像英语中的POS-tagers和lemmatizer那样先进,但它仍然做得很好

您想要的是在系统上安装TreeTagger,并能够从Python调用它。这是一个可以让你做到这一点的方法

下面的代码片段向您展示了如何测试您是否正确设置了所有内容。正如您所看到的,我能够在一个函数调用中进行POS标记和lemmatize,而且我可以用英语和法语轻松地完成

>>> import os
>>> os.environ['TREETAGGER'] = "/opt/treetagger/cmd" # Or wherever you installed TreeTagger
>>> from treetagger import TreeTagger
>>> tt_en = TreeTagger(encoding='utf-8', language='english')
>>> tt_en.tag('Does this thing even work?')
[[u'Does', u'VBZ', u'do'], [u'this', u'DT', u'this'], [u'thing', u'NN', u'thing'], [u'even', u'RB', u'even'], [u'work', u'VB', u'work'], [u'?', u'SENT', u'?']]
>>> tt_fr = TreeTagger(encoding='utf-8', language='french')
>>> tt_fr.tag(u'Mon Dieu, faites que ça marche!')
[[u'Mon', u'DET:POS', u'mon'], [u'Dieu', u'NOM', u'Dieu'], [u',', u'PUN', u','], [u'faites', u'VER:pres', u'faire'], [u'que', u'KON', u'que'], [u'\xe7a', u'PRO:DEM', u'cela'], [u'marche', u'NOM', u'marche'], [u'!', u'SENT', u'!']]
由于这个问题被问了很多次(而且安装过程并不是非常直接的,IMO),我将写一篇关于这个问题的博客文章,并在完成后立即用链接更新这个答案

编辑:

如果您正在寻找另一个多语言词性标记器,您可能希望尝试:一个强大、易于使用且独立于语言的词性和词法标记工具包。请参阅中13种语言的实验结果,包括性能速度和标记准确性。RDRPOSTagger现在支持保加利亚语、捷克语、荷兰语、英语、法语、德语、印地语、意大利语、葡萄牙语、西班牙语、瑞典语、泰语和越南语的预先训练的词性和形态标记模型。RDRPO还支持针对40种语言预先培训的通用词性标记模型

在Python中,您可以利用预先训练好的模型来标记原始的未标记文本语料库,如下所示:

python RDRPOSTagger.py标记PATH-TO-PRETRAINED-MODEL-PATH-TO-LEXICON-PATH-TO-RAW-TEXT-CORPUS

示例:
python rdrpostagget.py标记../Models/POS/German.RDR../Models/POS/German.DICT../data/GermanRawTest

如果您想使用RDRPOSTARGE进行编程,请遵循
pSCRDRTagger
软件包中
RDRPOSTagger.py
模块中的代码行92-98。以下是一个例子:

r = RDRPOSTagger()
r.constructSCRDRtreeFromRDRfile("../Models/POS/German.RDR") #Load POS tagging model for German
DICT = readDictionary("../Models/POS/German.DICT") #Load a German lexicon 
r.tagRawSentence(DICT, "Die Reaktion des deutschen Außenministers zeige , daß dieser die außerordentlich wichtige Rolle Irans in der islamischen Welt erkenne .")

r = RDRPOSTagger()
r.constructSCRDRtreeFromRDRfile("../Models/POS/French.RDR") # Load POS tagging model for French
DICT = readDictionary("../Models/POS/French.DICT") # Load a French lexicon
r.tagRawSentence(DICT, "Cette annonce a fait l' effet d' une véritable bombe . ")

我试着用这个泰语标签,但似乎不起作用。它给了我一个完整的长字符串作为NCNM。是的,在使用tagger之前,您必须先执行泰语分词。非常好。。。。。