2015-02-25 3 views
0

У меня есть ресурс, где я точно знаю типы слов. я должен их леммами, но для правильных результатов я должен вручную пометить их. Я не мог найти код для ручной маркировки слов. i m, используя следующий код, но он возвращает неверный результат. то есть «живопись» для «живописи», где я ожидаю «краски».Ручная маркировка слов с использованием Stanford CorNLP

*//...........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.........................* 

Мне нужно запустить лемматизатор на словах, а не предложения, где пометка будет выполняться автоматически. поэтому сначала я должен вручную пометить слова, а затем найти их лемму. помощь с некоторым примером кода или ссылкой на какой-то сайт будет большой помощью.

ответ

1

Если вы знаете POS метки заранее, вы можете получить следующий лемм так:

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

Morphology morphology = new Morphology(); 

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 tag = ... //get the tag for the current word from somewhere, e.g. an array 
    String lemma = morphology.lemma(word, tag); 
    System.out.println("lemmatized version :" + lemma); 
    } 
} 

В случае, если вы только хотите получить лемму из одного слова, вы не должны даже работать CoreNLP для токенизации и разделения предложений, поэтому вы можете просто вызвать функцию леммы следующим образом:

String tag = "VBG";  
String word = "painting"; 
Morphology morphology = new Morphology(); 
String lemma = morphology.lemma(word, tag); 
+0

Точно то, что я хотел. – jaykio77

Смежные вопросы