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


DIARY 2009.08.06 16:00
以前、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 );
 }
 ?>
 

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

■リンク■
Yahoo! デベロッパーネットワーク
このエントリーをはてなブックマークに追加 Check
ダメダス.NET  Powered by Lightbox js 2.0   Presented by iso800cc