一个后缀剥离算法
M.F.Porter
1980
M.F.Porter
1980
1.介绍
通过自动的方法去掉单词后缀是一个在信息检索领域尤其有用的操作。一个典型的信息检索系统包括一个文档集合,每个文档被它标题和摘要里的单词描述。如果忽略单词出现的位置,我们可以说,一个文档被一个单词向量表示。有相同词干的单词通常有相似的含义,例如:
CONNECT
CONNECTED
CONNECTING
CONNECTION
CONNECTIONS
通常,如果单词分组,像上面这些单词被合并为一个单独的单词,信息检索系统的性能将会被提高。这个可以通过移除不同的后缀-ED, -ING, -ION, IONS只留下单词CONNECT来完成。另外,后缀剥离过程会减少信息检索系统中的单词总数,从而降低系统中数据的规模和复杂度,反正,后缀剥离总是有利的。许多后缀剥离策略已经在文献中被记录{(e.g. 1-6)} 。依赖于,一个词干字典是否被使用,一个后缀后缀列表是被使用,后缀剥离是被能完成的目标,任务的本质将会十分不同。假设不使用词干词典,而且,后缀剥离的目的是提高信息检索性能,那么,后缀剥离程序需要一个清晰的后缀列表,并且,对每一个后缀,有一个标准,利用这个标准来决定这个后缀是否从一个单词中移除来得到一个合法的词干。这就是本文采用的方法。这个程序的主要有点是:小(少于400行BCPL代码),快(在剑桥大学的IBM 370/165机器上处理有一万个不同单词的词汇表只需要8.1秒),简单。无论如何,它是足够简单的以至于能在本文中作为算法被全部描述。(BCPL的现在版本能从作者处免费得到。BCPL在许多不同种类的计算机上都是可用的,但是任何希望通过用其它语言编码这个程序来使用它的人会有一点点困难)。尽管,因为历史原因,我们发现仅仅把它应用到从一系列文本文件中获得的相对较小的单词列表是方便的,但是,从程序速度考虑,把它应用在一系列大文本文件中的每一个单词上也是可行的。
在任何为了信息检索工作的后缀剥离系统中,有两点必须被记在心中。第一,后缀被移除是为了提高信息检索的性能,而不是为了语言练习。这意味着,一个后缀在什么环境下应该被移除是不明显的,即使我们通过自动方法能精确制导一个单词的后缀是什么。
第二点是,使用本文采用的方法,例如,有不同规则的后缀列表的使用,后缀剥离的成功率是远远小于百分之百的,不管这个过程如何被评价。例如,如果SAND和SANDER被合并了,很有可能WAND 和 WANDER也会被合并。这里的错误是,WANDER里的-ER被当作后缀对待,而实际上,它是词干的一部分。同样的,一个后缀可能会完全改变一个单词的意思,这种情况下,移除后缀是不合适的。例如,PROBE和PROBATE在现代英语中的意思差别很大。(实际上,它们在我们的算法中并不会被合并)在后缀剥离程序发展的过程中出现了一个场景,为了提高词汇表中部分单词后缀剥离准确性,更多的规则被添加进来,导致了其它方面性能的下降。除非这种现象被及时注意到,否则程序非常容易变得比实际需要的复杂得多。也容易出现这种情况,过分强调某种事件,这个事件看起来很常见,但是实际上很少见。例如,一个单词的根随着后缀的添加而改变,像在DECEIVE/DECEPTION, RESUME/RESUMPTION,INDEX/INDICES中,在真实词汇表中出现比假设中少见得多。考虑到在任何情况下都有的错误率,去应付这些情况似乎是不值得的。
现在这个程序的简单性是一个有点是不明显的。在一个在著名的Cranfield 200集合上的测试中,现在这个程序和一个精细得多的程序相比提高了检索性能,那个精细得多的程序从1971年开始就用在剑桥的信息检索研究中。测试像下面这样被完成:文档标题和摘要中的单词被传给更早的后缀剥离系统,然后结果词干用来索引文档。查询的单词用同样的方式提取词干,文档利用每一个查询和文档的单词匹配相似度来排序。从这些排名中,召回率和正确率通过标准召回计算方式被获得。整个过程被本文描述的后缀剥离系统重复,结果如下:
earlier system present system
-------------- --------------
precision recall precision recall
0 57.24 0 58.60
10 56.85 10 58.13
20 52.85 20 53.92
30 42.61 30 43.51
40 42.20 40 39.39
50 39.06 50 38.85
60 32.86 60 33.18
70 31.64 70 31.19
80 27.15 80 27.52
90 24.59 90 25.85
100 24.59 100 25.85
非常清晰的,性能差别不大。重要的是,早的精细的系统表现得并不比现在这个简单的系统好。
(测试被C.J. van Rijsbergen完成)
2.算法
为了完整呈现这个后缀剥离算法,我们需要定义几个定义。
一个单词中辅音字母是指除了A, E, I, O ,U和辅音后面的y的字母。(事实是,术语,辅音,是指发音清晰的的音)。因此,在TOY中,辅音是T和Y,在SYZYGY中,辅音是S,Z和G。如果一个字母不是辅音,它就是元音。
一个辅音字母用c表示,一个元音字母用v表示,一串长度大于0的辅音字母用C表示,一串长度大于0的元音字母用V表示。因此,任何单词,或者单词的一部分,都属于下面四种形式中的一种:
CVCV ... C
CVCV ... V
VCVC ... C
VCVC ... V
这些都可以被一种形式表示:
[C]VCVC ... [V]
这里,方括号表示它们的内容是任意的存在。
用(VC){m}表示VC出现了m次,于是上面的表达式可以再次被写为:
[C](VC){m}[V]
当单词或单词部分用这种方式被表达时,m将被称为单词或者单词部分的度量。m = 0
的情况包括null词。这里有一些例子:
m=0 TR, EE, TREE, Y, BY.
m=1 TROUBLE, OATS, TREES, IVY.
m=2 TROUBLES, PRIVATE, OATEN, ORRERY.
移除后缀的规则以这种形式给出:
(condition) S1 -> S2
这意味着,如果以后缀S1结尾,而且S1前的词干满足给定的条件,S1就会被S2代替。条件通常以m给出,例如:
(m > 1) EMENT ->
这里,S1是`EMENT' ,S2时null。这将REPLACEMENT映射为REPLAC。因为REPLAC的m=2。
条件部分也可能包含下面这些:
*S - 词干以S结尾(其它字母也一样)。
*v* - 词干包含一个元音。
*d - 词干以两个辅音结尾 (e.g. -TT, -SS)。
*o - 词干以cvc结尾, 且,第二个c不是 W, X or Y (e.g.-WIL, -HOP)。
条件部分也可以包含带有and,or,not的表达式,像
(m>1 and (*S or *T))
测试一个词干,词干满足m>1,并且以S或者T结尾,
(*d and not (*L or *S or *Z))
测试一个词干,词干满足以除L,S或者Z外双辅音结尾。
像这样精细的条件很少被用到。
在一个一个写在另一个下面的规则集合中,只有一个被服从,就是与给定单词有最长匹配的S1。例如:
SSES -> SS
IES -> I
SS -> SS
S ->
(这里,条件都是null)CARESSES映射到CARESS,因为SSES对S1是最长的匹配。同样的,CARESS 映射到CARESS (S1=`SS') ,CARES映射到CARE (S1=`S')。
在下面的规则中,它们应用的例子,成功的或者意料之外的,以小写在下面的右边给出。算法如下:
Step 1a
SSES -> SS caresses -> caress
IES -> I ponies -> poni
ties -> ti
SS -> SS caress -> caress
S -> cats -> cat
Step 1b
(m>0) EED -> EE feed -> feed
agreed -> agree
(*v*) ED -> plastered -> plaster
bled -> bled
(*v*) ING -> motoring -> motor
sing -> sing
如果步骤1b中的第二个或者第三个规则成功了,下面的就会被执行:
AT -> ATE conflat(ed) -> conflate
BL -> BLE troubl(ed) -> trouble
IZ -> IZE siz(ed) -> size
(*d and not (*L or *S or *Z))
-> single letter
hopp(ing) -> hop
tann(ed) -> tan
fall(ing) -> fall
hiss(ing) -> hiss
fizz(ed) -> fizz
(m=1 and *o) -> E fail(ing) -> fail
fil(ing) -> file
映射到单个字母的规则导致双字母中的一个被移除。-E被放回-AT, -BL and -IZ,以至于后缀-ATE, -BLE and -IZE之后能被识别出来。E可能在第4步被移除。
Step 1c
(*v*) Y -> I happy -> happi
sky -> sky
第一步处理复数和过去分词。接下来的步骤直接得多。
Step 2
(m>0) ATIONAL -> ATE relational -> relate
(m>0) TIONAL -> TION conditional -> condition
rational -> rational
(m>0) ENCI -> ENCE valenci -> valence
(m>0) ANCI -> ANCE hesitanci -> hesitance
(m>0) IZER -> IZE digitizer -> digitize
(m>0) ABLI -> ABLE conformabli -> conformable
(m>0) ALLI -> AL radicalli -> radical
(m>0) ENTLI -> ENT differentli -> different
(m>0) ELI -> E vileli - > vile
(m>0) OUSLI -> OUS analogousli -> analogous
(m>0) IZATION -> IZE vietnamization -> vietnamize
(m>0) ATION -> ATE predication -> predicate
(m>0) ATOR -> ATE operator -> operate
(m>0) ALISM -> AL feudalism -> feudal
(m>0) IVENESS -> IVE decisiveness -> decisive
(m>0) FULNESS -> FUL hopefulness -> hopeful
(m>0) OUSNESS -> OUS callousness -> callous
(m>0) ALITI -> AL formaliti -> formal
(m>0) IVITI -> IVE sensitiviti -> sensitive
(m>0) BILITI -> BLE sensibiliti -> sensible
S1的测试可以通过写一个程序在被测试单词的倒数第二个字母上跳转来实现。这给S1可能的值一个公平的分析。可以看出,实际上,第二步中的S1以它们倒数第二个字母在字母表中顺序呈现在这里。相似的技巧可以被用到其它步骤。
Step 3
(m>0) ICATE -> IC triplicate -> triplic
(m>0) ATIVE -> formative -> form
(m>0) ALIZE -> AL formalize -> formal
(m>0) ICITI -> IC electriciti -> electric
(m>0) ICAL -> IC electrical -> electric
(m>0) FUL -> hopeful -> hope
(m>0) NESS -> goodness -> good
Step 4
(m>1) AL -> revival -> reviv
(m>1) ANCE -> allowance -> allow
(m>1) ENCE -> inference -> infer
(m>1) ER -> airliner -> airlin
(m>1) IC -> gyroscopic -> gyroscop
(m>1) ABLE -> adjustable -> adjust
(m>1) IBLE -> defensible -> defens
(m>1) ANT -> irritant -> irrit
(m>1) EMENT -> replacement -> replac
(m>1) MENT -> adjustment -> adjust
(m>1) ENT -> dependent -> depend
(m>1 and (*S or *T)) ION -> adoption -> adopt
(m>1) OU -> homologou -> homolog
(m>1) ISM -> communism -> commun
(m>1) ATE -> activate -> activ
(m>1) ITI -> angulariti -> angular
(m>1) OUS -> homologous -> homolog
(m>1) IVE -> effective -> effect
(m>1) IZE -> bowdlerize -> bowdler
现在,后缀被移除了。所有剩下来的只需要一点点整理。
Step 5a
(m>1) E -> probate -> probat
rate -> rate
(m=1 and not *o) E -> cease -> ceas
Step 5b
(m > 1 and *d and *L) -> single letter
controll -> control
roll -> roll
这个算法是十分小心的,不会移除词干太短的词的后缀,词干的长度由m表示。这个算法没有语言学的基础。只是被观察到,m可以用来帮助非常有效的帮助决定剥离掉一个后缀是否是明智的。例如,在下面这两个单词列表中:
list A list B
------ ------
RELATE DERIVATE
PROBATE ACTIVATE
CONFLATE DEMONSTRATE
PIRATE NECESSITATE
PRELATE RENOVATE
-ATE从表B的单词中移除,但是不从表A的单词中移除。这意味着,单词对DERIVATE/DERIVE, ACTIVATE/ACTIVE, DEMONSTRATE/DEMONS-TRABLE, NECESSITATE/NECESSITOUS将被合并到一起。没有尝试去识别前缀可能让结果看起来不一致。像PRELATE没有失去-ATE,ARCHPRELATE变成ARCHPREL。实际上,这并不是十分重要,因为前缀减少错误合并的可能性。
复杂的后缀在不同的步骤里被一位一位的移除。例如,GENERALIZATIONS被剥离为 GENERALIZATION (Step 1), 然后剥离为GENERALIZE
(Step 2), 在然后变为GENERAL (Step 3), 最后变为GENER (Step 4)。OSCILLATORS
被剥离为 OSCILLATOR (Step 1), 然后被剥离为OSCILLATE (Step 2), 然后变为OSCILL (Step 4), 最后变为OSCIL (Step 5)。在一个有一万单词的词汇表中,词干数量的减少量在各个步骤中的分布如下:
Suffix stripping of a vocabulary of 10,000 words
------------------------------------------------
Number of words reduced in step 1: 3597
" 2: 766
" 3: 327
" 4: 2424
" 5: 1373
Number of words not reduced: 3650
结果词汇表中包含6370个词干。因此,后缀剥离过程减少了词汇量大小的三分之一。
参考:
1. LOVINS, J.B. Development of a Stemming Algorithm. \Mechanical
Translation and computation Linguistics\. \11\ (1) March 1968 pp 23-31.
2. ANDREWS, K. The Development of a Fast Conflation Algorithm for English.
\Dissertation for the Diploma in Computer Science\, Computer
Laboratory, University of Cambridge, 1971.
3. PETRARCA, A.E. and LAY W.M. Use of an automatically generated authority
list to eliminate scattering caused by some singular and plural main
index terms. \Proceedings of the American Society for Information
Science\, \6\ 1969 pp 277-282.
4. DATTOLA, Robert T. \FIRST: Flexible Information Retrieval System for
Text\. Webster N.Y: Xerox Corporation, 12 Dec 1975.
5. COLOMBO, D.S. and NIEHOFF R.T. \Final report on improved access to
scientific and technical information through automated vocabulary
switching.\ NSF Grant No. SIS75-12924 to the National Science
Foundation.
6. DAWSON, J.L. Suffix Removal and Word Conflation. \ALLC Bulletin\,
Michaelmas 1974 p.33-46.
7. CLEVERDON, C.W., MILLS J. and KEEN M. \Factors Determining the
Performance of Indexing Systems\ 2 vols. College of Aeronautics,
Cranfield 1966.
通过自动的方法去掉单词后缀是一个在信息检索领域尤其有用的操作。一个典型的信息检索系统包括一个文档集合,每个文档被它标题和摘要里的单词描述。如果忽略单词出现的位置,我们可以说,一个文档被一个单词向量表示。有相同词干的单词通常有相似的含义,例如:
CONNECT
CONNECTED
CONNECTING
CONNECTION
CONNECTIONS
通常,如果单词分组,像上面这些单词被合并为一个单独的单词,信息检索系统的性能将会被提高。这个可以通过移除不同的后缀-ED, -ING, -ION, IONS只留下单词CONNECT来完成。另外,后缀剥离过程会减少信息检索系统中的单词总数,从而降低系统中数据的规模和复杂度,反正,后缀剥离总是有利的。许多后缀剥离策略已经在文献中被记录{(e.g. 1-6)} 。依赖于,一个词干字典是否被使用,一个后缀后缀列表是被使用,后缀剥离是被能完成的目标,任务的本质将会十分不同。假设不使用词干词典,而且,后缀剥离的目的是提高信息检索性能,那么,后缀剥离程序需要一个清晰的后缀列表,并且,对每一个后缀,有一个标准,利用这个标准来决定这个后缀是否从一个单词中移除来得到一个合法的词干。这就是本文采用的方法。这个程序的主要有点是:小(少于400行BCPL代码),快(在剑桥大学的IBM 370/165机器上处理有一万个不同单词的词汇表只需要8.1秒),简单。无论如何,它是足够简单的以至于能在本文中作为算法被全部描述。(BCPL的现在版本能从作者处免费得到。BCPL在许多不同种类的计算机上都是可用的,但是任何希望通过用其它语言编码这个程序来使用它的人会有一点点困难)。尽管,因为历史原因,我们发现仅仅把它应用到从一系列文本文件中获得的相对较小的单词列表是方便的,但是,从程序速度考虑,把它应用在一系列大文本文件中的每一个单词上也是可行的。
在任何为了信息检索工作的后缀剥离系统中,有两点必须被记在心中。第一,后缀被移除是为了提高信息检索的性能,而不是为了语言练习。这意味着,一个后缀在什么环境下应该被移除是不明显的,即使我们通过自动方法能精确制导一个单词的后缀是什么。
第二点是,使用本文采用的方法,例如,有不同规则的后缀列表的使用,后缀剥离的成功率是远远小于百分之百的,不管这个过程如何被评价。例如,如果SAND和SANDER被合并了,很有可能WAND 和 WANDER也会被合并。这里的错误是,WANDER里的-ER被当作后缀对待,而实际上,它是词干的一部分。同样的,一个后缀可能会完全改变一个单词的意思,这种情况下,移除后缀是不合适的。例如,PROBE和PROBATE在现代英语中的意思差别很大。(实际上,它们在我们的算法中并不会被合并)在后缀剥离程序发展的过程中出现了一个场景,为了提高词汇表中部分单词后缀剥离准确性,更多的规则被添加进来,导致了其它方面性能的下降。除非这种现象被及时注意到,否则程序非常容易变得比实际需要的复杂得多。也容易出现这种情况,过分强调某种事件,这个事件看起来很常见,但是实际上很少见。例如,一个单词的根随着后缀的添加而改变,像在DECEIVE/DECEPTION, RESUME/RESUMPTION,INDEX/INDICES中,在真实词汇表中出现比假设中少见得多。考虑到在任何情况下都有的错误率,去应付这些情况似乎是不值得的。
现在这个程序的简单性是一个有点是不明显的。在一个在著名的Cranfield 200集合上的测试中,现在这个程序和一个精细得多的程序相比提高了检索性能,那个精细得多的程序从1971年开始就用在剑桥的信息检索研究中。测试像下面这样被完成:文档标题和摘要中的单词被传给更早的后缀剥离系统,然后结果词干用来索引文档。查询的单词用同样的方式提取词干,文档利用每一个查询和文档的单词匹配相似度来排序。从这些排名中,召回率和正确率通过标准召回计算方式被获得。整个过程被本文描述的后缀剥离系统重复,结果如下:
earlier system present system
-------------- --------------
precision recall precision recall
0 57.24 0 58.60
10 56.85 10 58.13
20 52.85 20 53.92
30 42.61 30 43.51
40 42.20 40 39.39
50 39.06 50 38.85
60 32.86 60 33.18
70 31.64 70 31.19
80 27.15 80 27.52
90 24.59 90 25.85
100 24.59 100 25.85
非常清晰的,性能差别不大。重要的是,早的精细的系统表现得并不比现在这个简单的系统好。
(测试被C.J. van Rijsbergen完成)
2.算法
为了完整呈现这个后缀剥离算法,我们需要定义几个定义。
一个单词中辅音字母是指除了A, E, I, O ,U和辅音后面的y的字母。(事实是,术语,辅音,是指发音清晰的的音)。因此,在TOY中,辅音是T和Y,在SYZYGY中,辅音是S,Z和G。如果一个字母不是辅音,它就是元音。
一个辅音字母用c表示,一个元音字母用v表示,一串长度大于0的辅音字母用C表示,一串长度大于0的元音字母用V表示。因此,任何单词,或者单词的一部分,都属于下面四种形式中的一种:
CVCV ... C
CVCV ... V
VCVC ... C
VCVC ... V
这些都可以被一种形式表示:
[C]VCVC ... [V]
这里,方括号表示它们的内容是任意的存在。
用(VC){m}表示VC出现了m次,于是上面的表达式可以再次被写为:
[C](VC){m}[V]
当单词或单词部分用这种方式被表达时,m将被称为单词或者单词部分的度量。m = 0
的情况包括null词。这里有一些例子:
m=0 TR, EE, TREE, Y, BY.
m=1 TROUBLE, OATS, TREES, IVY.
m=2 TROUBLES, PRIVATE, OATEN, ORRERY.
移除后缀的规则以这种形式给出:
(condition) S1 -> S2
这意味着,如果以后缀S1结尾,而且S1前的词干满足给定的条件,S1就会被S2代替。条件通常以m给出,例如:
(m > 1) EMENT ->
这里,S1是`EMENT' ,S2时null。这将REPLACEMENT映射为REPLAC。因为REPLAC的m=2。
条件部分也可能包含下面这些:
*S - 词干以S结尾(其它字母也一样)。
*v* - 词干包含一个元音。
*d - 词干以两个辅音结尾 (e.g. -TT, -SS)。
*o - 词干以cvc结尾, 且,第二个c不是 W, X or Y (e.g.-WIL, -HOP)。
条件部分也可以包含带有and,or,not的表达式,像
(m>1 and (*S or *T))
测试一个词干,词干满足m>1,并且以S或者T结尾,
(*d and not (*L or *S or *Z))
测试一个词干,词干满足以除L,S或者Z外双辅音结尾。
像这样精细的条件很少被用到。
在一个一个写在另一个下面的规则集合中,只有一个被服从,就是与给定单词有最长匹配的S1。例如:
SSES -> SS
IES -> I
SS -> SS
S ->
(这里,条件都是null)CARESSES映射到CARESS,因为SSES对S1是最长的匹配。同样的,CARESS 映射到CARESS (S1=`SS') ,CARES映射到CARE (S1=`S')。
在下面的规则中,它们应用的例子,成功的或者意料之外的,以小写在下面的右边给出。算法如下:
Step 1a
SSES -> SS caresses -> caress
IES -> I ponies -> poni
ties -> ti
SS -> SS caress -> caress
S -> cats -> cat
Step 1b
(m>0) EED -> EE feed -> feed
agreed -> agree
(*v*) ED -> plastered -> plaster
bled -> bled
(*v*) ING -> motoring -> motor
sing -> sing
如果步骤1b中的第二个或者第三个规则成功了,下面的就会被执行:
AT -> ATE conflat(ed) -> conflate
BL -> BLE troubl(ed) -> trouble
IZ -> IZE siz(ed) -> size
(*d and not (*L or *S or *Z))
-> single letter
hopp(ing) -> hop
tann(ed) -> tan
fall(ing) -> fall
hiss(ing) -> hiss
fizz(ed) -> fizz
(m=1 and *o) -> E fail(ing) -> fail
fil(ing) -> file
映射到单个字母的规则导致双字母中的一个被移除。-E被放回-AT, -BL and -IZ,以至于后缀-ATE, -BLE and -IZE之后能被识别出来。E可能在第4步被移除。
Step 1c
(*v*) Y -> I happy -> happi
sky -> sky
第一步处理复数和过去分词。接下来的步骤直接得多。
Step 2
(m>0) ATIONAL -> ATE relational -> relate
(m>0) TIONAL -> TION conditional -> condition
rational -> rational
(m>0) ENCI -> ENCE valenci -> valence
(m>0) ANCI -> ANCE hesitanci -> hesitance
(m>0) IZER -> IZE digitizer -> digitize
(m>0) ABLI -> ABLE conformabli -> conformable
(m>0) ALLI -> AL radicalli -> radical
(m>0) ENTLI -> ENT differentli -> different
(m>0) ELI -> E vileli - > vile
(m>0) OUSLI -> OUS analogousli -> analogous
(m>0) IZATION -> IZE vietnamization -> vietnamize
(m>0) ATION -> ATE predication -> predicate
(m>0) ATOR -> ATE operator -> operate
(m>0) ALISM -> AL feudalism -> feudal
(m>0) IVENESS -> IVE decisiveness -> decisive
(m>0) FULNESS -> FUL hopefulness -> hopeful
(m>0) OUSNESS -> OUS callousness -> callous
(m>0) ALITI -> AL formaliti -> formal
(m>0) IVITI -> IVE sensitiviti -> sensitive
(m>0) BILITI -> BLE sensibiliti -> sensible
S1的测试可以通过写一个程序在被测试单词的倒数第二个字母上跳转来实现。这给S1可能的值一个公平的分析。可以看出,实际上,第二步中的S1以它们倒数第二个字母在字母表中顺序呈现在这里。相似的技巧可以被用到其它步骤。
Step 3
(m>0) ICATE -> IC triplicate -> triplic
(m>0) ATIVE -> formative -> form
(m>0) ALIZE -> AL formalize -> formal
(m>0) ICITI -> IC electriciti -> electric
(m>0) ICAL -> IC electrical -> electric
(m>0) FUL -> hopeful -> hope
(m>0) NESS -> goodness -> good
Step 4
(m>1) AL -> revival -> reviv
(m>1) ANCE -> allowance -> allow
(m>1) ENCE -> inference -> infer
(m>1) ER -> airliner -> airlin
(m>1) IC -> gyroscopic -> gyroscop
(m>1) ABLE -> adjustable -> adjust
(m>1) IBLE -> defensible -> defens
(m>1) ANT -> irritant -> irrit
(m>1) EMENT -> replacement -> replac
(m>1) MENT -> adjustment -> adjust
(m>1) ENT -> dependent -> depend
(m>1 and (*S or *T)) ION -> adoption -> adopt
(m>1) OU -> homologou -> homolog
(m>1) ISM -> communism -> commun
(m>1) ATE -> activate -> activ
(m>1) ITI -> angulariti -> angular
(m>1) OUS -> homologous -> homolog
(m>1) IVE -> effective -> effect
(m>1) IZE -> bowdlerize -> bowdler
现在,后缀被移除了。所有剩下来的只需要一点点整理。
Step 5a
(m>1) E -> probate -> probat
rate -> rate
(m=1 and not *o) E -> cease -> ceas
Step 5b
(m > 1 and *d and *L) -> single letter
controll -> control
roll -> roll
这个算法是十分小心的,不会移除词干太短的词的后缀,词干的长度由m表示。这个算法没有语言学的基础。只是被观察到,m可以用来帮助非常有效的帮助决定剥离掉一个后缀是否是明智的。例如,在下面这两个单词列表中:
list A list B
------ ------
RELATE DERIVATE
PROBATE ACTIVATE
CONFLATE DEMONSTRATE
PIRATE NECESSITATE
PRELATE RENOVATE
-ATE从表B的单词中移除,但是不从表A的单词中移除。这意味着,单词对DERIVATE/DERIVE, ACTIVATE/ACTIVE, DEMONSTRATE/DEMONS-TRABLE, NECESSITATE/NECESSITOUS将被合并到一起。没有尝试去识别前缀可能让结果看起来不一致。像PRELATE没有失去-ATE,ARCHPRELATE变成ARCHPREL。实际上,这并不是十分重要,因为前缀减少错误合并的可能性。
复杂的后缀在不同的步骤里被一位一位的移除。例如,GENERALIZATIONS被剥离为 GENERALIZATION (Step 1), 然后剥离为GENERALIZE
(Step 2), 在然后变为GENERAL (Step 3), 最后变为GENER (Step 4)。OSCILLATORS
被剥离为 OSCILLATOR (Step 1), 然后被剥离为OSCILLATE (Step 2), 然后变为OSCILL (Step 4), 最后变为OSCIL (Step 5)。在一个有一万单词的词汇表中,词干数量的减少量在各个步骤中的分布如下:
Suffix stripping of a vocabulary of 10,000 words
------------------------------------------------
Number of words reduced in step 1: 3597
" 2: 766
" 3: 327
" 4: 2424
" 5: 1373
Number of words not reduced: 3650
结果词汇表中包含6370个词干。因此,后缀剥离过程减少了词汇量大小的三分之一。
参考:
1. LOVINS, J.B. Development of a Stemming Algorithm. \Mechanical
Translation and computation Linguistics\. \11\ (1) March 1968 pp 23-31.
2. ANDREWS, K. The Development of a Fast Conflation Algorithm for English.
\Dissertation for the Diploma in Computer Science\, Computer
Laboratory, University of Cambridge, 1971.
3. PETRARCA, A.E. and LAY W.M. Use of an automatically generated authority
list to eliminate scattering caused by some singular and plural main
index terms. \Proceedings of the American Society for Information
Science\, \6\ 1969 pp 277-282.
4. DATTOLA, Robert T. \FIRST: Flexible Information Retrieval System for
Text\. Webster N.Y: Xerox Corporation, 12 Dec 1975.
5. COLOMBO, D.S. and NIEHOFF R.T. \Final report on improved access to
scientific and technical information through automated vocabulary
switching.\ NSF Grant No. SIS75-12924 to the National Science
Foundation.
6. DAWSON, J.L. Suffix Removal and Word Conflation. \ALLC Bulletin\,
Michaelmas 1974 p.33-46.
7. CLEVERDON, C.W., MILLS J. and KEEN M. \Factors Determining the
Performance of Indexing Systems\ 2 vols. College of Aeronautics,
Cranfield 1966.