【perlメモ】Yahoo!デベロッパーネットワーク – テキスト解析 – キーフレーズ抽出のperlサンプル

20110908

Yahoo!デベロッパーネットワークのテキスト解析のキーフレーズ抽出APIを使ったperlのサンプルプログラム。 – kmake.net ソースは下

Yahoo!デベロッパーネットワークテキスト解析キーフレーズ抽出を試してみた。

Yahoo!デベロッパーネットワーク – テキスト解析 – キーフレーズ抽出

MeCabを使った特徴語抽出より精度がよくいい感じでキーワードを抽出してくれる。PHPのサンプルコードは提供されているがperlの物はなかったので実際にperlでサンプルコードも公開しておく。

Yahoo!デベロッパーネットワーク – サンプルコード集 – テキスト解析サンプルコード – キーフレーズ抽出


perlで作ったキーフレーズ抽出のサンプルプログラム

必要があれば use libなどでモジュールにパスを通す。

keyphraseservice.cgi

#!/usr/local/bin/perl
#———————————————————————————-
#2011.02.03キーフレーズ抽出サンプルプログラム by kumacchi
#———————————————————————————-
use strict;
use warnings;
use utf8;
#use lib (‘/home/example/local/lib/perl5/site_perl/5.8.8’);
use XML::Simple;
use CGI::Simple;
use LWP::Simple;
use Encode qw/from_to encode_utf8 decode_utf8 decode encode/;
#use Data::Dumper;
#{
#    #no warnings;
#    no warnings ‘redefine’;
#    package Data::Dumper;
#    sub qquote { return shift; }
#}
#$Data::Dumper::Useperl = 1;

my $base_url = ‘http://jlp.yahooapis.jp/KeyphraseService/V1/extract’;
my $appid = あなたのアプリケーションID‘;
my $back  = ‘http://blog.kumacchi.com/’;
my $title = ‘Yahoo!デベロッパーネットワークのテキスト解析のキーフレーズ抽出APIを使ったperlのサンプルプログラム。’;
my $url   = ‘http://kmake.net/keyphraseservice/keyphraseservice.cgi’;
#———————————————————————————-

my $q = new CGI::Simple;
my $sentence = $q->url_encode(encode_utf8($q->escapeHTML(decode_utf8($q->param(‘sentence’) || ”))));

my $result = ”;

if($sentence){
    my $req = "$base_url?appid=$appid&sentence=$sentence";
    my $res = get($req);

    my $xs = XML::Simple->new();
    my $ref = $xs->XMLin($res, ForceArray=>[‘Result’],SuppressEmpty =>”);

    $result = ‘<ul>’;
    foreach my $r(@{$ref->{Result}}){
        $result .= sprintf("<li>%03d %s</li>",$r->{Score},$r->{Keyphrase});
    }
    $result .= ‘</ul>’;
}

binmode STDOUT,’:utf8′;
print "Content-Type: text/html; charset=utf-8\n\n";
print <<"EOF";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="description" content="$title">
<meta name="keywords" content="キーフレーズ抽出,特徴語抽出,サンプルプログラム">
<title>$title – kmake.net</title>
</head>
<body>
<h1><a href="$url">$title</a></h1>
<hr>
<a href="$back">戻る</a>
<hr>
<form name="form1" method="post">
<textarea name="sentence" cols="80" rows="10"></textarea><br>
<input type="submit" name="submit" value="送信">
</form>
<div>$result</div>
<!– Begin Yahoo! JAPAN Web Services Attribution Snippet –>
<a href="http://developer.yahoo.co.jp/about">
<img src="http://i.yimg.jp/images/yjdn/yjdn_attbtn1_125_17.gif" title="Webサービス by Yahoo! JAPAN" alt="Web Services by Yahoo! JAPAN" width="125" height="17" border="0" style="margin:15px 15px 15px 15px"></a>
<!– End Yahoo! JAPAN Web Services Attribution Snippet –>
</body>
</html>
EOF

 

実際どんなもんだかMeCabの結果と比べてみる。下のマイコミジャーナルの記事の冒頭部分をYahooのキーフレーズ抽出とMeCabでそれぞれキーフレーズ抽出して比べてみた。

TVアニメ『イナズマイレブン』に『怪盗グルーの月泥棒』のキャラが友情出演 | ホビー | マイコミジャーナル

yahoo!のキーフレーズ抽出APIの結果

100 怪盗グルー
062 イナズマイレブン
057 月泥棒
053 カメオ
052 水曜19時26分~放送
044 興行収入
042 テレビ東京系
040 キャラクター
038 Blu-ray
037 劇場版
035 タイミング
032 友情
031 アニメ映画
029 TVアニメ
023 決定
022 話題
014 DVD
011 2011年3月2日
009 13億円
007 10月

MeCabを使った結果

[怪盗グルー                                                  ]             3.46
[月泥棒                                                      ]             3.46
[(テレビ東京系                                               ]             2.00
["劇場版"                                                    ]             2.00
[Blu – ray / DVD                                             ]             1.74
[アニメ映画                                                  ]             1.68
[TVアニメ                                                    ]             1.68
[放送)                                                       ]             1.68
[興行収入                                                    ]             1.41
[キャラクター                                                ]             1.41
[イナズマイレブン                                            ]             1.00
[話題                                                        ]             1.00
[決定                                                        ]             1.00
[タイミング                                                  ]             1.00

上記の様になった。結果としてはYahoo!のキーフレーズ抽出の方が好ましい。どこがどう好ましいかというと、この元のテキストはイナズマイレブン関連の記事を解析しているわけであるから、大抵の場合イナズマイレブンというフレーズの重要度は高くあってほしいと期待すると思われるが、Yahoo!の方は2番目にあるのに対してMeCabの方はずいぶん下の方で重要度も1.00と低い。それにフレーズの区切りもなんだかちょっと怪しい。

MeCabもちゃんと使いこなせばもっとちゃんとするのかも知れないが、Yahoo!のほうが手軽に高精度なキーフレーズ抽出をすることが出来るのは確かである。

MeCabの方はスタンドアローンで利用できるがYahoo!の方はWebAPIであるからインターネットに繋がっている必要があるなど、それぞれに短所長所があるので用途によって使い分けるのがいいかと思う。

単純に考えればYahoo!の方は辞書をYahoo!が常にメンテしてくれているのでキーフレーズの的確な重要度が設定されているのではないかと思う。

タグ :