zoukankan      html  css  js  c++  java
  • 波特词干(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构成。

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

  • 相关阅读:
    贪心算法解汽车加油站问题
    Kickstart Practice Round 2017---A
    win8.1系统下安装ubuntu实现双系统实践教程
    2017年1月15日--牛客网
    想写点什么而已
    Java中this和super的用法总结
    数据库练习(16年12月27日)-- 牛客网
    Technical Development Guide---for Google
    Java 自动装箱与拆箱(Autoboxing and unboxing)
    [LeetCode] Department Highest Salary -- 数据库知识(mysql)
  • 原文地址:https://www.cnblogs.com/space130/p/10749076.html
Copyright © 2011-2022 走看看