コンテンツへスキップ
uencoder

単語を語幹形にステミングする

ステミングは単語を語幹に還元します(running → run、better → bet)。Porter ステマーと、代わりにレンマ化を使うべき場面を学びましょう。

  1. 1

    ステミングは接尾辞を除去して語幹を見つけます:"running" → "run"、"happily" → "happi"、"better" → "bet"。Porter ステマーが最も一般的なアルゴリズムです。高速ですが粗く、単語でないものを生成します。見出し語化は辞書を使ってレンマを見つけます:"better" → "good"、"running" → "run"。正確ですが遅いです。検索インデックスにはステミングを、NLP 分析には見出し語化を使ってください。

  2. 2
    ワードカウント →

    ステミングの前後で単語数を数えて、語彙の減少を確認します。ステミングは通常、語彙を 20〜40% 減らします。これにより検索のリコールが向上します(異なる形が同じ語幹にマッチする)。

  3. 3
    正規表現置換ツール →

    正規表現で簡易ステマーを実装します。よくある接尾辞(s、es、ed、ing、ly、ment)を除去します。(\w+)s$ を $1 に、(\w+)ing$ を $1 に置換します。粗いですが概念を示せます。本番では、まともなステマーライブラリ(Porter、Lancaster、Snowball)を使ってください。

よくある質問

ステミングと見出し語化の違いは?
ステミングは高速で粗いです。ルールで接尾辞を切り落とし、単語でないものを生成します("happily" から "happi")。見出し語化は遅いですが正確です。辞書と形態論を使って実際の語根を見つけます("happily" から "happy")。検索にはステミングを(速度が重要で、リコールが重要)、NLP 分析には見出し語化を(精度が重要)使ってください。
どのステマーを使うべきですか?
Porter が最も一般的で、速度と精度のバランスが良いです。Lancaster はより攻撃的です(過剰ステミング)。Snowball(Porter2)は改良版 Porter です。英語以外には、言語固有のステマー(ISnowball、OUD)を使ってください。本番の NLP では、代わりに見出し語化(spaCy、NLTK)を使ってください。

このタスクを解決するワークフロー

関連ツール