English(Porter2)词干提取算法


 

资源链接

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

停止词列表




下面是一个词汇表示例,其词干形式将使用算法生成。

单词          单词
托运
委托
委托
托运
包括
由…组成
一致性
一致的
一贯地
由…组成
包含
安慰
安慰
安慰的
慰问
安慰
控制台
巩固
加固的
合并
安慰
安慰地
安慰
辅音
配偶
联合的
联合
显眼的
明显地
阴谋
阴谋家
共谋者
阴谋
密谋的
阴谋
警察
警察
康斯坦斯
恒常性
常数
 =>  托运
托运
托运
托运
包括
包括
包括
包括
包括
包括
包括
控制台
控制台
安慰者
控制台
控制台
控制台
固结的
固结的
固结的
控制台
控制台
控制台
配偶
配偶
配偶
配偶
显眼的
显眼的
阴谋
阴谋
阴谋
阴谋
阴谋
阴谋
建立
建立
康斯坦克
康斯坦克
常数
诀窍
枯枝落叶
诀窍
无赖
无赖
无赖
恶棍
揉捏的
揉捏


跪着的
跪着
跪下
膝盖
丧钟
跪下
知道
尼克斯


骑士
骑士般地
骑士
编织
针织物
针织的
针织

旋钮
旋钮

敲打
敲门器
敲门器
敲击
敲门
克诺普


 =>  诀窍
巴克利人
诀窍
无赖
无赖
无赖
恶棍
揉捏
揉捏






丧钟
跪下
知道
尼克斯


骑士
骑士
骑士
编织
编织
编织
编织
针织品
旋钮
旋钮


敲门器
敲门器


克诺普





 

开发英语词干分析器

(略有修订,2001年12月)
(进一步修订,2002年9月)

我不止一次尝试改进波特的结构算法,使其遵循删除罗曼史结尾的模式语言词干分析器。不难看出为什么要这样做:步骤1b条Porter词干去除预计起飞时间惯性导航与制导,其中包括-后缀(*)附在动词上。如果删除这些后缀应该不需要移除d日-虽然后缀不是动词它会尝试这样做。这似乎是波特词干分析器的一个缺陷,不被浪漫主义者分享。同样,步骤之间的划分2、3和4似乎相当武断,在《浪漫词干集》中找不到。

然而,这些改进尝试都被放弃了。他们似乎导致算法更加复杂,但没有明显的改进。不注意步骤1结果的原因b条可能是这样英语词尾对词类的影响不如浪漫主义语言中的结尾。例如,条件位置在法语中必须是名词,但在英语中可以是动词以及名词,
我们都受到广告的制约
他们今天的定位不同
单独执行步骤2、3和4的一个可能原因是d日-英语中的后缀组合相当复杂已完成在别处.

但使用波特二十年后词干分析器,确实有一些改进,以及一种新算法因此这里提供英语。(它可以被称为“Porter2”以将其与派生它的Porter词干分析器区分开来。)变化并不太广泛:(1)终止已更改为不太常见,(2)后缀我们不会丢失它,(3)a为删除添加了几个附加后缀,包括(4)后缀第页此外,还包括一小部分例外表格。2001年12月,又进行了两次调整:(5)步骤5和5b条将旧的波特式茎干器组合成一个步骤。这意味着那场未公开的决赛陆上通信线未完成最终移除电子. (6)在步骤3中主动的,主动的仅在区域内时删除R(右)2(7)7月2005年进行了小调整(包括新的步骤0)以应对撇号。

首先,这里是基本算法,没有参考特殊形式。与波特算法的精确比较需要如果要做的话,一定要非常小心。这里我们用*出发日期,截止日期+其他功能。在示例词汇表中,波特和波特2将不到5%的单词转换成不同的形式。
 

英语词干分析器的定义

定义元音作为其中之一
爱你
定义双重的作为其中之一
bb-dd-ff-gg-mm-nn-pp-rr-tt
定义有效的-结束作为其中之一
c d e g h k m n r t公司
R(右)1是元音后面第一个非元音之后的区域,或如果没有这样的非元音单词。(此定义可能会因某些例外情况而修改单词-见下文。)

R(右)2是中元音后面第一个非元音之后的区域R(右)1或如果没有这样的非元音,单词的结尾。(请参见笔记R(右)1和R(右)2.)

