一个后缀剥离算法(波特词干提取算法论文)

一个后缀剥离算法
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.





















       


你可能感兴趣的:(算法)