Yahoo!の日本語形態素解析Webサービスを使ってTwitterで流行っているキーワードをクラウド化
Yahoo!JAPANがまたサービスを出してきました。このサービス、利用制限はありますが、結構使えそうです。
先日MeCab extensionを使ってTwitterで流行っているキーワードをクラウド化してみましたが、MeCab extensionをYahoo!のサービスに置き換えたものを書いてみました。
ヤフーは6月18日、開発者向けサイト「Yahoo!デベロッパーネットワーク」において、日本語の文章を解析できるAPI「日本語形態素解析Webサービス」を公開した。
使ったライブラリは
の3つです。まあ、そのうちYahoo用のライブラリも出てくるでしょうから、それを使えばもっと簡単に書けそうです。やっぱ、SimpleXML楽すぎ! :-D
<style> div.taglist { float: none; width: 50%; margin-left: 20px; margin-bottom: 20px; line-height: 1.5em; font-size: 60%; text-align:center; text-transform: uppercase; } ul.taglist { margin: 0 0; padding: 0 0; background: none; display: block; letter-spacing:-0.1em; font-weight: bold; } a.latest { margin: 1em 0; letter-spacing:-0.1em; color: #333388 } a.latest:hover { color: #333388 } a.later { margin: 0 0; letter-spacing:-0.1em; color: #333388 } a.later:hover { color: #333388 } a.earlier { margin: 0 0; letter-spacing:-0.2em; color: #cccccc } a.earlier:hover { color: #333388 } a.earliest{ margin: 0 0;letter-spacing:-0.2em; color: #cccccc } a.earliest:hover { color: #333388 } </style> <?php error_reporting(E_ALL); require_once 'Services/Twitter.php'; require_once 'HTML/TagCloud.php'; require_once 'HTTP/Request.php'; $user = '[TwitterのログインID]'; $pass = '[Twitterのパスワード]'; $application_id = '[Yahoo! DEVELOPER NETWORKのアプリケーションID]'; $twitter = new Services_Twitter($user, $pass); $friends = json_decode($twitter->getFriendsTimeline()); if (!is_array($friends)) { exit; } $sentence = ''; foreach ($friends as $friend) { $text = $friend->text; $text = str_replace('[B!]', '', $text); $text = str_replace('*Tw*', '', $text); $text = mb_ereg_replace('\([012][0-9]:[0-9]{2}\)', '', $text); $text = mb_ereg_replace('https?://[a-zA-Z0-9.-/=?&%]+', '', $text); /** * 対象となるテキストを半角スペースを付けて連結 * Yahoo!APIへのアクセスが1回になるよう手抜き ;-) */ $sentence .= ' ' . $text; } /** * PEAR::HTTP_Requestを使ってYahoo!APIをコール */ $url = 'http://api.jlp.yahoo.co.jp/MAService/V1/parse'; $request = new HTTP_Request($url); $request->addQueryString('appid', $application_id); $request->addQueryString('sentence', $sentence); $request->addQueryString('results', 'uniq'); $request->addQueryString('filter', '9'); if (PEAR::isError($request->sendRequest())) { die('request failed'); } $max_count = false; $cloud = new HTML_TagCloud(); /** * SimpleXMLを使って名詞と出現回数を抜き出し、PEAR::HTML_TagCloudに * 食わせる */ $xml = new SimpleXMLElement($request->getResponseBody()); foreach ($xml->uniq_result->word_list->word as $wd) { if ($max_count === false) { $max_count = $wd->count; } $cloud->addElement($wd->surface, null, $wd->count * (10 / $max_count), time() - ($max_count - $wd->count) * 60 * 60 * 24); } echo $cloud->buildHTML();
手抜きだ。。。(^^;
追記(2007/06/18 22:47)
Do You PHP?のEXPERIENCEで動作を確認できるようにしてみました。