あれもPython,これもPython

Pythonで世界を包みたい

Pythonで形態素解析をしたいのでjanomeを使う

今回は大好きな形態素解析モジュール、「janome」を紹介します!

日本語を自然言語処理したい場合、
形態素解析は切っても切れない存在です。

もちろんMeCabmecab-pythonを入れれれば、 可能なのですが、
出来る限りpure pythonでやりたい、という時もあります。

そんなときにはjanomeというモジュールを使用します。

導入

pip install janome

一瞬です。

使い方

importしてtokenizerに文字列を渡してあげるとtokenにしてくれます。

from janome.tokenizer import Tokenizer
t = Tokenizer()

# ユニコード文字列を渡す必要がある
tokens = t.tokenize(u"janomeが好きすぎて辛い")

for token in tokens:
    print token.surface

tokensはjanome.tokenizer.Tokenクラスのインスタンスが格納されています。
このトークンには以下の方法でアクセスの仕方を整理すると以下のようになります。

ほしい情報 アクセスの仕方
全て トークンインスタンス
単語 .surface
読み .reading
品詞 .part_of_speech

などなど

辞書を変える

形態素解析をする際、重要なのは分割のための辞書です。
janomeはデフォルトではMeCabのものを使用しているようですが、
追加したい場合は以下の様にすれば大丈夫です。

 from janome.tokenizer import Tokenizer
t = Tokenizer(udic="辞書.csv", udic_enc="utf8")

辞書の形式はMeCabと同様のcsvです。
左から順に以下の情報を持ったcsvにします。

  • 表層形
  • 左文脈ID
  • 右文脈ID
  • コスト
  • 品詞
  • 品詞細分類1
  • 品詞細分類2
  • 品詞細分類3
  • 活用形
  • 活用型
  • 原形
  • 読み
  • 発音

各要素はMeCabのページを確認して欲しいのですが、
[表層系、品詞と再分類、読み、原型、読み、発音]など
自分に必要な情報を埋めてください。
http://mecab.googlecode.com/svn/trunk/mecab/doc/dic.html

余談:アルゴリズム

あまり詳しくはないのですが、
辞書引きに関しては
MeCabChaSenで使われているダブル配列ではなく、
FSTというアルゴリズムで作らているようです。

最後になってしまいましたが、
作成者さんのブログです。 http://mocobeta-backup.tumblr.com/post/115843098157/pure-python-janome

素敵なツールをありがとうございます!