Yahoo! デベロッパーネットワーク キーフレーズ抽出 メモ
以前、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コール部の関数です。
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! デベロッパーネットワーク