Yahoo! デベロッパーネットワーク キーフレーズ抽出 メモ

以前、Yahoo!のAPI『日本語形態素解析』を使って、
簡単な人工無脳プログラムを作った事があるんだけど、
サイト用に、もっと実用的なモノ(?)を作ってみる事にしました。

i20090806_1600_00

その内容は。。。

サイトの日記から、特徴的な表現を抽出し、
関連する日記へのリンクを、動的に表示するというプログラム。

今回は『キーフレーズ抽出』APIを使います。

APIに日記の文章をPOSTし、キーフレーズを取得、
キーフレーズとファイル名・更新時刻を、インデックスファイルに保存します。
このインデックスファイルを使って、
関連する日記へのリンクを動的に表示する仕組み。

キーフレーズ抽出スクリプトはcronで起動し、
更新された日記のみ処理するようにしています。

※ APIへのPOST処理を簡単に行う為 ※
※ PEAR:HTTP_Request をインストールしました ※
※ root権限のあるVPSは便利かも ※

日本語キーワードのマッチは、mb_ereg_match()じゃなく、uオプションで
preg_match( “/単語0|単語1|単語2/u”, $jtext );

以下、APIコール部の関数です。

 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 );
 }

早速、当サイトに適応させてみました。

■リンク■
Yahoo! デベロッパーネットワーク