波特词干提取算法


 

资源链接

雪球主页
雪球中的拦截器
ANSI C词干分析器
-及其标题
英语词汇示例
其茎状物
词汇+词干等价物
上述所有内容的Tar-gzipped文件

波特词干分析算法的“官方”主页


这里是一个关于如何在Snowball中编写词干分析算法的案例研究。第一,Porter词干分析器的定义,如中所示程序,第14卷,第3页1980年7月130-137日。


 

算法

A类辅音单词中是除a、E、I、O或U以外的字母,以及其他而不是以辅音开头的Y。(事实上,‘辅音’一词是在某种程度上,定义本身并不会使其模棱两可。)所以在TOY辅音是T和Y,在SYZYGY中是S、Z和G。如果a字母不是辅音而是元音.

辅音用c表示,元音用v.A list ccc。。。长度的大于0将用C表示,并且列表vvv。。。长度更大大于0将用V表示。因此,任何单词或单词的一部分都有一个四种形式中的一种:
CVCV。。。C类
CVCV。。。V(V)
VCVC。。。C类
VCVC。。。V(V)
这些都可以用单一的形式表示
[C] VCVC。。。【V】
其中方括号表示其内容的任意存在。使用(VC)为了表示VC重复m次,这可以再次写成
[C] (VC)[五] ●●●●。
m将被称为测量表示为这种形式。m=0的情况涵盖了空字。以下是一些示例:
m=0TR,EE,TREE,Y,BY。
m=1麻烦,燕麦,树木,常春藤。
m=2故障、私人、OATEN、ORRERY。
这个规则删除后缀将在表格中给出
(条件)S1->S2系列
这意味着如果一个单词以后缀S1结尾,词干在S1之前满足给定条件,S1替换为S2。条件是通常用m表示,例如。
(m>1)米->
这里,S1为“EMENT”,S2为空。这将把REPLACEMENT映射到REPLAC,因为REPLAC是m=2的单词部分。

“条件”部分还可能包含以下内容:
*S公司-词干以S结尾(其他字母也一样)。
*v(v)*-词干包含元音。
*d日-词干以双辅音结尾(例如-TT、-SS)。
*哦-杆端cvc,其中第二个c不是W、X或Y(例如。-WIL,-HOP)。
条件部分还可以包含带有,,所以
(m>1和(*S或*T))
m>1以S或T结尾的阀杆测试,而
(*d而不是(*L或*S或*Z))
测试以L、S或Z以外的双辅音结尾的词干。像这样精细的条件很少需要。

在一套相互隐藏的规则中,只有一条被遵守,而这一点将是与给定单词匹配的S1最长的单词。对于例如,与
上海证券交易所 -> 不锈钢
IES公司 ->
不锈钢 -> 不锈钢
S公司 ->
(这里的条件都为空)CARESSES映射到CARESS,因为SSES是S1的最长匹配。CARESS映射到CARESS(S1='SS')和CARES注意(S1='S')。

在以下规则中,它们的应用实例,无论成功与否,右边以小写形式给出。算法如下:

步骤1a
上海证券交易所 -> 不锈钢    爱抚 -> 爱抚
IES公司 ->     小马 -> 波尼
    领带 ->
不锈钢 -> 不锈钢    爱抚 -> 爱抚
S公司 ->      ->
步骤1b
(m>0)EED -> 电气工程师    喂养 -> 喂养
    同意 -> 同意
(**)ED ->     抹灰的 -> 灰泥
    出血 -> 出血
(**)荷兰国际集团 ->     驾驶汽车 -> 发动机
->
如果步骤1b中的第二或第三条规则成功,则执行以下操作完成:
自动变速箱 -> 吃了    合并 -> 合并
BL公司 -> BLE(发光二极管)    麻烦 -> 麻烦
IZ公司 -> IZE公司    尺寸 -> 大小
(*d而不是(*L或*S或*Z)) -> 单个字母    跳跃 ->
    鞣质 -> 棕褐色的
    下降(ing) -> 落下
    嘶嘶声 -> 嘶嘶声
    嘶嘶作响 -> 嘶嘶作响
(m=1和*o) -> E类    失败(ing) -> 失败
    过滤 -> 文件
映射到单个字母的规则会删除其中一个双精度字母字母对。-E放回-AT、-BL和-IZ上,因此后缀-ATE、-BLE和-IZE可以稍后识别。此E可以在步骤中删除4

