Open7

自然言語処理アプリケーション開発入門 メモ

ymickyymicky

見出し語化(lemmatization)
mecabを使うと原型が取得できるのでそれを使う

ymickyymicky

単語置換
文脈や話題によっては、数値や日時などの詳細に意味がないことがある。
このようなときには共通の文字列に置き換えることで情報の変化を無視することができる

ymickyymicky

様々な形態素解析器

  • Mecab
    • 辞書に基づいて形態素解析を行う
    • 実行速度に優れる
  • JUMAN++
    • ニューラルネットワークベースの比較的新しい形態素解析器
    • 特徴
      • 文法的な正しさだけでなく、単語の意味を考慮する
      • ある語の前にあるすべての語の情報を考慮する
        • RNNを利用
      • 表記ゆれに対応
        • 辞書でカバーしている
    • Kytea(読み方:キューティー)
      • ある文字と次の文字の間が単語の区切りであるかどうかを、その前後数文字をもとにSVMで予測
      • Pythonのサードパーティのラッパーあり
    • Janome
      • ピュアpythonの形態素解析器
      • 導入が楽で手軽に試せる
      • 速度はMecabに劣る
    • SudachiPy
      • もともとJava用の形態素解析器Sudachiのpythonバインディング
      • 文字や単語の揺れの正規化など、日本語の分かち書きを行う上で便利な機能がそろっている
    • Esanpy (Kuromoji)
      • Javaで実装された形態素解析器
      • Elasticsearchの内部で使われている
ymickyymicky

scikit-learnでN-gram

from sklearn.feature_extraction.text import CountVectorizer

texts = [.....]
# bi gram
vectorizer = CountVectorizer(tokenizer=tokenizer, ngram_range=(2,2))
vectorizer.fit(texts)
bow = vectorizer.transform(texts)

他にngram_range=(1,2)にすると、uni-gramとbi-gramで辞書を生成する。
その場合、transform後の特徴はuni-gramとbi-gramの特徴をconcatしたものになる

上記は単語N-gramで、文字N-gramにする場合は以下のようにする

CountVectorizer(analyzer='char', tokenizer=tokenizer, ngram_range=(2,2))