stem-english 20170113.24(in MELPA)
- routines for stemming English word

概要

stem-english.el は、
英語の活用語尾を取り除いて
語幹を得るライブラリです。

英語には、

  1. 比較級
  2. 最上級
  3. 三人称単数現在形
  4. 複数形
  5. 過去形
  6. 過去分詞
  7. 現在分詞

で語尾が変化しますね。

他にも

  • active→activeness
  • emotion→emotional

などの変形もあります。

buy→boughtのような
不規則動詞は独特のもので、
覚えるのに苦労した人もいるでしょう。

このライブラリで使われているアルゴリズムは、
論文『An algorithm for suffix stripping (M.F.Porter)』
によるものです。

元々は昔にあった辞書検索ツール
sdicに付属していたstem.elを
現在のEmacsで動くようにしたものです。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてstem-englishを使う方は
以下のコマンドを実行します。

M-x package-install stem-english

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name stem-english

使用例

エントリポイントは stem-english 関数です。

(stem-english "worked")     ; => ("work" "worked")
(stem-english "healthier")  ; => ("health" "healthy" "healthie" "healthier")
(stem-english "teacher")    ; => ("teach" "teache" "teacher")
(stem-english "blew")       ; => ("blew" "blow")
(stem-english "came")       ; => ("came" "come")
(stem-english "thankful")   ; => ("thank" "thankful")
(stem-english "rationale")  ; => ("rational" "rationale")
(stem-english "bit")        ; => ("bit" "bite")
(stem-english "heroic")     ; => ("heroic")
(stem-english "debianize")  ; => ("debian" "debianize")
(stem-english "criticism")  ; => ("critic" "criticism")
(stem-english "was")        ; => ("am" "be" "is" "are" "was")
(stem-english "been")       ; => ("am" "be" "is" "are" "been")
(stem-english "fallen")     ; => ("fall" "fallen")
(stem-english "cable")      ; => ("cabl" "cable")
(stem-english "challenger") ; => ("challeng" "challenge" "challenger")
;;; 不完全なので…
(stem-english "happiness")  ; => ("happi" "happines" "happiness")
(stem-english "ironic")     ; => ("iron" "ironic")
;;; ableやmentは活用語尾に含まれているのでバグかな?
(stem-english "chewable")   ; => ("chewabl" "chewable")
(stem-english "agreement")  ; => ("agreement")

正規表現で応用する 170119051551.stem-english.regexp.el(以下のコードと同一)

helm-swoop と併用させてみました。

ただ、原形から不規則動詞や
活用語尾を含めるところまではできていません。

(require 'stem-english)
(defun stem-english-make-regexp (word)
  "活用語尾を考えた単語の正規表現を作成する"
  (concat "\\b" (regexp-opt (stem-english word) t) "\\b"))
;;; bought
;;; buy
;;; catch
(defun helm-swoop-stem-word ()
  "活用語尾が含まれる現在の単語を検索する"
  (interactive)
  (helm-swoop
   :$query
   (concat (stem-english-make-regexp (thing-at-point 'word)) " ")))

20170119053112.png
Fig1: boughtの位置でM-x helm-swoop-stem-wordするとbuyにもヒットする

本サイト内の関連パッケージ


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。