步骤1c
(*v*)Y ->     幸福的 -> 哈比
    天空 -> 天空
步骤1处理复数和过去分词。接下来的步骤是简单得多。

第2步
(m>0)国家 -> 吃了    关系的 -> 有联系
(m>0)TIONAL -> TION公司    有条件的 -> 条件
    理性的 -> 理性的
(m>0)ENCI -> ENCE公司    瓦伦西 -> 原子价
(m>0)非国大 -> 安策    赫斯坦奇 -> 犹豫不决
(m>0)点火器 -> IZE公司    数字化仪 -> 数字化
(m>0)ABLI -> ABLE公司    共形的 -> 顺应的
(m>0)所有 -> 美国铝业公司     -> 激进派
(m>0)ENTLI -> 耳鼻喉科    差异(differentli) -> 不同的
(m>0)ELI -> E类    维列利 -> 卑鄙的
(m>0)乌斯利 -> 操作系统    类比 -> 相似的
(m>0)化 -> IZE公司    越南化 -> 使越南化
(m>0)自动 -> 吃了    预测 -> 谓语
(m>0)操作员 -> 吃了    操作人员 -> 操作
(m>0)ALISM -> 美国铝业公司    封建主义 -> 封建的
(m>0)常春藤 -> IVE公司    果断 -> 决定性的
(m>0)富满度 -> FUL公司    希望 -> 充满希望的
(m>0)OUSNESS -> 操作系统    麻木冷淡 -> 麻木
(m>0)高度 -> 美国铝业公司    正规的 -> 正式的
(m>0)IVITI -> IVE公司    敏感性 -> 敏感的
(m>0)胆红素 -> BLE(发光二极管)    敏感性 -> 明智的
通过打开程序,可以快速测试串S1被测单词的倒数第二个字母。这使得串S1可能值的分解。它会被看到的步骤2中的S1字符串是按字母顺序显示的他们倒数第二封信。类似的技术可以应用于其他步骤。

步骤3
(m>0)ICATE -> 集成电路    一式三份 -> 三倍的
(m>0)积极 ->     形成性的 -> 形式
(m>0)校准 -> 美国铝业公司    使形式化 -> 正式的
(m>0)ICITI -> 集成电路    电击 -> 电的
(m>0)ICAL -> 集成电路    与电有关的 -> 电的
(m>0)FUL ->     充满希望的 -> 希望
(m>0)硬度 ->     善良 -> 好的
第4步
(m>1)铝 ->     复兴 -> 复兴
(m>1)ANCE ->     津贴 -> 允许
(m>1)ENCE ->     推理 -> 推断
(m>1)ER ->     客机 -> 空运
(m>1)集成电路 ->     陀螺仪 -> 陀螺仪
(m>1)ABLE ->     可调节的 -> 调整
(m>1)IBLE ->     可辩护的 -> 防御
(m>1)ANT ->     刺激物 -> 刺激
(m>1)米 ->     更换 -> 替换
(m>1)门 ->     调整 -> 调整
(m>1)耳鼻喉科 ->     依赖的 -> 依赖
(m>1和(*S或*T))离子 ->     采用 -> 采用
(m>1)组织单位 ->     同源物 -> 同系物
(m>1)ISM ->     共产主义 -> 公社
(m>1)自动测试仪 ->     激活 -> 激活
(m>1)ITI ->     角鲨属 -> 有角的
(m>1)OUS ->     同源的 -> 同系物
(m>1)IVE ->     有效的 -> 影响
(m>1)IZE ->     鲍德利泽 -> 弓箭手
后缀现在已删除。剩下的只是一点整理。

步骤5a
(m>1)东经 ->     遗嘱认证 -> 遗嘱认证
     ->
(m=1而非*o)E ->     停止 -> 国际原子能机构
步骤5b
(m>1和*d和*L) -> 单个字母    控制器 -> 控制
     ->


现在,把它变成雪球。

波特词干分析器使用了一个度量,、单词长度或单词部分。如果C类是一个或多个辅音的序列,并且V(V)一个序列对于一个或多个元音,任何单词部分都有以下形式
[C类](风险资本)[V(V)],
作为可选内容阅读C类,后面是重复风险资本,后面是可选的V(V)。这定义了.所以黄昏的这个度量为4。
c r e p u s c u l a r|   |     |   |   |[C] 伏、伏、伏1    2    3   4
大多数后缀删除规则都会留下一个词干测量值超过某个值,
(> 0)电子设备 -> ee公司
表示“替换”电子设备具有ee公司如果茎之前电子设备具有度量值> 0’. Porter词干分析器的实现通常有一个例程计算每次都有可能被删除的候选者。

