Posted by をかもと at 2008年8月15日 金曜日
Yahoo! Japan が提供する日本語形態素解析APIを利用して、WordPress の投稿をアナライズし、自動的に「関連する記事」へのリンクを作成するプラグイン WordPress Related Post for Japanese を導入しました。
関連記事は、今までは SimpleTags プラグインを利用していたのですが、今度からはこちらに切り替え。
とりあえず、試験的に導入したこちら以外のブログでは、英文記事の引用が多いため "this,that,it,is,of,in,and,the" なんかのいわゆるストップワードが頻出単語上位に含まれるため、精度がイマイチ。
と言うわけで、簡単なストップワード対応をしてみました。
書き換えた箇所は 502〜512行。以下の様に変更
//ストップワードリスト
$stopwords = 'this,that,it,is,of,in,and,the,こと,ところ,もの,こちら';
//投稿の形態素分析結果から頻出単語上位10個のテキストを取得する。
$morpheme = $wpdb->get_row($wpdb->prepare(
"select uniq_delimitar_text from {$wpdb->prefix}morpheme where appid = '%s' and ID = '%s' LIMIT 0, 1;"
,$this->yahooId
,$postID
));
$texts = split(',', $morpheme->uniq_delimitar_text);
//まだ辞書がなかったらなにもしない
if($texts === false) return false;
//上位10(ストップワード除く)以外は捨てる
$hashes = array();
$pattern = '/^(' . str_replace(',', '|', $stopwords) . ')$/i';
for ($i=0, $j=0; $i<count($texts); $i++) {
if (!preg_match($pattern, $texts[$i])) {
//ストップワード以外の頻出単語上位10個のハッシュを取得する。
$hashes[$j] = md5($texts[$i]);
$j++;
}
if ($j >= 10) break;
}
unset($texts);
これで、ストップワードリストに上げられた単語以外の頻出単語上位10個で、関連記事を検出してくれるはず。
つぶやく
こんばんわ〜 これ使わせていただきました〜
ストップワードリストを何回も書き直しましたが、かなりお利口さんになりました。
ありがとうございました〜
yutaka さん、どもです。
ストップワードリストは、自サイトのエントリの傾向に合わせて色々試行錯誤する必要が有りますね。
ちなみに私の所では、こんな感じで落ち着いてます。
あれ?ストップワードって10個以上でも大丈夫なんですか!
いくつ設定しても良いんですね
10個に絞るのって大変だったんですけど
再挑戦!
何千個でも、何万個でもおっけ!
ただし、あまり多いと処理がむちゃくちゃ重くなるので注意が必要。