Tokenizer,停止Word删除,用Java编写

时间:2009-11-03 00:04:29

标签: java tokenize stemming stop-words

我正在寻找一个类或方法,它需要长达100多个单词和标记的字符串,删除用于IR系统的停用词和词干。

例如:

  

“肥胖的大猫,说'你对我最了解的最有趣的家伙'......”

标记器会删除标点并返回ArrayList个单词

停用词删除器会删除“the”,“to”等词语

词干分析者会将每个单词缩减为“root”,例如“funniest”会变得有趣

非常感谢提前。

4 个答案:

答案 0 :(得分:8)

AFAIK Lucene可以做你想做的事。使用StandardAnalyzerStopAnalyzer,您可以删除停用词。结合Lucene contrib-snowball(其中包括来自Snowball)项目的工作,您也可以进行干预。

但对于词干还要考虑这个答案:Stemming algorithm that produces real words

答案 1 :(得分:6)

这些是自然语言处理的标准要求,所以我会查看这些工具包。既然你需要Java我会从OpenNLP开始: http://opennlp.sourceforge.net/

如果您可以查看其他语言,还有NLTK(Python)

请注意,“我认识的最有趣的人”不是标准语法,这使得处理起来比“你知道的最有趣的人”更难处理。并非不可能,但更难。我不知道任何将“你的”等同于“你是”的系统。

答案 2 :(得分:1)

我已经处理过与我合作过的一些任务的问题,所以让我给出一个标记器建议。由于我没有看到它直接作为答案,我经常使用edu.northwestern.at.utils.corpuslinguistics.tokenizer.*作为我的标记符族。我看到一些使用PennTreebankTokenizer类的情况。以下是您使用它的方式:

    WordTokenizer wordTokenizer = new PennTreebankTokenizer();
    List<String> words = wordTokenizer.extractWords(text);

此作品的链接是here。只是免责声明,我与西北大学,小组或他们的工作没有任何关系。我只是偶尔使用代码的人。

答案 3 :(得分:0)

以下是NLP tools的完整列表。有时候自己创建它们是有意义的,因为它们会更轻,你可以更好地控制内部工作:使用简单的正则表达式进行标记化。对于停用词,只需将下面的列表或其他列表推送到HashSet:

common-english-words.txt

这是许多Java implementation of porter stemer)中的一个。