20

我正在寻找一个类或方法,该类或方法需要包含 100 多个单词的长字符串并进行标记,删除停用词和词干以在 IR 系统中使用。

例如:

“大肥猫,对袋鼠说‘我认识的最有趣的人’……”

分词器将删除标点符号并返回一个ArrayList单词

停用词去除器会去除“the”、“to”等词

词干分析器会减少每个单词的“词根”,例如“最有趣”会变得有趣

提前谢谢了。

4

4 回答 4

8

AFAIK Lucene可以做你想做的事。有了StandardAnalyzerStopAnalyzer你可以去停用词去除。结合Lucene contrib-snowball(包括来自Snowball的工作)项目,您也可以进行词干提取。

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

于 2009-11-03T00:15:38.883 回答
6

这些是自然语言处理中的标准要求,因此我会查看此类工具包。由于您需要 Java,我将从 OpenNLP 开始:http: //opennlp.sourceforge.net/

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

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

于 2009-11-03T00:10:01.523 回答
1

我已经处理了我处理过的许多任务的问题,所以让我给出一个标记器建议。由于我没有直接将其作为答案,因此我经常将edu.northwestern.at.utils.corpuslinguistics.tokenizer.*其用作我的标记器系列。PennTreebankTokenizer我看到了许多我使用该类的案例。以下是你如何使用它:

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

这项工作的链接在这里。只是免责声明,我与西北航空、该集团或他们所做的工作没有任何关系。我只是偶尔使用代码的人。

于 2012-06-16T22:06:48.333 回答
0

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

common-english-words.txt

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

于 2009-11-03T00:32:51.583 回答