Java 中的分词器、停用词删除、词干提取

Posted

技术标签:

【中文标题】Java 中的分词器、停用词删除、词干提取【英文标题】:Tokenizer, Stop Word Removal, Stemming in Java 【发布时间】:2010-12-12 11:28:22 【问题描述】:

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

例如:

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

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

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

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

非常感谢。

【问题讨论】:

【参考方案1】:

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

但对于词干,还请考虑以下答案:Stemming algorithm that produces real words

【讨论】:

嘿! @jitter 去 Lucene 没有帮助吗?需要更具体的链接。【参考方案2】:

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

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

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

【讨论】:

openNLP 中有主题建模吗?在描述中没有看到。【参考方案3】:

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

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

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

【讨论】:

我可以从哪里下载西北分词器? @Hector 试试bitbucket.org/pibburns/morphadorner/src/…。也许我给了错误的包裹。 4年后很难看出是包装变了还是我原来错了【参考方案4】:

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

common-english-words.txt

这是众多Java implementation of porter stemer之一。

【讨论】:

以上是关于Java 中的分词器、停用词删除、词干提取的主要内容,如果未能解决你的问题,请参考以下文章

02 NLTK 分句分词词干提取词型还原

lucene的分词器宝典

结巴分词获取关键词时怎么过滤掉一些停用词

ik分词器 能不能自己增加关键字 怎么操作

jieba分词器(应用及字典的补充)及文档高频词提取实战

62.修改分词器及手动创建分词器