mecabの辞書による形態素解析結果の違い


この記事のついて

  • どこかでmecabを説明するために作った文章
  • 基本はmecabとmecab-ipadic-NEologdの違いを記述
  • サルベージしときます.

形態素解析とは

形態素解析(morphological analysis)とは、検索エンジンにも用いられている自然言語処理の手法の一つで、ある文章・フレーズを「意味を持つ最小限の単位(=単語)」に分解し、文章やフレーズの内容を判断するために用いられます。

参考サイト

mecabについて

概要

MeCabは 京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています。 パラメータの推定に Conditional Random Fields (CRF) を用いている。また、平均的に ChaSen, Juman, KAKASIより高速に動作します。 ちなみに和布蕪(めかぶ)は, 作者の好物です。

特徴

  • 辞書, コーパスに依存しない汎用的な設計
  • 条件付き確率場(CRF)に基づく高い解析精度
  • ChaSen や KAKASI に比べ高速
  • 辞書引きアルゴリズム/データ構造に, 高速な TRIE 構造である Double-Arrayを採用.
  • 再入可能なライブラリ
  • 各種スクリプト言語バインディング(perl/ruby/python/java/C#) ## 比較
mecab chasen juman kakasi
解析モデル bi-gramマルコフモデル 可変長マルコフモデル bi-gramマルコフモデル 最長一致
学習モデル CRF (識別モデル) HMM (生成モデル)
辞書引きアルゴリズム Double Array Double Array パトリシア木 Hash?
解探索アルゴリズム Viterbi Viterbi Viterbi 決定的?
連接表の実装 2次元 Table オートマトン 2次元 Table? 連接表無し?
品詞の階層 無制限多階層品詞 無制限多階層品詞 2段階固定 品詞という概念無し?
未知語処理 字種 (動作定義を変更可能) 字種 (変更不可能) 字種 (変更不可能)
制約つき解析 可能 2.4.0で可能 不可能 不可能
N-best解 可能 不可能 不可能 不可能

辞書データ

  • IPA辞書
    IPA 辞書, IPAコーパス に基づき CRF でパラメータ推定した辞書です。
  • Juman 辞書
    Juamn 辞書, 京都コーパスに基づき CRF でパラメータ推定した辞書です。
  • Unidic 辞書
    Unidic 辞書, BCCWJコーパスに基づき CRF でパラーメータ推定した辞書です。
  • mecab-ipadic-NEologd辞書
    mecab-ipadic-NEologd は、多数のWeb上の言語資源から得た新語を追加することでカスタマイズした MeCab 用のシステム辞書です。
    • 利点
      • MeCab の標準のシステム辞書では正しく分割できない固有表現などの語の表層(表記)とフリガナの組を約312万組(重複エントリを含む)採録しています
      • この辞書の更新は開発サーバ上で自動的におこなわれます.少なくとも毎週 2 回更新される予定です
      • Web上の言語資源を活用しているので、更新時に新しい固有表現を採録できます.現在使用している資源は以下のとおりです
        • はてなキーワードのダンプデータ
        • 郵便番号データダウンロード
        • 日本全国駅名一覧のコーナー
        • 人名(姓/名)エントリデータ
        • IPA 辞書に採録されていない副詞をエントリ化したデータ
        • IPA 辞書に採録されていない形容詞をエントリ化したデータ
        • IPA 辞書に採録されていない形容動詞をエントリ化したデータ
        • IPA 辞書に採録されていない感動詞エントリをエントリ化したデータ
        • 一般名詞/固有名詞の表記ゆれ文字列とその原型の組のリストをエントリ化したデータ
        • サ変接続名詞の表記ゆれ文字列とその原型の組のリストをエントリ化したデータ
        • SNS 上に現れやすい崩れ表記語と同様のパターンをもつ語をエントリ化したデータ
        • Unicode 9.0 以下の絵文字に手作業で読み仮名を付与したデータ
        • 初期状態の iOS デバイスまたは Android デバイスで入力できる顔文字に手作業で読み仮名を付与したデータ
        • 日本の山の名前を収集したリスト
        • IPA 辞書に含まれるエントリの読み仮名に関する明らかなエラー(誤字・脱字など)を修正するパッチ
        • IPA 辞書に含まれるエントリの形態素生起コストを修正するパッチ
        • 時間表現や数値表現をあらかじめ定義したパターンによって生成してエントリ化したデータ
        • ニュース記事から抽出した新語や未知語をエントリ化したデータ
        • ネット上で流行した単語や慣用句やハッシュタグをエントリ化したデータ
        • Web からクロールした大量の文書データ
    • 欠点
      • 固有表現の分類が不十分です
      • 固有表現では無い語も固有表現として登録されています
      • 固有表現の表記とフリガナの対応づけを間違っている場合があります
      • 追加した副詞の品詞情報が全て'副詞,一般,,,,'になっている
      • 対応している文字コードは UTF-8 のみです
neologd
$ echo "インスタ映え" | mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
インスタ映え  名詞,固有名詞,一般,*,*,*,インスタ映え,インスタハエ,インスタハエ
EOS

$ echo "インスタ映え" | mecab 
インスタ    名詞,一般,*,*,*,*,*
映え  名詞,一般,*,*,*,*,映え,ハエ,ハエ
EOS

$ echo "まじ卍" | mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
まじ卍   名詞,固有名詞,一般,*,*,*,まじ卍,マジマンジ,マジマンジ
EOS

$ echo "まじ卍" | mecab 
まじ  名詞,形容動詞語幹,*,*,*,*,まじ,マジ,マジ
卍 名詞,一般,*,*,*,*,卍,マンジ,マンジ
EOS

$ echo "タピる" | mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
タピ  名詞,固有名詞,一般,*,*,*,タピ,タピ,タピ
る 助動詞,*,*,*,文語・リ,体言接続,り,ル,ル
EOS

$ echo "タピる" | mecab
タピ  名詞,一般,*,*,*,*,*
る 助動詞,*,*,*,文語・ル,基本形,る,ル,ル
EOS

$ echo "あげみざわ" | mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
あげみざわ 名詞,固有名詞,一般,*,*,*,あげみざわ,アゲミザワ,アゲミザワ
EOS

$ echo "あげみざわ" | mecab 
あげ  動詞,自立,*,*,一段,連用形,あげる,アゲ,アゲ
み 動詞,非自立,*,*,一段,連用形,みる,ミ,ミ
ざわ  名詞,固有名詞,組織,*,*,*,*
EOS

$ echo "あざまる水産" | mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
あざまる水産  名詞,固有名詞,一般,*,*,*,あざまる水産,アザマルスイサン,アザマルスイサン
EOS

$ echo "あざまる水産" | mecab 
あざ  名詞,一般,*,*,*,*,あざ,アザ,アザ
まる  接頭詞,数接続,*,*,*,*,まる,マル,マル
水産  名詞,一般,*,*,*,*,水産,スイサン,スイサン
EOS

$ echo "インスタグラム" | mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
インスタグラム   名詞,固有名詞,一般,*,*,*,Instagram,インスタグラム,インスタグラム
EOS

$ echo "インスタグラム" | mecab 
インスタグラム   名詞,固有名詞,組織,*,*,*,*
EOS

$ echo "けみお" | mecab 
け 助詞,終助詞,*,*,*,*,け,ケ,ケ
み 動詞,自立,*,*,一段,連用形,みる,ミ,ミ
お 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,おる,オ,オ
EOS

$ echo "けみお" | mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd/
けみお   名詞,固有名詞,人名,一般,*,*,けみお,ケミオ,ケミオ
EOS

コードでの使い方(UNIX&python3)

mecab.py
import MeCab

t = MeCab.Tagger ('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')#mecab-ipadic-NEologd
t = MeCab.Tagger ("-Ochasen")#標準のやつ

text = '解析したいテキスト'
t.parse('')#文字列がGCされるのを防ぐ
m = t.parseToNode(text)
while m:
    if m.feature.split(',')[0] == '名詞':
        print(m.surface)  
result
AWS      名詞,固有名詞,一般,*,*,*,AWS,アマゾンウェブサービス,アマゾンウェブサービス
有名     名詞,形容動詞語幹,*,*,*,*,有名,ユウメイ,ユーメイ
サービス         名詞,サ変接続,*,*,*,*,サービス,サービス,サービス
Amazon   名詞,固有名詞,一般,*,*,*,Amazon,アマゾン,アマゾン
Elastic          名詞,固有名詞,一般,*,*,*,Elastic,エラスティック,エラスティック
Compute          名詞,一般,*,*,*,*,*
Cloud    名詞,一般,*,*,*,*,*

用語

  • Conditional Random Fields(条件付き確率場) > 無向グラフにより表現される確率的グラフィカルモデルの一つであり、識別モデルである。 > 系列ラベリングは,入力にデータ列(例えば単語列)を受け取り,出力として個々のデータにラベルを付加することが目的となる.例えば単語列に品詞情報を与える問題(入力:「私/は/走る」⇒出力:「名詞/助詞/動詞」)などが挙げら れる.
    系列ラベリングを解くためのCRFを,特にLinear-chain CRFと呼ぶ.
    参考サイト:【技術解説】CRF(Conditional Random Fields)