Search code examples
stanford-nlp

Stanford NLP: How to lemmatize single word?


I know how I can annotate a sentence and get the lemma of each word but I don't know how to do it if I just want to lemmatize a single word. I tried

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);

but the tokenAnnotation has only one TextAnnotation key which means list will be nullhere.

So how can I lemmatize a single word?


Solution

  • There are two options: you can either annotate you Annotation object through a StanfordCoreNLP pipeline:

    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);
    

    The other option is to use the SimpleCoreNLP API:

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