78

我正在处理 java 中的文档分类任务。

强烈推荐这两种算法,每种算法的优点和缺点是什么,在自然语言处理任务的文献中更常用的是哪一种?

4

1 回答 1

140

在它的基础上,porter 和 lancaster 词干提取算法之间的主要区别在于,lancaster 词干提取器比 porter 词干提取器更具侵略性。目前使用的三种主要词干提取算法是 Porter、Snowball (Porter2) 和 Lancaster (Paice-Husk),攻击性连续统基本上遵循相同的路线。Porter 是最不激进的算法,每个算法的细节实际上都相当冗长和技术性。不过,这里有一个细分:

Porter:毫无疑问是最常用的词干分析器,也是最温和的词干分析器之一。为数不多的真正支持 Java 的词干分析器之一,这是一个加分项,尽管它也是算法中计算量最大的(当然不是很大的优势)。它也是最古老的词干提取算法。

Porter2:几乎普遍认为是对波特的改进,这是有充分理由的。事实上,波特本人也承认它比他原来的算法要好。计算时间比 porter 稍快,周围有相当大的社区。

Lancaster:非常激进的词干提取算法,有时会出错。对于 porter 和 snowball,词干表示对读者来说通常是相当直观的,而 Lancaster 则不然,因为许多较短的单词会变得完全混淆。这里最快的算法,并且会大大减少你的工作单词集,但如果你想要更多的区别,而不是你想要的工具。

老实说,我觉得 Snowball 通常是要走的路。在某些情况下,Lancaster 会极大地减少您的工作集,这可能非常有用,但是在我看来,雪球的边际速度增加不值得缺乏精度。虽然 Porter 的实现最多,因此通常是默认的首选算法,但如果可以,请使用雪球。

雪球 - 附加信息

Snowball是一种小型字符串处理语言,旨在创建用于信息检索的词干算法。

Snowball 编译器将 Snowball 脚本翻译成另一种语言 - 目前支持 ISO C、C#、Go、Java、Javascript、Object Pascal、Python 和 Rust。

名字的历史

由于它有效地提供了“后缀 STRIPPER GRAMmar”,所以我曾玩弄过将其称为“strippergram”的想法,但良好的感觉已经占了上风,因此它被命名为“Snowball”,以向 SNOBOL 致敬,SNOBOL 是优秀的字符串处理语言1960 年代的 Farber、Griswold、Poage 和 Polonsky 先生。
---马丁·波特

以 Snowball 语言实现的词干分析器有时简称为 Snowball 词干分析器。例如,请参阅自然语言工具包:nltk.stem.snowball

于 2012-06-26T15:07:55.200 回答