用于POS标记和Lemmatizer的多语言NLTK

时间:2015-09-23 13:30:00

标签: python nlp nltk pos-tagger lemmatization

最近我接触了NLP,我尝试使用NLTKTextBlob来分析文本。我想开发一个分析旅行者评论的应用程序,因此我必须管理很多用不同语言编写的文本。我需要做两个主要操作:POS标记和词形还原。我已经看到在NLTK中有可能为这样的句子标记化选择正确的语言:

tokenizer = nltk.data.load('tokenizers/punkt/PY3/italian.pickle')

我还没有找到以不同语言设置POS Tagging和Lemmatizer语言的正确方法。如何为非英语文本(如意大利语,法语,西班牙语或德语)设置正确的语料库/词典?我也看到有可能导入" TreeBank"或者" WordNet"模块,但我不明白我如何使用它们。否则,我在哪里可以找到各自的语料库?

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

非常感谢。

2 个答案:

答案 0 :(得分:5)

没有选项可以传递给NLTK的POS标记和词形化函数,这些函数会使它们处理其他语言。

一种解决方案是获得每种语言的训练语料库,并使用NLTK训练您自己的POS标签,然后找出针对每种语言的词典化解决方案,可能是基于dictonary的。

但这可能有点过头了,因为对于意大利语,法语,西班牙语和德语(以及许多其他语言)的任务已经有一个单一的停止解决方案:TreeTagger。它不像英语中的POS标签和词形变换器那样具有最先进性,但它仍然做得很好。

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

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

>>> 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),我会写一篇关于此事的博客文章,并在完成后立即更新这个答案的链接

编辑: Here is the above-mentioned blog post.

答案 1 :(得分:5)

如果您正在寻找另一种多语言POS标记器,您可能需要尝试RDRPOSTagger:一个功能强大,易于使用且与语言无关的POS和形态标记工具包。在this paper中查看13种语言的实验结果,包括性能速度和标记准确性。 RDRPOSTagger现在支持预先训练的POS和形态标记模型,用于保加利亚语,捷克语,荷兰语,英语,法语,德语,印地语,意大利语,葡萄牙语,西班牙语,瑞典语,泰语和越南语。 RDRPOSTagger还支持40种语言的预训练通用POS标记模型。

在Python中,您可以使用预先训练的模型标记原始未标记的文本语料库:

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

示例:python RDRPOSTagger.py tag ../Models/POS/German.RDR ../Models/POS/German.DICT ../data/GermanRawTest

如果您想使用RDRPOSTagger进行编程,请按照RDRPOSTagger.py包中pSCRDRTagger模块中的代码行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 . ")