波特词干(Porter Streamming)提取算法无代码单纯理解
最近写东西提到这个算法,要看一下,结果网上都是直接根据代码解释,对于我这种菜鸟在刚开始看一个算法的时候真心不想直接看代码学。奈何都是各种语言的代码,么得办法。先走了一遍,有了大致的了解,翻译成自己的话,也不知道准不准确,欢迎懂的大佬给我批评指正。
附上官网: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构成。
我理解的大致步骤就是这样,然后就要看代码了,以后发现有错误再改喽。
最新文章
- 获取 windows 商店内的 aapx 安装包 并 安装(旁加载)
- POJ 1780 Code(有向图的欧拉通路)
- Linux用sendmail发信失败,提示Connection refused by [127.0.0.1]
- 字符串String: 常量池
- windows 修改hosts 脚本
- build.xml详解
- sruts2:单个文件上传,多个文件上传(属性驱动)
- 那些教程没有的php2-对象
- HDU 5002 Tree(动态树LCT)(2014 ACM/ICPC Asia Regional Anshan Online)
- Oracle GoldenGate 11.2 OGG-01168(转)
- Terrible Sets
- c++实现的Array数据结构
- (ubuntu)在andorid andk工程中使用ccache加速编译速度
- openStack images概念及维护
- Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作
- delphi 网页提交按钮执行点击事件
- HTML5学习笔记<;四>;: 列表, 块和布局
- webpack搭建服务器,随时修改刷新
- vuejs配置less
- 我们web前端常用的一些Array对象及应用