我正在寻找一个类或方法,该类或方法需要包含 100 多个单词的长字符串并进行标记,删除停用词和词干以在 IR 系统中使用。
例如:
“大肥猫,对袋鼠说‘我认识的最有趣的人’……”
分词器将删除标点符号并返回一个ArrayList
单词
停用词去除器会去除“the”、“to”等词
词干分析器会减少每个单词的“词根”,例如“最有趣”会变得有趣
提前谢谢了。
我正在寻找一个类或方法,该类或方法需要包含 100 多个单词的长字符串并进行标记,删除停用词和词干以在 IR 系统中使用。
例如:
“大肥猫,对袋鼠说‘我认识的最有趣的人’……”
分词器将删除标点符号并返回一个ArrayList
单词
停用词去除器会去除“the”、“to”等词
词干分析器会减少每个单词的“词根”,例如“最有趣”会变得有趣
提前谢谢了。
AFAIK Lucene可以做你想做的事。有了StandardAnalyzer
,StopAnalyzer
你可以去停用词去除。结合Lucene contrib-snowball
(包括来自Snowball的工作)项目,您也可以进行词干提取。
但是对于词干,还要考虑这个答案:产生真实单词的词干算法
这些是自然语言处理中的标准要求,因此我会查看此类工具包。由于您需要 Java,我将从 OpenNLP 开始:http: //opennlp.sourceforge.net/
如果您可以查看其他语言,还有 NLTK (Python)
请注意,“你我认识的最有趣的人”不是标准语法,这比“你是我认识的最有趣的人”更难处理。并非不可能,但更难。我不知道任何将“你的”等同于“你是”的系统。
我已经处理了我处理过的许多任务的问题,所以让我给出一个标记器建议。由于我没有直接将其作为答案,因此我经常将edu.northwestern.at.utils.corpuslinguistics.tokenizer.*
其用作我的标记器系列。PennTreebankTokenizer
我看到了许多我使用该类的案例。以下是你如何使用它:
WordTokenizer wordTokenizer = new PennTreebankTokenizer();
List<String> words = wordTokenizer.extractWords(text);
这项工作的链接在这里。只是免责声明,我与西北航空、该集团或他们所做的工作没有任何关系。我只是偶尔使用代码的人。