以前、Yahoo!のAPI『日本語形態素解析』を使って、
簡単な人工無脳プログラムを作った事があるんだけど、
サイト用に、もっと実用的なモノ(?)を作ってみる事にしました。
その内容は。。。
サイトの日記から、特徴的な表現を抽出し、
関連する日記へのリンクを、動的に表示するというプログラム。
今回は『キーフレーズ抽出』APIを使います。
APIに日記の文章をPOSTし、キーフレーズを取得、
キーフレーズとファイル名・更新時刻を、インデックスファイルに保存します。
このインデックスファイルを使って、
関連する日記へのリンクを動的に表示する仕組み。
キーフレーズ抽出スクリプトはcronで起動し、
更新された日記のみ処理するようにしています。
※ APIへのPOST処理を簡単に行う為 ※
※ PEAR:HTTP_Request をインストールしました ※
※ root権限のあるVPSは便利かも ※
日本語キーワードのマッチは、mb_ereg_match()じゃなく、uオプションで
preg_match( “/単語0|単語1|単語2/u”, $jtext );
以下、APIコール部の関数です。
[php]
function YahooDeveloperNetwork_Keyphrase( $diary )
{
require_once "HTTP/Request.php";
$str = "";
$URL = "http://jlp.yahooapis.jp/KeyphraseService/V1/extract";
$AID = "— application ID —";
$req = & new HTTP_Request( "" );
$req->setURL( $URL );
$req->setMethod( HTTP_REQUEST_METHOD_POST );
$req->addPostData( "appid",$AID );
$req->addPostData( "output","xml" );
$req->addPostData( "sentence",$diary ); // UTF-8
$req->sendRequest();
if( !PEAR::isError( $req ) ) {
$ret = $req->getResponseBody();
if( preg_match_all( "/<Keyphrase>(.+?)<\/Keyphrase>/", $ret,$m0,PREG_SET_ORDER )
&& preg_match_all( "/<Score>(.+?)<\/Score>/", $ret,$m1,PREG_SET_ORDER ) ) {
for( $i = 0; $i < count( $m0 ); $i++ ) {
$str .= sprintf( ",%s:%d",$m0[$i][1],$m1[$i][1] ); // Keyphrase:Score
}
}
}
return( $str );
}
[/php]
早速、当サイトに適応させてみました。
■リンク■
Yahoo! デベロッパーネットワーク