【问题标题】:StanfordNLP lemmatization cannot handle -ing wordsStanfordNLP lemmatization 无法处理单词
【发布时间】:2015-05-13 09:16:59
【问题描述】:

我一直在试验斯坦福 NLP 工具包及其词形还原功能。我很惊讶它是如何将某些单词词形还原的。例如:

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

它无法将depressingdepressed 转换为相同的引理。 confusingconfusedhopelesslyhopeless 也会发生类似情况。我感觉它唯一能做的就是删除s,如果这个词是这样的形式(例如feels -> feel)。这种行为对于英语中的 Lematizatiors 来说是否正常?我希望他们能够将常见单词的此类变体转换为相同的引理。

如果这是正常的,我应该使用词干分析器吗?而且,有没有办法在 StanfordNLP 中使用像 Porter(Snowball 等)这样的词干分析器?他们的文档中没有提到词干分析器;但是,API 中有一些 CoreAnnotations.StemAnnotation。如果无法使用 StanfordNLP,您推荐在 Java 中使用哪些词干分析器?

【问题讨论】:

    标签: java nlp stanford-nlp stemming lemmatization


    【解决方案1】:

    词形还原关键取决于令牌的词性。只有具有相同词性的标记被映射到相同的引理。

    在“这很混乱”这句话中,confusing 被分析为形容词,因此它被词形化为confusing。相比之下,在“我把你和其他人混淆了”这句话中,confusing 被分析为动词,并被词形化为confuse

    如果您希望将具有不同词性的标记映射到同一个词条,您可以使用诸如Porter Stemming 之类的词干算法,您可以简单地调用每个标记。

    【讨论】:

    • 是的。如果您需要 psedu-stems,请使用词干分析器,但要非常小心,因为词干并不总是真实的单词(它只是使用一堆硬编码的规则和正则表达式,所以它不是那么聪明)!
    【解决方案2】:

    对 yvespeirsman 的回答进行补充:

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

    请注意以下示例中的词 confuseconfusing

    带标点:

    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-
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多