2007-06-20
Yahoo!の形態素解析を利用してみた by Perl
「Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析」
作業したこと
という流れ。これで簡単に形態素解析ができるようになった(と言ってもローカルにMeCabがあるのだけど)
これからもう少し改良しておくこと
3は解決済み。1リクエストにつき100KBまでなのでファイルテストでファイルサイズを確かめてリクエスト送るかどうかを分岐。残りはおいおい勉強していきます。
追記
ソースコード張ってませんでした。
#!/usr/bin/perl use strict; use Encode; use YAML; use LWP::Simple; use XML::Simple; # リクエストのベースURL my $base_url = 'http://api.jlp.yahoo.co.jp/MAService/V1/parse?'; # リクエストする時に必要なアプリケーションキー my $app_id = 'your app id'; # 形態素解析したい文 my $sentence ='疾きこと風の如く、徐かなること林の如く、侵掠すること火の如く、動かざること山の如し'; # UTF-8でURLエンコード $sentence =~ s/([^\w ])/"%" . unpack("H2", $1)/eg; # リクエストURLの生成 my $req_url = $base_url . "appid=$app_id" . "&results=ma&sentence=" . $sentence; # GETメソッドでリクエストを送る # 結果はXML形式で$resに代入される my $res = LWP::Simple::get($req_url) or die "cannot get content from $req_url"; # XML::SimpleでXMLをパース my $parser = XML::Simple->new(); my $doc = $parser->XMLin($res); # リクエストの形式を確認するためにYAML形式でダンプ print Dump $doc;
即席のものなのでアプリケーションIDと形態素解析したい文章はハードコーディング。ダンプした結果はこんな感じ
--- ma_result: filtered_count: 27 total_count: 27 word_list: word: - pos: 形容詞 reading: はやき surface: 疾き - pos: 名詞 reading: こと surface: こと - pos: 接尾辞 reading: ふう surface: 風 - pos: 助詞 reading: の surface: の - pos: 助動詞 reading: ごとく surface: 如く - pos: 特殊 reading: 、 surface: 、 - pos: 特殊 reading: じょ surface: 徐 - pos: 助詞 reading: か surface: か - pos: 動詞 reading: なる surface: なる - pos: 助詞 reading: こと surface: こと - pos: 名詞 reading: はやし surface: 林 - pos: 助詞 reading: の surface: の - pos: 助動詞 reading: ごとく surface: 如く - pos: 特殊 reading: 、 surface: 、 - pos: 名詞 reading: しんりゃく surface: 侵掠 - pos: 助動詞 reading: する surface: する - pos: 名詞 reading: こと surface: こと - pos: 名詞 reading: ひ surface: 火 - pos: 助詞 reading: の surface: の - pos: 助動詞 reading: ごとく surface: 如く - pos: 特殊 reading: 、 surface: 、 - pos: 動詞 reading: うごか surface: 動か - pos: 助動詞 reading: ざる surface: ざる - pos: 名詞 reading: こと surface: こと - pos: 名詞 reading: やま surface: 山 - pos: 助詞 reading: の surface: の - pos: 助動詞 reading: ごとし surface: 如し xmlns: urn:yahoo:jp:jlp xmlns:xsi: http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation: urn:yahoo:jp:jlp http://api.jlp.yahoo.co.jp/MAService/V1/parseResponse.xsd
上記のYAMLを見ればお分かりのように形態素にアクセスするには愚直に書くなら
$doc->{ma_result}->{word_list}->{word}->[$i]->{surface}
です。これは面倒なのでXML::LibXMLを使おうかと思います。ですが、そうするとXPathを覚えないといけません。いい機会なので勉強することにします。
トラックバック - http://d.hatena.ne.jp/ksmemo/20070620/p1