テキストマイニング|特徴語抽出の実務入門(日本語の前処理つき)
レビューやアンケートの自由記述から“その文書らしさ”を表す語を抽出します。日本語は前処理が肝です。
まずはここだけ(やさしい導入)
- 何をする?: 文書群の“らしさ”を表す語を抽出してテーマを要約
- いつ使う?: レビュー/アンケート自由記述の要点抽出、改善点の洗い出し
- どう読む?: 頻度だけでなく TF-IDF やフレーズ(n-gram)で“意味の塊”を見る
用語ミニ辞典(1 行で)
- 形態素解析: 日本語文を単語(トークン)に分割し品詞を付ける処理
- ストップワード: 意味に寄与しにくい語(例: 「する」「こと」)
- TF-IDF: 出現頻度 × 希少性で“その文書らしさ”を測る指標
- n-gram: 連続語(例: 「操作 性」→ bi-gram)でフレーズを扱う
最小コード(TF-IDF)
from sklearn.feature_extraction.text import TfidfVectorizer
docs = [
'デザインがきれいで使いやすい',
'価格が高いが性能は十分',
'配送が早くて満足',
]
vectorizer = TfidfVectorizer(max_features=10)
X = vectorizer.fit_transform(docs)
print(vectorizer.get_feature_names_out())
print(X.toarray())
日本語前処理の要点
- 形態素解析(MeCab/Sudachi)で分かち書き
- 品詞(名詞・形容詞・動詞の原形)を選択
- ストップワード・表記ゆれの統一
実務ケーススタディ(アプリレビューの要点抽出)
目的: App ストアのレビューから、改善要望と称賛ポイントを抽出して優先度を決める。
- 前処理
- 形態素解析(名詞/形容詞/動詞の原形)+ユーザー辞書で固有語を拾う
- ストップワード・表記ゆれ(例: 「UI/ユーザインタフェース」)を統一
- 特徴語の抽出
- TF-IDF 上位、bi-gram 上位を併用して“フレーズ”を拾う
- 可視化
- 上位語の棒グラフ、カテゴリ(不具合/使いやすさ/価格)別にまとめる
from sklearn.feature_extraction.text import TfidfVectorizer
# 例: 形態素解析器に応じて tokenize_jp を用意(MeCab/Sudachi/Janome など)
def tokenize_jp(text: str) -> list[str]:
# 実務では形態素解析器で名詞/形容詞/動詞原形を返す
return text.split() # ダミー実装(本番は置き換え)
docs = [
'UI が 直感的 で 操作 し やすい',
'価格 が 高い が 性能 は 十分',
'配送 が 早く て 満足'
]
vectorizer = TfidfVectorizer(tokenizer=tokenize_jp, ngram_range=(1,2), max_features=20)
X = vectorizer.fit_transform(docs)
print(vectorizer.get_feature_names_out())
練習問題(理解を定着)
- 一般語が上位に並ぶ。何を見直す?
- ヒント: ストップワード/品詞/ユーザー辞書、n-gram の導入
- 長い製品名が分割される。どう対応する?
- ヒント: 固有表現をユーザー辞書に登録、正規表現で前処理
- ドメイン固有語が漏れる。何を追加する?
- ヒント: ルールベース抽出やキーフレーズ抽出手法(YAKE/RAKE)を併用
関連と次の一歩
よくある質問(FAQ)
- Q: 日本語で精度が出ない
- A: 形態素辞書・ユーザー辞書の整備、品詞選択/正規化の見直し
- Q: ドメイン固有語の漏れ
- A: 固有表現抽出やルールベースのカスタム抽出と併用
テキストマイニング・キーワード抽出についてのご相談はこちら