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! デベロッパーネットワーク
簡単な人工無脳プログラムを作った事があるんだけど、
サイト用に、もっと実用的なモノ(?)を作ってみる事にしました。

その内容は。。。
サイトの日記から、特徴的な表現を抽出し、
関連する日記へのリンクを、動的に表示するというプログラム。
今回は『キーフレーズ抽出』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! デベロッパーネットワーク









