2010/01/02

Yahoo! 日本語形態素解析APIを Python から使う

以前作ったTwitter Botですが、動いている内容はとても単純。
ここまで単純ならわざわざMeCabを使わなくても良いのではと思ったので、以前話題になったYahoo! Japanが提供するWeb APIの日本語形態素解析を使ってみました。
Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析

まず下準備として、YahooのIDを持っておく必要があります。意外とGoogle依存なのでYahoo! Japanのアカウントの用意で手間取ったのは内緒:p
あと、Yahoo! Japanのアカウントは各国共通じゃないのでFlickrとかの海外Yahoo!サービスのアカウントじゃログインできないので注意してください。

あとは、非常に簡潔にまとめてくださっている方がいらっしゃいますので、そちらを読んでいただければ・・・
YahooWebAPI"日本語形態素解析"を使って日本語文をひらがなに変換、索引用語のソートに利用 - Object Design

これだと、別にファイルを用意しないといけないので、少し改造して予め入力してあげようと言うことで

word = u'庭には二羽ニワトリがいる。'
yomi = reading(word)
print (word+'->'+yomi).encode('utf-8')

ちなみに1行目に #coding:utf-8 をつけてないと文字化けします。
すると結果は

$ python yomi.py
庭には二羽ニワトリがいる。->にわには2わにわとりがいる。

ここまでしてくださっていると説明の必要もありません。

 

帰ってくる答えを変えたい場合は def reading(text,appid=appid,results='ma',filter=''): のfilterの引数に日本語形態素解析に戻り値として欲しい品詞番号を入れておくと、名詞だけを抜き出せたりします。
あとは、形態素解析のどれを拾うかの設定

帰ってくるXMLはこのような形なので

<word_list>
<word>
<surface>庭</surface>
<reading>にわ</reading>
<pos>名詞</pos>
<baseform>庭</baseform>
</word>

ソースコード中の

readings=soup('reading')

に対応しています。
が、このまま変更しても結果は帰ってこないので

postdata= {
'response' : 'surface,reading',

この response の引数を ‘’ にするか、結果として欲しいものを指定してあげる必要があります。
何が変わるかというと、例えば形態素の基本形を知りたいは reading を baseform に変えてみると

$ python yomi.py
お待ちしております。->お待ちするておるます。

こんな風に、帰ってくる形が変わります。

Web APIですが、扱いやすいですし環境依存しない(MeCabの場合は最低条件としてMeCabが動く環境が必要)ので面白いんじゃないかな。
特に1つあたりの情報量の少ないTwitterとか・・・Twitterとか・・・には好都合な気がします。ちなみに制限は1つのリクエストあたり 100KBまでで、24時間以内に50,000リクエストとなっております。