StanfordNLP词形化无法处理单词

时间:2015-05-13 09:17:00

标签: java nlp stanford-nlp stemming lemmatization

我一直在尝试使用Stanford NLP工具包及其词形还原功能。我很惊讶它是如何使一些词语更加引人注目的。例如:

depressing -> depressing
depressed -> depressed
depresses -> depress

无法将depressingdepressed转换为相同的引理。 Simmilar与confusingconfusedhopelesslyhopeless一起发生。我感觉它唯一可以做的就是删除s如果单词是这样的形式(例如feels -> feel)。 Lematizatiors的英语行为是否正常?我希望他们能够将这些常用词的变体转换成同一个词。

如果这是正常的,我应该使用割线机吗?而且,有没有办法在StanfordNLP中使用像Porter(Snowball等)这样的限制器?他们的文档中没有提到词干分析器;但是,API中有一些CoreAnnotations.StemAnnotation。如果不能使用StanfordNLP,你建议在Java中使用哪个词干分析器?

2 个答案:

答案 0 :(得分:3)

词形还原在很大程度上取决于令牌的词性。只有具有相同词性的标记才会映射到同一个引理。

在句子"这令人困惑",confusing被分析为形容词,因此它被引理为confusing。在句子中,我把你和其他人混淆了#34;相比之下,confusing被分析为动词,并被推理为confuse

如果您希望将具有不同词性的标记映射到相同的引理,您可以使用词干算法,例如Porter Stemming,您可以简单地调用每个标记。

答案 1 :(得分:0)

yvespeirsman的回答的补充:

我看到,在应用词形修饰时,我们应确保文本保留其标点符号,也就是说,在词形修饰之前必须删除标点符号,因为词形修饰符会考虑单词的类型(词性)执行任务时。

请注意以下示例中的混淆混淆

带有标点符号:

for token in nlp("This is confusing. You are confusing me."):
   print(token.lemma_)

输出:

this
be
confusing
.
-PRON-
be
confuse
-PRON-
.

不带标点符号:

for token in nlp("This is confusing You are confusing me"):
   print(token.lemma_)

输出:

this
be
confuse
-PRON-
be
confuse
-PRON-