Tokenizer,停止Word删除,用Java封装

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

例如:

“那只肥胖的大猫,对’袋鼠’说’你最有趣的家伙’……”

标记器将删除标点符号并返回单词的ArrayList

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

词干将减少每个词的“根”,例如“最有趣”会变得有趣

提前谢谢了。

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

但是对于词干还要考虑这个答案: 词干算法产生真实的单词

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

如果你可以看看其他语言也有NLTK(Python)

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

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

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

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

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

共英words.txt

这是porter stemer的许多Java实现之一 。