从文本中提取名词(Java)

Phi*_*hil 13 java nlp

有谁知道从文本正文中仅提取名词的最简单方法?

我听说过TreeTagger工具,我试过试一试,但由于某些原因无法让它工作.

有什么建议?

谢谢菲尔

编辑:

 import org.annolab.tt4j.*; 
TreeTaggerWrapper tt = new TreeTaggerWrapper(); 

try { tt.setModel("/Nouns/english.par"); 

tt.setHandler(new TokenHandler() { 
     void token(String token, String pos, String lemma) {    
     System.out.println(token+"\t"+pos+"\t"+lemma); } }); 
     tt.process(words); // words = list of words 

     } finally { tt.destroy(); 
} 

那是我的代码,英语是语言.我收到错误:新类型TokenHandler(){}必须实现继承的抽象方法TokenHandler.token.难道我做错了什么?

pet*_*ust 23

首先,您必须对文本进行标记.这可能看起来微不足道(在任何空格分裂可能对你有用)但正式情况下它更难.然后你必须决定什么是名词."停车场"是否包含一个名词(停车场),两个名词(汽车,公园)或一个名词(公园)和一个形容词(汽车)?这是一个很难的问题,但是如果没有它,你可能会再次遇到这个问题.

"我看到xyzzy"是否识别出不在字典中的名词?单词"the"可能将xyzzy标识为名词.

"时间过得像箭头"中的名词在哪里?与"像香蕉一样的果蝇"相比(感谢Groucho Marx).

我们在OpenNLP工具包中使用Brown tagger(Java)(http://en.wikipedia.org/wiki/Brown_Corpus)(http://上的opennlp.tools.lang.english.PosTagger; opennlp.tools.postag.POSDictionary)opennlp.sourceforge.net/)以普通英语找到名词,我建议从那开始 - 它为你做了大部分的思考.否则,请查看任何POSTaggers(http://en.wikipedia.org/wiki/POS_tagger)或(http://www-nlp.stanford.edu/links/statnlp.html#Taggers).

在计算机的词性标注中,通常区分英语的50到150个单独的词性,例如,NN表示单数常用名词,NNS表示复数常用名词,NP表示单数专有名词(参见POS)布朗语料库中使用的标签)

http://en.wikipedia.org/wiki/Natural_language_processing_toolkits中有一个非常完整的NLP工具包列表.我强烈建议你使用其中一个,而不是试图匹配Wordnet或其他集合.