M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2008年4月21日 01:33

Yahoo形態素解析APIにGET、POSTで問い合わせしてみるサンプル

このエントリーをはてなブックマークに追加 mixiチェック

YahooのWebサービスで、形態素解析ができるやつがあるので、

Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析 [developer.yahoo.co.jp]

使ってみました。GETバージョンとPOSTバージョンを二つ作ってみました。というのも、最初楽チンなほうのGETバージョンを作りましたが、これってYahooのWebサーバソフトの制約であまり長い文字列渡せないよなーと思って、POSTバージョンを追加で作りました。

なお、アプリケーションIDは各自自前で取得してください。

Filename: parse_get.pl

#!/usr/bin/perl
use strict;
use warnings;
use Encode;
use LWP::Simple;
use utf8;
use URI;
use XML::Simple;
binmode STDOUT => ':utf8';
 
# __END__以降一気読み
my $text; { local $/ = "\0"; $text = <DATA>; }
 
my $ref = yahoo_parsetext_get( $text );
foreach my $item ( @{$ref->{uniq_result}->[0]
                   ->{word_list}->[0]->{word}} ) {
  print "$item->{count}->[0]\t$item->{surface}->[0]\n";
}
 
exit;
 
 
sub yahoo_parsetext_get {
  my $text = shift;
  my $proxy = 'http://api.jlp.yahoo.co.jp/MAService/V1/parse';
  my $uri   = URI->new( $proxy );
  $uri->query_form(
    appid       => 'xxxxxxxx',
    results     => 'uniq',
    response    => 'surface',
    uniq_filter => '9', # 名詞
    sentence    => encode('utf8', $text),
  );
  my $xml = get($uri->as_string);
  my $xs  = XML::Simple->new();
  my $ref = $xs->XMLin( $xml, forcearray => 1 );
  return $ref;
}
 
 
__END__
昨日長岡技術科学大学で行われたオープンソースカンファレンス 2008 Nagaokaに行ってきました。
 
http://www.ospn.jp/osc2008-nagaoka/
 
 
▲長岡技科大は学内桜だらけでいいねー
 
まあ、講義棟がどこだか分からず奥までいってしまったわけですが。
 
普段の出張だったらスーツ着用ですが、今回は私用なので私服でいったら見事学生に紛れてよかった(つもり)。
 
参加したのは、
OSS事例紹介「システム会社と二人三脚で段階的にITシステムを強化」
Railsで作る社内システム ~ワークフローシステム開発事例紹介~
MediaWikiでコミュニケーション
データベースをアプリに組み込もう!~実践Firebird / MySQL / SQLite~
 
の4つ、あと閉会式&抽選会。
 
んで、情報系の大学に入ったつもりだったのに講義が顎関節とか機能的電気刺激とかサイバーパンクあふれる講義ばかりでドロップアウトしてしまった僕にとっては、ふつーにソフトウェア関連の発表を見るのは新鮮でした。
 
参考になったのは最後のセミナーかな。SQLiteでいいんだっていう自信になったw
 
 
▲こういうプロダクト別比較表って助かるよね
 
このセミナーの開催を教えてくれたS君ありがとう。
 
※抽選会で景品当たらなかった。ちえっ。

Filename: parse_post.pl

#!/usr/bin/perl
use strict;
use warnings;
use Encode;
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use utf8;
use XML::Simple;
binmode STDOUT => ':utf8';
 
# __END__以降一気読み
my $text; { local $/ = "\0"; $text = <DATA>; }
 
my $ref = yahoo_parsetext_post( $text );
foreach my $item ( @{$ref->{uniq_result}->[0]
                   ->{word_list}->[0]->{word}} ) {
  print "$item->{count}->[0]\t$item->{surface}->[0]\n";
}
 
exit;
 
 
sub yahoo_parsetext_post {
  my $proxy = 'http://api.jlp.yahoo.co.jp/MAService/V1/parse';
  my $request
    = POST( $proxy,
            [
              appid       => 'xxxxxxxx',
              results     => 'uniq',
              response    => 'surface',
              uniq_filter => '9', # 名詞
              sentence    => encode('utf8', $text),
            ]
      );
  my $ua  = LWP::UserAgent->new;
  my $res = $ua->request($request);
  my $xml = $res->content;
  my $xs  = XML::Simple->new();
  my $ref = $xs->XMLin( $xml, forcearray => 1 );
  return $ref;
}
 
 
__END__
昨日長岡技術科学大学で行われたオープンソースカンファレンス 2008 Nagaokaに行ってきました。
 
http://www.ospn.jp/osc2008-nagaoka/
 
 
▲長岡技科大は学内桜だらけでいいねー
 
まあ、講義棟がどこだか分からず奥までいってしまったわけですが。
 
普段の出張だったらスーツ着用ですが、今回は私用なので私服でいったら見事学生に紛れてよかった(つもり)。
 
参加したのは、
OSS事例紹介「システム会社と二人三脚で段階的にITシステムを強化」
Railsで作る社内システム ~ワークフローシステム開発事例紹介~
MediaWikiでコミュニケーション
データベースをアプリに組み込もう!~実践Firebird / MySQL / SQLite~
 
の4つ、あと閉会式&抽選会。
 
んで、情報系の大学に入ったつもりだったのに講義が顎関節とか機能的電気刺激とかサイバーパンクあふれる講義ばかりでドロップアウトしてしまった僕にとっては、ふつーにソフトウェア関連の発表を見るのは新鮮でした。
 
参考になったのは最後のセミナーかな。SQLiteでいいんだっていう自信になったw
 
 
▲こういうプロダクト別比較表って助かるよね
 
このセミナーの開催を教えてくれたS君ありがとう。
 
※抽選会で景品当たらなかった。ちえっ。

実行例:

$ perl parse_post.pl
4	システム
3	講義
2	2008
2	SQLite
2	セミナー
2	事例
2	抽選会
2	紹介
1	-nagaoka
1	4
1	Firebird
1	IT
1	MediaWiki
1	MySQL
1	Nagaoka
1	OSS
1	Rails
1	http
1	jp
1	osc
1	ospn
1	www
1	ちえ
1	つもり
1	どこ
1	ふつー
1	わけ
1	アプリ
1	オープン
1	カンファレンス
1	コミュニケーション
1	サイバーパンク
1	スーツ
1	ソフトウェア
1	ソース
1	データベース
1	ドロップアウト
1	フロー
1	プロダクト
1	ワーク
1	二人三脚
1	今回
1	僕
1	出張
1	刺激
1	参加
1	参考
1	君
1	大
1	大学
1	奥
1	学内
1	学生
1	実践
1	強化
1	情報
1	技
1	新鮮
1	昨日
1	普段
1	景品
1	最後
1	桜
1	棟
1	比較
1	発表
1	着用
1	社内
1	私服
1	私用
1	自信
1	長岡
1	長岡技術科学大学
1	閉会
1	開催
1	開発
1	関連
1	電気
1	顎関節
1	w

これ何に使うかっていうと、自動タグ付けに使えないかなーて思っとります。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2446

コメントする