定义短音节用一个词来说就是()后跟元音的元音非元音w个,x个Y(Y)前面是非元音,或*(b条)单词开头的元音后跟非元音。

所以说唱,陷阱,诱捕以短音节结尾现在,,被归类为短音节。但是根除,赐予,打扰不要以短音节。

一个词被称为短的如果它以短音节结尾,如果R(右)1为空。

所以,切碎都是简短的单词,有孔小珠,嵌入,不是简短的单词。

撇号(')可以被视为一封信。(请参见笔记英语中的撇号。)

如果这个单词有两个或更少的字母,就保持原样。

否则,请执行以下每个操作,

删除初始值',如果存在。+然后,

设置初始值,或在元音之后,到Y(Y),然后建立区域R(右)1和R(右)2(请参见笔记元音标记。)

步骤0:+
搜索后缀中最长的,

'
“s”
如果发现,请移除。
第1步:
搜索以下后缀中最长的后缀,并执行已指示操作。

安全标准
替换为不锈钢

伊德+ ies公司*
替换为如果前面有多个字母,则为(所以领带 -> 领带, -> 克里)

如果前面的单词部分不在(所以气体保留,间隙新西兰人失去它)

我们+ 不锈钢
什么都不做
第1步b条:
搜索以下后缀中最长的后缀,并执行已指示操作。

需要紧急+
替换为ee公司如果在R(右)1

爱德华利+ 非常高兴+
如果前面的单词部分包含元音,则删除,删除后:
如果单词结束,bl(黑色)iz公司添加电子(所以奢侈 -> 奢侈的),或
如果单词以双精度结尾删除最后一个字母(所以跳跃 -> 单足蹦跳),或
如果单词短,请加上电子(所以单足蹦跳 -> 希望)
第1步c(c):*
替换后缀Y(Y)通过如果前面有一个非元音,它不是单词的第一个字母(so哭泣 -> 克里,通过 -> 通过, -> )
第2步:
搜索以下后缀中最长的后缀,如果在中找到和R(右)1,执行指示的操作。

民族:替换为选项
国家情报局:替换为性质
anci公司:替换为昂(ance)
abli公司:替换为能够的
恩特里:替换为耳鼻喉科
(燃料)化:替换为确定大小
民族主义者:替换为吃了
阿里蒂·阿利主义:替换为
充满:替换为满满的
卓越:替换为乌斯
伊维蒂:替换为
哔哩哔哩+:替换为布尔
奥美+:替换为og(运行日志)如果前面有
完全(fulli)+:替换为满满的
莱斯利+:替换为较少的
+:如果前面有有效的-结束
第三步:
搜索以下后缀中最长的后缀,如果在中找到和R(右)1,执行指示的操作。

民族+:替换为选项
国家的+:替换为吃了
实现:替换为
重复信息:替换为集成电路
充满:删除
主动的,主动的*:在中时删除R(右)2
第4步:
搜索以下后缀中最长的后缀,如果在中找到和R(右)2,执行指示的操作。

可靠性评估民族主义占据主动地位
删除
离子
如果前面有,则删除t吨
第五步:*
搜索以下后缀,如果找到,执行指示的操作。

电子
在中删除R(右)2或inR(右)1且前面没有短音节
在中删除R(右)2,前面有
最后,转动任何剩余的Y(Y)单词中的字母变回小写。
 

一般特殊形式

很容易扩展Snowball脚本,以便单词形式得到特殊处理。标准情况是某些单词W公司1,  W公司2  ..., 不是通过词干分析过程,而是映射到表单X(X)1,  X(X)2。。。分别是。如果脚本有通过调用进行词干分析
将阀杆定义为C
其中C类是一个命令,异常情况可以通过将其扩展到
将阀杆定义为(例外或C)
并进行例行程序例外:
将异常定义为([substring]限制在('西1'(<-'X1' )'西2'(<-'X2' )...))
达到极限导致测试整个字符串是否与W公司,如果找到匹配项,则将字符串替换为X(X).

更准确地说,我们可能有一组单词W公司11,  W公司12  ...需要映射到的X(X)1,另一组W公司21,  W公司22…需要映射到X(X)2等等,以及单词列表V(V)1,  V(V)2。。。 V(V)k个保持不变。这个例外然后可以按如下方式编写例程:
其中('W11“W”12' ... (<-'X1')'西21“W”22' ... (<-'X2')...'西n1个“W”氮气' ... (<-'Xn个')“V”1“V”2' ... 'V(V)k个')
事实上例外情况1英语词干分析器的例行程序就是这样形状:
将exception1定义为([substring]限制在(/*特殊更改:*/“滑雪板”(<-“ski”)“天空”(<-“天空”)“垂死”(<-“死亡”)“撒谎”(<-'lie')“打结”(<-'tie')/*特殊-LY案例*/“空闲”(<-'idl)“温柔”(<-“温柔”)“丑陋”(<-'ugli)“早”(<-'earli)“仅”(<-'onli)“单个”(<-“单个”)//。。。此处可能有扩展。。。/*不变形式:*/“天空”“新闻”“豪”“atlas”“cosmos”“bias”“andes”//非复数形式//。。。此处可能有扩展。。。))
(稍后将对此处出现的单词进行更多介绍。)

在这里,我们看到在词干提取之前,单词被异常处理,但我们同样可以在完成词干分析后,对词干进行例外处理,因此,如果我们愿意,可以映射吸收的吸收,还原减少等,如洛文斯干管器.但更一般地说,在整个算法中,每个重要步骤都可能被识别例外情况,以及适当放置的在…之间会照顾他们的。例如,提出了一个观点文献中至少有两次是这样的通用波特词干分析器:
生成
生成
生成
生成
一般的
通常地
通用的
一般地
慷慨的
慷慨地
 ->  通用
为了解决这个过度阻塞的问题,我们对第页1中,的左点R(右)1,因此更换
gopast v gopast非v设置标记p1
具有
其中(“通用”//。。。这里可能包括其他茎。。。)或(gopast v gopast non-v)设置标记p1
之后的单词开始通用阀杆如下:
生成
生成
生成
生成
 ->  发电机
一般的
通常地
 ->  一般的
通用的
一般地
 ->  通用的
慷慨的
慷慨地
 ->  慷慨的
另一个示例由例外情况2例程,类似于例外情况1,但放置在步骤1a,可能已拆下端子,
将exception2定义为([substring]限制在(“围棋”“郊游”“罐头”“鲱鱼”“继续”超过“成功”//。。。此处可能有扩展。。。))
因此,Snowball很容易添加异常列表。但要决定例外情况远非易事。基本上有两条攻击线系统化和零星化。人们可以系统地将例如,不规则动词。零碎的方法是根据人们的注意添加例外他们-就像通用以上。系统方法的问题是它应该通过调查整个语言词汇来完成,这比大多数人都要多准备好了。零碎方法的问题是它是任意的,而且通常产量很少。

英语词干分析器中的异常列表旨在说明问题(“如果您want to do it’),并且是逐段派生的。

)新词干分析器在处理短单词结尾时改进了Porter词干分析器电子然而,这四种形式处理不当天空,天空,滑雪,滑雪板,通过将其中三个单词视为特殊情况。

b条)类似地惯性导航与制导三字母动词结尾形式.那里只有三个这样的动词:死亡,领带,因此为临终的,撒谎捆扎.

c(c))一个人必须小心一点惯性导航与制导形式。一局,郊游,罐装,谁都不希望要阻止的在里面,外面的,可以.

d日)后缀的删除第页(不在Porter词干分析器中)有许多异常。某些简短的例外是无所事事,轻轻地,丑陋的,早期的,只有,单独地.罕见的词语(鬃毛状的,魁梧的,卷曲的,脾气暴躁的…)不包括在内。

电子)剩下的单词是根据波特算法用户的投诉而写的。新闻不是的复数形式新的(在为路透社)。是姓氏,需要与怎样(注意到在下议院的一次示威活动中寻找“杰弗里·豪爵士”)。成功etc不是过去分词,所以预计起飞时间不应拆除(指出在一封来自印度的电子邮件中发送给我)。鲱鱼不应该干到(另一封来自的电子邮件俄罗斯)。

(f))最后,以一些非模糊的词语结尾已添加。

顺便说一句,这说明了从词干分析的实际用户那里可以得到多少反馈算法:二十年七八个单词!

因此,上述英语词干分析器的定义由以下内容补充:


 

英语词干分析器中的异常形式

如果单词开始通用,公社,套R(右)1是单词。

词干特殊单词如下:,

滑雪板  ->  滑雪
天空  ->  天空
临终的
撒谎
捆扎
-> 死亡

领带
无所事事
轻轻地
丑陋的
早期的
只有
单独地
-> idl公司
温和的
乌格利语
厄利
在线
单个


如果发现以下情况之一,请保持不变,

天空
新闻
地图集  宇宙  偏差  安山岩


遵循步骤1,保持以下不变,

一局  郊游  罐装  鲱鱼  耳环
继续  超过  成功



 

雪球中的完整算法


整数(p1 p2)布尔值(Y_found)例行程序(前奏尾曲标记_区域短片R1 R2级步骤1a步骤1b步骤1c步骤2步骤3步骤4步骤5例外情况1例外情况2)外部(阀杆)分组(v v_WXY valid_LI)弦{}定义v“aeiouy”定义v_WXY v+“WXY”定义valid_LI“cdeghkmnrt”将前奏定义为(取消设置Y_founddo([“{”}“]删除)do(['y']<-'y'设置y_found)重复(goto(v['y'])<-'y'set y_found))将mark_regions定义为($p1=限制$p2=限额做(其中(“通用”“公社”//于2005年5月添加2006年11月添加的“砷”//(砷/军火库)//。。。此处可能有扩展。。。)或(gopast v gopast non-v)设置标记p1gopast v gopast非v设置标记p2))反向模式(将shortv定义为((非v_WXY与非v)(非v v at极限))将R1定义为$p1<=光标将R2定义为$p2<=游标将步骤1a定义为(尝试([substring]在({'}'{'}s{'}s{'}'(删除)))[substring]在('sss'(<-'ss')“ied”“ies”((跳2<-'i')或<-'ie')“s”(下一次gopast v删除)“我们”“ss”))将步骤1b定义为([substring]在(“eed”“eedly”(R1<“e”)“非常”“非常”(测试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”]非v非atlimit<-“i”)将步骤2定义为([子字符串]R1(“民族”(<-“民族”)“enci”(<-“ence”)“anci”(<-“ance”)“abli”(<-“able”)“entli”(<-'ent')“izer”“ization”(<-“大小”)'national''ation''ator'(<-“日期”)“alism”“aliti”“alli”(<-‘al’)“满”(<-'ful')“ousli”“ouss”(<-“我们”)“ness”“iviti”(<-'ive')“biliti”“bli”(<-'ble')“ogi”(“l”<-“g”)“完整”(<-“完整”)“lessli”(<-“less”)'li'(valid_li删除)))将步骤3定义为([子字符串]R1(“民族”(<-“民族”)“国家”(<-“吃”)“alize”(<-'al)“副本”“iciti”“ical”(<-“ic”)“full”“ness”(删除)“主动”(R2删除)//2001年12月添加“R2”))将步骤4定义为([substring]R2,其中(“al”“ance”“ence”“er”“ic”“able”“ible”“ant”“ement”“ment”“ent”“ism”“吃”“iti”“ous”“ive”“ize”(删除)“ion”(“s”或“t”删除)))将步骤5定义为([substring]在(“e”(R2或(R1非缩写)删除)“l”(删除R2“l”)))将exception2定义为([substring]限制在(“围棋”“郊游”“罐头”“鲱鱼”“耳环”“继续”超过“成功”//。。。此处可能有扩展。。。)))将exception1定义为([substring]限制在(/*特殊更改:*/“滑雪板”(<-“ski”)“天空”(<-“天空”)“垂死”(<-“死亡”)“撒谎”(<-'lie')“打结”(<-'tie')/*特殊-LY案例*/“空闲”(<-'idl)“温柔”(<-“温柔”)“丑陋”(<-'ugli)“早”(<-'earli)“仅”(<-'onli)“单个”(<-“单个”)//。。。此处可能有扩展。。。/*不变形式:*/“天空”“新闻”“豪”“atlas”“cosmos”“bias”“andes”//非复数形式//。。。此处可能有扩展。。。))将尾段定义为(Y_found repeat(goto(['Y'])<-'Y'))将阀杆定义为(例外情况1或不跳3或(做序曲做标记区域向后(执行步骤1a例外2或(执行步骤1b执行步骤1c执行步骤2执行步骤3执行步骤4执行步骤5))做尾曲))