最近写东西提到这个算法,要看一下,结果网上都是直接根据代码解释,对于我这种菜鸟在刚开始看一个算法的时候真心不想直接看代码学。奈何都是各种语言的代码,么得办法。先走了一遍,有了大致的了解,翻译成自己的话,也不知道准不准确,欢迎懂的大佬给我批评指正。

附上官网:https://tartarus.org/martin/PorterStemmer/

一、先把单词按下述规则整理成“CV”的格式

我们假设,"C"代表一连串辅音字母,“V”代表一连串元音字母。所以,是所有单词都可以用四种字母组合来表示:

CVCV……C

CVCV……V

VCVC……C

VCVC……V

用[ ]表示可选,即有或没有均可。则四种形式可以归纳为:

[C]VCVCVC……[V]

用m表示辅音串“C”的个数,进而可以将上述形式转化为:

[C]VC{m}[V]

这样,我们就可以将每个单词都写成这种形式。

二、明确提取词干的规则

链接:https://blog.csdn.net/zhanghaiyang9999/article/details/41628789

*S  -词干以S结束 (同样适用于其他字符).

*v* - 词干包含一个元音.

*d  - 词干以两个相同辅音结束(如. -TT, -SS).

*o  - 词干以cvc的形式结束, 但是第二个c(辅音)不是 W, X 或者Y (如 -WIL, -HOP).

这些条件可以用AND,OR和NOT来运算,但只选择符合最长的一种,例如:

SSES -> SS    AND
IES  -> I           AND
SS   -> SS      AND
S    ->

classes->class而不是classe,因为它会选择最长的匹配规则。

另外,步骤一中提到的m也会作为条件规则的一部分。

三、加入合适条件取出后缀

(condition) S1 -> S2

(condition) 是s1的条件,假如s1满足(condition) ,那么就转化为s2。(condition) 由步骤二中的规则和逻辑连接词AND,OR和NOT构成。

我理解的大致步骤就是这样,然后就要看代码了,以后发现有错误再改喽。

最新文章

  1. 获取 windows 商店内的 aapx 安装包 并 安装(旁加载)
  2. POJ 1780 Code(有向图的欧拉通路)
  3. Linux用sendmail发信失败,提示Connection refused by [127.0.0.1]
  4. 字符串String: 常量池
  5. windows 修改hosts 脚本
  6. build.xml详解
  7. sruts2:单个文件上传,多个文件上传(属性驱动)
  8. 那些教程没有的php2-对象
  9. HDU 5002 Tree(动态树LCT)(2014 ACM/ICPC Asia Regional Anshan Online)
  10. Oracle GoldenGate 11.2 OGG-01168(转)
  11. Terrible Sets
  12. c++实现的Array数据结构
  13. (ubuntu)在andorid andk工程中使用ccache加速编译速度
  14. openStack images概念及维护
  15. Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作
  16. delphi 网页提交按钮执行点击事件
  17. HTML5学习笔记<四>: 列表, 块和布局
  18. webpack搭建服务器,随时修改刷新
  19. vuejs配置less
  20. 我们web前端常用的一些Array对象及应用

热门文章

  1. HTML div块内剧中
  2. Python多线程笔记(一)
  3. P1213 时钟
  4. PHP全栈学习笔记29
  5. 简单python脚本,将jupter notebook的ipynb文件转为pdf(包含中文)
  6. 如何查看Linux cpu核数、版本等信息
  7. LUA table中函数的调用
  8. Apache Flink - 数据流容错机制
  9. Nginx之web服务器
  10. Vue学习手记01-安装和项目创建