我一直在尝试使用Stanford NLP工具包及其词形还原功能。我很惊讶它是如何使一些词语更加引人注目的。例如:
depressing -> depressing
depressed -> depressed
depresses -> depress
无法将depressing
和depressed
转换为相同的引理。 Simmilar与confusing
和confused
,hopelessly
和hopeless
一起发生。我感觉它唯一可以做的就是删除s
如果单词是这样的形式(例如feels -> feel
)。 Lematizatiors的英语行为是否正常?我希望他们能够将这些常用词的变体转换成同一个词。
如果这是正常的,我应该使用割线机吗?而且,有没有办法在StanfordNLP中使用像Porter(Snowball等)这样的限制器?他们的文档中没有提到词干分析器;但是,API中有一些CoreAnnotations.StemAnnotation
。如果不能使用StanfordNLP,你建议在Java中使用哪个词干分析器?
答案 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-