単語を語幹形にステミングする
ステミングは単語を語幹に還元します(running → run、better → bet)。Porter ステマーと、代わりにレンマ化を使うべき場面を学びましょう。
- 1
ステミングは接尾辞を除去して語幹を見つけます:"running" → "run"、"happily" → "happi"、"better" → "bet"。Porter ステマーが最も一般的なアルゴリズムです。高速ですが粗く、単語でないものを生成します。見出し語化は辞書を使ってレンマを見つけます:"better" → "good"、"running" → "run"。正確ですが遅いです。検索インデックスにはステミングを、NLP 分析には見出し語化を使ってください。
- 2 ワードカウント →
ステミングの前後で単語数を数えて、語彙の減少を確認します。ステミングは通常、語彙を 20〜40% 減らします。これにより検索のリコールが向上します(異なる形が同じ語幹にマッチする)。
- 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)を使ってください。
このタスクを解決するワークフロー
SQL フォーマットと単語統計によるドキュメント化
SQL クエリを整形し、その後フォーマットされた出力を単語統計で分析する。 パイプライン
Lorem Ipsum 生成と単語カウント
Lorem Ipsum テキストを生成し、その後単語をカウントする。 パイプライン
正規表現の検索と置換
テキスト内のパターンを検索するために正規表現を適用し、置換文字列で置き換える。 パイプライン
テキストのクリーンアップ後の単語統計分析
テキストをトリムして正規化し、その後単語/文字/行統計を計算する。 パイプライン
行の重複除去と単語カウント
行をソートして重複を除去し、その後残りの単語をカウントして簡単な在庫を得る。 パイプライン
テキストの小文字化と単語カウント
テキストのケースを正規化し、その後分析のために単語をカウントする。 パイプライン
URL 除去と単語カウント
テキストから URL を除去し、その後残りの単語をカウントする。 パイプライン
Title Case と単語カウント
Title Case に変換し、その後単語をカウントする。 パイプライン
テキストの折り返しと単語カウント
長いテキストを折り返し、その後結果の単語をカウントする。 パイプライン