stem算法

今天研究sphider源码时,发现其中有个叫做stem($word)的函数,于是研究了一下,发现这是个叫词干抽取算法的东西,具体可以看看wikipedia上的解释:

http://en.wikipedia.org/wiki/Stemming

词干抽取就是将一个英语单词映射到其词根上,比如按照这种算法,fighting,fighter,fighted,fights等都会映射到fight这个词根,这在信息检索时是很重要的,比如你在搜索框输如downloads和download可能结果会差别很大,这是在信息检索上很不想看到的,于是就有各种提取词根的算法,在wiki上我能勉强理解的也就只有利用lookuptable实现lookup算法和suffix-stripping算法,这两种算法都比较好理解,也很好实现,其他的就不大明白了。

这个函数是这个算法的一种实现方式,这个函数是这个算法很简单的一种实现,就是利用php中的正则表达式还有substr()函数去除一个英文单词的无用词尾,我将这个函数单独拿出来测试了一下,这个函数分为5部执行,第一步是取出ing,比如fighting就会变为fight,剩下的几步也无非是类似的处理,不过还是的好好看看。

在网上查找资料时,发现这个算法在好多关于信息检索的地方会见到,比如说sphinx中也会出现这个算法,也有好多c语言的实现方式。










你可能感兴趣的:(stem算法)