似ているエントリを表示するwordpressプラグイン Related Posts

今日は WordPress Related Posts 2.0 をためしてみます。(もともと Related Entries という名前だったのが Related Posts という名前にかわったっぽいです)

MovableTypeの Related Entries Plugin が手動で似ているエントリを選んであげないといけないのに対して、これは自動で選んで表示してくれます。
readmeを読むとmysqlの全文検索機能を利用して実装されているようなので、単語に区切りなおす必要がある日本語でちゃんと動作するかとおもったけど、こちら WordPress Hack : Related Posts plugin 1 at orioa で使われているのを見るかんじ問題なさそうです。

  1. 展開したtarballの中から related-posts.php を wp-content/plugins にコピーします。
  2. wordpressの管理画面で related posts プラグインを有効にします。ついでに “Related Posts options” で表示するエントリの数等を設定しておくといいでしょう。
  3. 下記のSQLを発行してmysqlのテーブルスキーマを変更します。
    ALTER TABLE `wp_posts` ADD FULLTEXT `post_related` (
        `post_name` ,
        `post_content`
    )
  4. Related Entriesを表示したいところに <?php related_posts(); ?> というコードを書き込んでできあがり。

前回の » GETAを関連エントリ抽出に使ってみる と比べてみます。
» ディスクの製品名を取得する で使ってみたところ、出てきたのは » smartmontools と » GETAを関連エントリ抽出に使ってみる でした。前者はGETAでも似ているとされたもの。後者は内容的には関係ないんだけど、中でsmartmontoolsという単語が出てくるので似ていると判断されているっぽいです。

» javascript debugger on IE のほうで出てきているエントリは、» Firefox Extension: Console Filter, » Safari Developer FAQ など。まあ当たらずとも遠からず。

疑惑

そこそこ似たのが出てくるので、ほかのエントリもいろいろ見ていたのですが、どうもエントリ中のアルファベットのみで関連エントリが抽出されている気がしてきました。
プラグインのソースを見たら、類似度の判定は SELECT ID, post_title, post_content,MATCH (post_name, post_content) AGAINST ( post_name ) でやっています。ちなみにpost_nameというのは基本的にはエントリのタイトル、正確にはURLの一部として使われるポストスラッグがはいっています(デフォルトではタイトルがそのままポストスラッグになります)。Nega Diary: mysqlで日本語全文検索の効果 によれば、mysqlの全文検索で日本語を検索するには16進表記にしないとうまく行かないらしいので、実際アルファベットだけで類似度を出していそうです。

結論

というわけで、Related Posts プラグインを使用すると、英単語の多いものならそれっぽい結果が得られますが、日本語は類似度の判定に含まれていなさそうなのであまり実用的ではなさそうです。
日本語も類似度判定に含めるのならば全文検索のインデックス用に、本文を分かち書きにしたものを用意しないといけないのでMeCab/Chasenのお世話にならないとだめそうです。


About this entry