Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

Yahoo!の日本語形態素解析Webサービスを使ってTwitterで流行っているキーワードをクラウド化

Yahoo!JAPANがまたサービスを出してきました。このサービス、利用制限はありますが、結構使えそうです。


 ヤフーは6月18日、開発者向けサイト「Yahoo!デベロッパーネットワーク」において、日本語の文章を解析できるAPI「日本語形態素解析Webサービス」を公開した。

先日MeCab extensionを使ってTwitterで流行っているキーワードをクラウド化してみましたが、MeCab extensionをYahoo!のサービスに置き換えたものを書いてみました。
使ったライブラリは

の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で動作を確認できるようにしてみました。