古い記事
ランダムジャンプ
新しい記事
「Introduction to Information Retrieval」[1]の第二章
(次回の輪講の範囲)の2.2.4に出てくるステミング (Stemming) の
話題をまとめました。

§

英語などの欧米系の言語では、
意味的には同じ単語が語形変化により表層文字列が異なることがある。
例えば、"retrieves", "retrieved", "retrieving", "retrieval"
などで[2]、実用上これらを同じ意味のものと見なし
インデックス作成時に同じ単語として扱いたいという要求がある。
ステミング (stemming) はこのような語形変化を取り除き
同一の単語表現に変換する処理である。

ステミングの手法として、
ポーターのアルゴリズム (Porter's algorithm) [3]がよく知られている。
ポーターのアルゴリズムは、経験則に基づく変換ルールを持ち、
それらを数段階で適用していくという方法でステミングを行う。
ルールの例と変換例を図に示す[1]。

RuleExample
SSES → SScaresses → caress
IES → Iponies → poni
SS → SScaress → caress
S → ""cats → cat

他のステミング手法として、
Lovins[4]、Lancaster (Paice/Husk)[5] などがある。

なお、ポーターのアルゴリズムを使った Perl Module が CPAN にある。
Perl な人はお試しあれ。
http://search.cpan.org/perldoc?Text::English
サンプルコード:
use Text::English;
@words = qw( cats went retrieval );
@stems = Text::English::stem( @words );
print "@stems\n";
# 実行結果: cat went retriev


参考文献:
[1] Christopher D. Manning, Prabhakar Raghavan and Hinrich Schu"tze:
  Introduction to Information Retrieval, Cambridge University Press, 2008.
  (http://www-csli.stanford.edu/~hinrich/information-retrieval-book.html)
[2] 北研二, 津田和彦, 獅々堀正幹: 情報検索アルゴリズム,
  共立出版, 2002.
[3] Porter Stemming Algorithm
  http://tartarus.org/~martin/PorterStemmer/
[4] The (un)official Lovins stemmer page
  http://www.cs.waikato.ac.nz/~eibe/stemmers/
[5] The Lancaster Stemming Algorithm
  http://www.comp.lancs.ac.uk/computing/research/stemming/

(間違いや補足などありましたら下記フォームからご連絡頂けると幸いです)