我正在寻找一个类或方法,它需要长达100多个单词和标记的字符串,删除用于IR系统的停用词和词干。
例如:
“肥胖的大猫,说'你对我最了解的最有趣的家伙'......”
标记器会删除标点并返回ArrayList
个单词
停用词删除器会删除“the”,“to”等词语
词干分析者会将每个单词缩减为“root”,例如“funniest”会变得有趣
非常感谢提前。
答案 0 :(得分:8)
AFAIK Lucene可以做你想做的事。使用StandardAnalyzer
和StopAnalyzer
,您可以删除停用词。结合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:
这是许多Java implementation of porter stemer)中的一个。