Java 中的分词器、停用词删除、词干提取
Posted
技术标签:
【中文标题】Java 中的分词器、停用词删除、词干提取【英文标题】:Tokenizer, Stop Word Removal, Stemming in Java 【发布时间】:2010-12-12 11:28:22 【问题描述】:我正在寻找一个类或方法,它需要包含 100 多个单词的长字符串并进行标记、删除停用词和词干以用于 IR 系统。
例如:
“大肥猫,对袋鼠说‘我认识的最有趣的人’……”
分词器将删除标点符号并返回一个 ArrayList
的单词
停用词删除器会删除“the”、“to”等词
词干分析器会减少每个单词的“词根”,例如“最有趣”会变得有趣
非常感谢。
【问题讨论】:
【参考方案1】:AFAIK Lucene 可以做你想做的事。使用StandardAnalyzer
和StopAnalyzer
,您可以删除停用词。结合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 中的分词器、停用词删除、词干提取的主要内容,如果未能解决你的问题,请参考以下文章