14

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

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

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

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

非常感谢。

4

2 回答 2

10

如果您正在寻找另一种多语言 POS 标记器,您可能想尝试RDRPOSTagger:一个用于 POS 和形态标记的强大、易于使用且与语言无关的工具包。请参阅本文中 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 进行编程,请遵循 package in RDRPOSTagger.pymodule 中的代码行 92-98 pSCRDRTagger。这是一个例子:

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 . ")
于 2015-11-22T04:01:51.460 回答
7

没有选项可以传递给 NLTK 的 POS 标记和词形还原函数,使它们能够处理其他语言。

一种解决方案是为每种语言获取一个训练语料库,并使用 NLTK 训练您自己的词性标注器,然后为每种语言找出一个可能基于字典的词形还原解决方案。

不过,这可能有点过头了,因为意大利语、法语、西班牙语和德语(以及许多其他语言)的这两个任务已经有了一个一站式解决方案:TreeTagger。它不像英语中的词性标注器和词形还原器那样先进,但它仍然做得很好。

您想要的是在您的系统上安装 TreeTagger 并能够从 Python 调用它。这是miotto 的 GitHub 存储库,可让您做到这一点。

以下代码段向您展示了如何测试您是否正确设置了所有内容。如您所见,我可以在一个函数调用中进行 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),我将写一篇关于这个问题的博客文章,并在完成后立即更新这个答案并附上指向它的链接。

编辑: 这是上面提到的博客文章。

于 2015-10-06T20:15:13.760 回答