波特和兰开斯特词干算法的主要区别和好处是什么?[已关闭]
我正在处理java中的文档分类任务。
强烈推荐这两种算法,每种算法的优点和缺点是什么,哪个在自然语言处理任务的文献中更常用?
我正在处理java中的文档分类任务。
强烈推荐这两种算法,每种算法的优点和缺点是什么,哪个在自然语言处理任务的文献中更常用?
在它的最基本方面,波特和兰开斯特词干算法之间的主要区别在于,兰开斯特词干分析器比波特词干分析器更具侵略性。目前使用的三种主要词干算法是Porter,Snowball(Porter2)和Lancaster(Paice-Husk),侵略性连续体基本上遵循相同的路线。波特是最不激进的算法,每种算法的细节实际上相当冗长和技术性。以下是您的细分:
波特:毫无疑问,最常用的词干分析器,也是最温和的词干分析器之一。为数不多的真正支持Java的词干分析器之一,这是一个加号,尽管它也是计算密集型算法中最多的(授予的不是很大的幅度)。它也是最古老的词干算法。
Porter2:几乎被普遍认为是对搬运工的改进,这是有充分理由的。事实上,波特本人也承认,这比他原来的算法要好。计算时间比 porter 稍快一些,周围有一个相当大的社区。
Lancaster:非常激进的词干算法,有时会出错。对于porter和snowball,词干表示通常对读者来说相当直观,而对于兰开斯特则不然,因为许多较短的单词将变得完全混淆。这里最快的算法,并且会大大减少你的工作词集,但是如果你想要更多的区别,而不是你想要的工具。
老实说,我觉得雪球通常是要走的路。在某些情况下,兰开斯特会大幅削减你的工作集,这可能非常有用,但是在我看来,雪球的边际速度增加不值得缺乏精度。Porter拥有最多的实现,因此通常是默认的首选算法,但如果可以的话,请使用雪球。
Snowball 是一种小型字符串处理语言,旨在创建用于信息检索的词干提取算法。
Snowball编译器将Snowball脚本转换为另一种语言 - 目前支持ISO C,C#,Go,Java,Javascript,Object Pascal,Python和Rust。
由于它有效地提供了“后缀剥离器GRAMmar”,我曾经想过将其称为“strippergram”的想法,但是很好的意义占了上风,因此它被命名为“Snowball”,以向SNOBOL致敬,SNOBOL是1960年代Farber,Griswold,Poage和Polonsky先生 ---的优秀字符串处理语言。
在 Snowball 语言中实现的词干分析器有时简称为 Snowball 词干分析器。例如,请参阅自然语言工具包:nltk.stem.snowball。