【发布时间】:2012-05-20 05:01:13
【问题描述】:
我正在处理 java 中的文档分类任务。
强烈推荐这两种算法,每种算法的优缺点是什么?在自然语言处理任务的文献中,哪种算法更常用?
【问题讨论】:
标签: java machine-learning nlp
我正在处理 java 中的文档分类任务。
强烈推荐这两种算法,每种算法的优缺点是什么?在自然语言处理任务的文献中,哪种算法更常用?
【问题讨论】:
标签: java machine-learning nlp
从根本上说,porter 和 lancaster 词干提取算法之间的主要区别在于,lancaster 词干提取器比 porter 词干提取器更具侵略性。目前使用的三种主要词干提取算法是 Porter、Snowball (Porter2) 和 Lancaster (Paice-Husk),攻击性连续统基本上遵循相同的路线。 Porter 是最不激进的算法,每个算法的细节实际上都相当冗长和技术性。不过,这里有一个细分:
Porter:毫无疑问是最常用的词干分析器,也是最温和的词干分析器之一。为数不多的真正支持 Java 的词干分析器之一,这是一个加分项,尽管它也是算法中计算量最大的(当然不是很大的优势)。它也是最古老的词干提取算法。
Porter2:几乎普遍认为是对 Porter 的改进,这是有充分理由的。事实上,波特本人也承认它比他原来的算法要好。计算时间比 porter 稍快,周围有相当大的社区。p>
Lancaster:非常激进的词干提取算法,有时会出错。对于 porter 和 snowball,词干表示对读者来说通常是相当直观的,而对于 Lancaster 则不然,因为许多较短的单词会变得完全混淆。这里最快的算法,会大大减少你的工作单词集,但如果你想要更多的区别,不是你想要的工具。
老实说,我觉得 Snowball 通常是要走的路。在某些情况下,Lancaster 会极大地减少您的工作集,这可能非常有用,但是在我看来,与滚雪球相比的边际速度增加不值得缺乏精度。虽然 Porter 的实现最多,因此通常是默认的首选算法,但如果可以,请使用雪球。
Snowball 是一种小型字符串处理语言,专为创建 用于信息检索的词干算法。
Snowball 编译器将 Snowball 脚本翻译成另一个 语言 - 目前 ISO C、C#、Go、Java、Javascript、Object Pascal、 支持 Python 和 Rust。
因为它有效地提供了“后缀 STRIPPER GRAMmar”,所以我玩过 有把它称为“脱衣舞娘”的想法,但有道理 盛行,因此它被命名为“雪球”,以向 SNOBOL 致敬, Messrs Farber、Griswold、Poage 的优秀字符串处理语言 和 1960 年代的波隆斯基。
---马丁·波特
以 Snowball 语言实现的词干分析器有时简称为 Snowball 词干分析器。例如,请参阅自然语言工具包:nltk.stem.snowball。
【讨论】:
SnowballStemmer:nltk.org/howto/stem.html