#:g1: Allegro CL Examples and Utilities: English-Word-Stemmerの紹介

Posted 2014-11-17 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の322日目です。

Allegro CL Examples and Utilities: English-Word-Stemmerとはなにか

 Allegro CL Examples and Utilities: English-Word-Stemmerは、Steven M. Haflich氏作の英語単語のステマーです。

パッケージ情報

パッケージ名Allegro CL Examples and Utilities: English-Word-Stemmer
Quicklisp×
配布サイト(archive.org)Allegro CL Examples and Utilities

インストール方法

 Franzのサイトからダウンロードできたりするのですが、しばらく落ちたままなので、archive.orgを紹介しておきます。

試してみる

  単語から接辞語を取り除く処理をステミングというみたいですが、利用されているアルゴリズムは、Porter Stemming Algorithmとのことで定番のもののようです。
stemを使えば、こんな感じに処理してくれます。

(mapcar #'stem
        (*:split-sequence #\Space "seven steps to heaven"))
;=>  ("seven" "step" "to" "heaven")

まとめ

 今回は、Allegro CL Examples and Utilities: English-Word-Stemmerを紹介してみました。
作者のSteven M. Haflich(smh)氏は、LMIからFranzと渡り歩きANSI Common Lispの仕様策定でも活躍したLispハッカーです。
ステマーのコード中で、

(block nil
  (case (char str (1- (length str)))
    (#\e (when (ends str "icate") (r str "ic" sfp) (return))
     (when (ends str "ative") (r str "" sfp)   (return)) ; huh?
     (when (ends str "alize") (r str "al" sfp) (return)))
    (#\i (when (ends str "iciti") (r str "ic" sfp) (return)))
    (#\l (when (ends str "ical")  (r str "ic" sfp) (return))
     (when (ends str "ful")   (r str "" sfp)   (return))) ; huh?
    (#\s (when (ends str "ness")  (r str "" sfp)   (return))) ; huh?
    ))

のようなコードに遭遇し、「流石熟練Lispハッカーはやることが違う!」と思いましたが、コメントを良く読んだらCから手作業で機械的に移植したとのことでした。

comments powered by Disqus