0

在这个问题之后,我正在尝试使用 stanford corenlp 进行词形还原 。我的环境是:-

我的代码片段是:-

//...........lemmatization starts........................

    Properties props = new Properties(); 
    props.put("annotators", "tokenize, ssplit, pos, lemma"); 
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props, false);
    String text = "painting"; 
    Annotation document = pipeline.process(text);  

    List<edu.stanford.nlp.util.CoreMap> sentences = document.get(SentencesAnnotation.class);

    for(edu.stanford.nlp.util.CoreMap sentence: sentences) 

    {    
        for(CoreLabel token: sentence.get(TokensAnnotation.class))
        {       
            String word = token.get(TextAnnotation.class);      
            String lemma = token.get(LemmaAnnotation.class); 
            System.out.println("lemmatized version :" + lemma);
        }
    }

    //...........lemmatization ends.........................

我得到的输出是: -

lemmatized version :painting

我期望的地方

lemmatized version :paint

请赐教。

4

1 回答 1

2

这个例子中的问题是,绘画这个词可以是to paint的现在分词或名词,并且词形还原器的输出取决于分配给原始单词的词性标签。

如果您仅在片段绘画上运行标记器,则没有上下文可以帮助标记器(或人类)决定应该如何标记单词。在这种情况下,它选择了标签,名词绘画NN的引理实际上是绘画

如果您使用“我正在画一朵花”这句话运行相同的代码。标注器应该正确地将绘画标记为VBG,并且词形还原器应该返回绘画

于 2015-02-23T18:58:30.437 回答