Python NLTK 中用于情感分析的德语词干

Posted

技术标签:

【中文标题】Python NLTK 中用于情感分析的德语词干【英文标题】:German Stemming for Sentiment Analysis in Python NLTK 【发布时间】:2017-11-15 07:02:21 【问题描述】:

我最近开始对德语文本进行情绪分析项目,并计划使用词干分析器来改进结果。

NLTK 附带一个德国雪球词干提取器,我已经尝试使用它,但我不确定结果。也许应该是这样,但作为一名计算机科学家而不是语言学家,我对词干变化的动词形式存在问题。

以单词“suchen”(搜索)为例,第一人称单数的词根为“such”,第三人称单数的词根为“sucht”。

我知道还有词形还原,但据我所知,NLTK 中没有集成任何有效的德国词形还原器。有 GermaNet,但他们的 NLTK 集成似乎已中止。

切入正题:我希望将变形动词形式放在同一个词干上,至少对于同一个时态的规则动词而言。如果这对我的目标没有用处,请告诉我原因。如果是,您是否知道可以使用任何其他资源来帮助我实现这一目标?

编辑:我忘了说,任何软件都应该免费用于教育和研究目的。

【问题讨论】:

【参考方案1】:

一个好的和简单的解决方案是使用 TreeTagger。首先,您必须手动安装 treetagge(这基本上是将正确的 zip 文件解压缩到计算机上的某个位置)。您将在此处找到二进制发行版:http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/

然后你需要安装一个包装器来从 Python 中调用它。

以下代码安装包装器并对标记化的句子进行词形还原:

import treetaggerwrapper

tagger = treetaggerwrapper.TreeTagger(TAGLANG='de')

tags = tagger.tag_text(tokenized_sent,tagonly=True) #don't use the TreeTagger's tokenization!

pprint.pprint(tags)

您还可以使用 treetaggerwrapper 的方法从 Treetagges 输出中生成漂亮的对象:

tags2 = treetaggerwrapper.make_tags(tags)
pprint.pprint(tags2)

就是这样。

【讨论】:

【参考方案2】:

作为一名计算机科学家,您肯定在寻找正确的方向来解决这个语言问题;)。词干提取通常比较简单,用于信息检索任务以尝试减小词典大小,但通常不足以进行更复杂的语言分析。词形还原部分与词干的用例重叠,但包括将动词变形全部重写为相同的词根形式(引理),并将“work”作为名词和“work”作为动词进行区分(尽管这有点取决于lemmatiser 的实施和质量)。为此,它通常需要更多信息(如 POS 标签、语法树),因此需要相当长的时间,使其不太适合 IR 任务,通常处理大量数据。

除了 GermaNet(不知道它被中止了,但从未真正尝试过,因为它是免费的,但您必须签署协议才能访问它),还有 SpaCy 可以看看在:https://spacy.io/docs/usage/

非常易于安装和使用。请参阅网站上的安装说明,然后使用以下命令下载德语内容:

python -m spacy download de

然后:

>>> import spacy
>>> nlp = spacy.load('de')
>>> doc = nlp('Wir suchen ein Beispiel')
>>> for token in doc:
...     print(token, token.lemma, token.lemma_)
... 
Wir 521 wir
suchen 1162 suchen
ein 486 ein
Beispiel 809 Beispiel
>>> doc = nlp('Er sucht ein Beispiel')
>>> for token in doc:
...     print(token, token.lemma, token.lemma_)
... 
Er 513 er
sucht 1901 sucht
ein 486 ein
Beispiel 809 Beispiel

如您所见,不幸的是,它在您的特定示例(suchen)上做得不是很好,而且我不确定数字代表什么(即必须是引理 id,但不确定还有哪些其他信息可以从中获得),但也许您可以尝试一下,看看它是否对您有帮助。

【讨论】:

谢谢,等我回来一定会试一试的。 感谢您的提示! @Igor,我尝试了您的第二个示例('Er sucht ein Beispiel'),它似乎给出了正确的结果:Er 5864527961345014045 ich sucht 18313823129771624139 suchen ein 4873406193780485055 einen Beispiel 176351906757609250 is gold!正是我一直在寻找的!

以上是关于Python NLTK 中用于情感分析的德语词干的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯的 nltk 词干和停用词

Python:加载的 NLTK 分类器不起作用

nltk31_twitter情感分析

获取 nltk semcor 语料库词的意义词干

02 NLTK 分句分词词干提取词型还原

在NLTK和scikit-learn中结合文本词干和删除标点符号