事实上,唯一的测试Porter词干分析器中有> 0,>1、和,在两个有趣的地方,= 1. 这表明有两个单词中的关键位置:从左到正确的,>0变为真,然后>1变为真。事实证明>0在第一个辅音之后变为真在元音之后,以及>1在第一个之后的点变为真元音后面的辅音跟在元音后面辅音后面。调用这些位置第页1和第页2,我们可以很简单地确定它们雪球:
定义v‘aeiouy’....做(gopast v gopast非v设置标记p1gopast v gopast非v设置标记p2)
右侧区域第页1表示为1,区域到的权利第页2由2:
c r e p u s c u l a r|   |第1页第2页<---R1--><--R2-->
我们可以通过调用R1级R2级,由定义,
将R1定义为$p1<=光标将R2定义为$p2<=游标
使用这些测试而不是计算是可以接受的,只要堵塞过程不会改变第页1和第页2个位置,确实如此在Porter词干分析器中。

这里介绍的词干分析器的一个特别有趣的特性是他们对职位的常用第页1和第页2.标记细节第页1第页由于元音和辅音不同。例如,法语前面跟元音应被视为辅音(inqu(印度语)意大利语); 葡萄牙语(昂õ应视为元音对(圣约昂). 第三个重要的位置是pV值,它试图标记最短的可接受的动词词干。它的定义因语言而异。Porter词干分析器不使用pV值明确地说,但当动词结尾惯性导航与制导经修订的只有在前面有元音时才被删除。因此,用英语pV值将被定义为第一个元音。

波特词干分析器分为五个步骤,步骤1进一步划分到步骤1, 1b条和1c(c),以及步骤5到步骤5和5b条。步骤1删除这个-后缀和步骤2到4d日-后缀(*).复合材料d日-后缀是减少到单个d日-一次加一个后缀。例如,如果一个单词结束宗教的,步骤2将其减少为副本和步骤3至集成电路。三个步骤是足以用英语进行此过程。第5步做了一些整理。

可以通过以下方式看出,词干规则是多么容易转化为雪球比较步骤1的定义从1980年的论文中,
步骤1a:SSES->SS抚摸->抚摸IES->I小马->小马领带->钛SS->SS抚摸->抚摸S->猫->猫
与雪球相当,
将步骤1a定义为([子字符串]('sss'(<-'ss')“ies”(<-'i)“ss”()“s”(删除)))
正在从末尾向右向左扫描要词根的单词。这个中最长的“ss”,  “是”,  “ss”“s”搜索并定义为切片。(如果未找到,步骤1a发出信号(f).)如果“ss”找到了,它是替换为“ss”等等。当然,替换“ss”“ss”是个假人动作,所以我们可以写
“ss”()
而不是
'ss'(<-'ss')
记住这一点删除只是手段<- ''.

整个算法真正棘手的部分是步骤1b条,这可能值得详细研究。在这里,没有最右边的示例单词,
步骤1b:(m>0)EED->EE(*v*)ED->(*v*)荷兰国际集团->如果步骤1b中的第二或第三条规则成功完成以下操作:自动变速箱->自动变速箱BL->BLEIZ->IZE(*d而非(*L或*S或*Z))->单个字母(m=1和*o)->E
规则的第一部分意味着电子设备映射到ee公司如果电子设备在中1(相当于>0),或经修订的惯性导航与制导如果它们是前面有元音。在雪球中,这很简单,
将步骤1b定义为([子字符串](“eed”(R1<-“ee”)“ed”“ing”(测试gopast v删除)))
但这必须通过规则的第二部分进行修改。*d日表示双字母辅音测试-英国广播公司,等。*L(左),*S公司,*Z轴是测试对于,,z(z).*哦是一个短元音测试-它与辅音-vowel-consonant,右边的辅音不是w个,x个.如果短元音测试合格,=1等于光标位于第页1.所以规则的第二部分是指地图,bl(黑色),iz公司吃了,布尔,确定大小; 将某些双字母映射为单字母;添加e(电子)在一个音节的单词中短元音之后。

我们首先需要两个额外的分组,
定义v“aeiouy”用“w”、“x”和“y”辅音定义v_WXY v+“WXY”//v用“l”、“s”、“z”定义v_LSZ v+“LSZ”//v
还有一个短元音测试,
将shortv定义为(non-v_WXY v non-v)
v_WXY测试是第一位的,因为我们从右往后扫描左图。)

双字母到单字母映射可以按如下方式完成:首先定义作为下一个切片非v_LSZ并将其复制为字符串中国,作为单身字符,
字符串(ch)....[非v_LSZ]->ch
进一步测试中国,测试字符串的下一个字母是否相同作为中的一个中国,如果这发出信号t吨,  删除删除切片,
[非v_LSZ]->ch ch删除
步骤1b然后可以这样写,
将步骤1b定义为([子字符串](“eed”(R1<-“ee”)“ed”“正在”(测试gopast v删除(在(“at”“bl”“iz”)<+“e”之间测试)([非v_LSZ]->ch ch删除)(标记p1测试短路<+‘e’))))
但我们可以通过旋转规则的第二部分变成另一部分在…之间命令,注意到需要取消发布的信件有b条,d日,(f),,,n个,第页,t吨,
将步骤1b定义为([子字符串](“eed”(R1<-“ee”)“ed”“正在”(测试gopast v删除测试子串('位于“bl”“iz”(<+“e”)“bb”“dd”“ff”“gg”“mm”“nn”“pp”“rr”“tt”//忽略双c、h、j、k、q、v、w和x([下一步]删除)“”(标记p1测试短路<+“e”)))))
注意第二个中的空字符串在…之间,作为默认情况。

Snowball中的Porter词干分析器如下所示。这是一个精确的作者发布的其他实现,包括、和始终有,与原始算法。由于看到了算法的所有其他实现作者在某种程度上不准确,这可能是第一次正确实施。


 

雪球中的完整算法


整数(p1 p2)布尔值(Y_found)例行程序(短片R1和R2步骤1a步骤1b步骤1c步骤2步骤3步骤4步骤5a步骤5b)外部(阀杆)分组(v v_WXY)定义v“aeiouy”定义v_WXY v+“WXY”反向模式(将shortv定义为(non-v_WXY v non-v)将R1定义为$p1<=光标将R2定义为$p2<=游标将步骤1a定义为([子字符串]('sss'(<-'ss')“ies”(<-'i)“ss”()“s”(删除)))将步骤1b定义为([子字符串](“eed”(R1<-“ee”)“ed”“正在”(测试gopast v删除测试子串('位于“bl”“iz”(<+“e”)“bb”“dd”“ff”“gg”“mm”“nn”“pp”“rr”“tt”//忽略双c、h、j、k、q、v、w和x([下一步]删除)“”(标记p1测试短路<+“e”)))))将步骤1c定义为([“y”或“y”]gopast v型<-“i”)将步骤2定义为([substring]R1,其中(“国家”(<-“国家”)“enci”(<-“ence”)“anci”(<-“ce”)“abli”(<-“able”)“entli”(<-'ent')“eli”(<-ee)“izer”“ization”(<-“大小”)'national''ation''ator'(<-“日期”)“alli”(<-“al”)“alistis”“aliti”(<-‘al’)“满”(<-'ful')“ousli”“ouss”(<-“我们”)“ness”“iviti”(<-“活”)'biliti'(<-'ble')))将步骤3定义为([substring]R1,其中(“alize”(<-'al)“副本”“iciti”“ical”(<-“ic”)“主动”“完整”“性”(删除)))将步骤4定义为([substring]R2,其中(“al”“ance”“ence”“er”“ic”“able”“ible”“ant”“ement”“ment”“ent”“ou”“ism”“eat”“iti”“ous”“ive”“ize”(删除)“ion”(“s”或“t”删除)))将步骤5a定义为([“e”]R2或(R1不短路)删除)将步骤5b定义为([我']R2“l”删除))将阀杆定义为(取消设置Y_founddo(['y']<-'y'设置y_found)重复(goto(v['y'])<-'y'set y_found)$p1=限制$p2=限制做(gopast v gopast非v设置标记p1gopast v gopast非v设置标记p2)向后(执行步骤1a执行步骤1b执行步骤1c执行步骤2执行步骤3执行步骤4执行步骤5a执行步骤5b)do(Y_found重复(转到(['Y'])<-'Y')))