从文本中提取名词 (Java)

2022-09-04 07:43:20

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

我听说过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(); 
} 

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


答案 1

首先,您必须标记文本。这可能看起来微不足道(在任何空格处拆分可能适合您),但形式上它更难。然后你必须决定什么是名词。“停车场”是否包含一个名词(停车场)、两个名词(汽车、停车场)或一个名词(公园)和一个形容词(汽车)?这是一个难题,但同样,如果没有它,你也许能够度过难关。

“我看到了xyzzy”是否标识了字典中没有的名词?单词“the”可能将xyzzy标识为名词。

“时间像箭一样飞逝”中的名词在哪里。与“像香蕉一样的果蝇”(感谢Groucho Marx)进行比较。

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

在计算机的词性标记中,通常区分英语的50到150个单独的词性,例如,NN用于单数常用名词,NNS用于复数常用名词,NP用于单数专有名词(请参阅Brown语料库中使用的POS标记)

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


答案 2

看看LingPipe。据推测,这可以从英语文本中挑选出命名实体。但我必须承认,NLP不是我的专业领域。


推荐