Stanford NLP: Как лемматизировать одно слово?

Я знаю, как я могу комментировать предложение и получать лемму каждого слова, но я не знаю, как это сделать, если я просто хочу лемматизировать одно слово. Я старался

Annotation tokenAnnotation = new Annotation("wedding");
List<CoreMap> list = tokenAnnotation.get(SentencesAnnotation.class);

String tokenLemma = list
                        .get(0).get(TokensAnnotation.class)
                        .get(0).get(LemmaAnnotation.class);

но tokenAnnotation имеет только один TextAnnotation ключ, который означает list будет nullВот.

Так как я могу лемматизировать одно слово?

2 ответа

Решение

Есть два варианта: вы можете аннотировать Annotation возражать через StanfordCoreNLP трубопровод:

StanfordCoreNLP pipeline = new StanfordCoreNLP(new Properties(){{
  setProperty("annotators", "tokenize,ssplit,pos,lemma");
}});

Annotation tokenAnnotation = new Annotation("wedding");
pipeline.annotate(tokenAnnotation);  // necessary for the LemmaAnnotation to be set.
List<CoreMap> list = tokenAnnotation.get(SentencesAnnotation.class);
String tokenLemma = list
                        .get(0).get(TokensAnnotation.class)
                        .get(0).get(LemmaAnnotation.class);

Другой вариант - использовать API SimpleCoreNLP:

String tokenLemma = new Sentence("wedding").lemma(0);

Я думаю, что лемматизировать одно слово небезопасно, нужно знать постаг слова, чтобы его лемматизировать. см. ссылку ниже: https://textminingonline.com/dive-into-nltk-part-iv-stemming-and-lemmatization

Другие вопросы по тегам