WordPress Related Post for Japanese 1.50 RC リリース

WordPress の関連記事表示ためのプラグイン、WordPress Related Post for Japanese の 1.50 RC をリリースしてみます。 Yahoo! Japan の API エントリポイント変更対応が入っていますので、アップグレードのほうお願いいたします。 機能追加もいくつかありますが、不具合なさそうならそのまま JSeries のほうにリリースします。 🙂

現バージョンと表示は互換を持たせてあるはずなので、アップグレードの方はそのままファイルを上書きしていただければ良いと思います。 辞書の再生成はしなくても大丈夫だと思います。(解析テキストに the_content フィルタかぶせたので若干変わっていますが、影響ないところがほとんどかと思います)

wp-jralated.tar.gz

とりあえず、ダウンロードは CVS Head からです。

新規インストールの場合は JSeries をご参考にファイルだけこちらをお使いください。

WordPress Related Post for Japanese

Yahoo! Japan が提供する日本語形態素解析APIを利用して、WordPress の投稿をアナライズし、自動的に投稿の下部に「関連する記事」へのリンクを付与するプラグインです。

wp-jrelated は辞書作成のため Yahoo! Japan の日本語形態素解析を使っていますが、こちらの API の URL が(実は結構前に)変わっています。 おそらくそのうち旧 URL は使えなくなって辞書つくれなくなるとおもいますので、使われている方は適宜アップデートの方向でお願いいたします!

URL の変更は新機能対応をするときに変更しようとおもっていたら遅くなってしまいました。

というわけで今回はをかもとさんのストップワードの対応もマージさせていただきました。 以下変更点です。

  • Yahoo! Japan 日本語形態素解析のエントリポイント URL 変更対応
  • をかもとさんに作っていただいたストップワード対応をマージしました。 単語設定は管理画面から行えます。
  • 形態素解析前に the_content のフィルターを通すように修正しました。 ショートコードやプラグインなどで文字列置換を行っている場合に置換後のテキストで辞書作成を行います。
  • 出力関連数、検索単語数、出力単語数を管理画面から設定できるようになりました。
  • the_content により自動的に記事の下に表示するのとは別に、新設された jrelated_get_array 関数により関連情報をつめた配列を取得できるようになりました。 これをテーマに記述することで自由度の高い表現ができます。

ストップワード対応は以下の記事を参考にさせていただいています。

WordPress Related Post for Japanese 導入 : 独断と偏見の何でもレビュー

とりあえず、試験的に導入したこちら以外のブログでは、英文記事の引用が多いため “this,that,it,is,of,in,and,the” なんかのいわゆるストップワードが頻出単語上位に含まれるため、精度がイマイチ。
と言うわけで、簡単なストップワード対応をしてみました。

wp-jrelated は記事に頻出する名詞がその記事の特徴を表すという考えのもとに作られていますが、その中に記事の特徴を表すわけではない一般的な単語が各記事に多く現れると抽出の精度が落ちてしまいます。(あんまり関係ないのがでちゃう)

これに対して一般的な単語を検索対象からはずす機能がストップワード指定です。 アップグレードの方は最初は指定されていませんので、管理画面から指定してみてください。 🙂

ちなみにぼくの設定は、

this,that,it,is,of,in,and,the,とき,こと,ところ,もの,こちら,あと,これ,やつ,ため,わけ,の,ふ,0,1,2,3,4,5,6,7,8,9

です。 これはサイト(言葉遣い)によって変わりますので、辞書のテーブルとにらめっこして特徴と関係なさそうな単語が上にきていたらそれを指定していってみてください。 🙂

jrelated50

また管理画面から”検索単語数”が指定できます。 これは頻出単語の上位どれくらいがその記事の特徴を表すかの指定です。 前回は 10 固定でやっていましたが、これを変更できるようにしました。 .another では 15 くらいがちょうど良さそうです。 こちらも記事の平均的な文章の長さなどにも左右しますので調整してみてください。 ちなみにあんまりでかくすると意味ないうえに遅くなりますぞい。

ストップワードと検索単語数は即検索結果に反映します。

最後に、新設された jrelated_get_array 関数ですが、引数に post_id を渡すと関連の情報をつめた array を返してくる機能です。 形は・・・

jrelated51

です。。

array[ポストid][‘title’]、array[ポストid][‘link’]、array[ポストid][‘text’] になります。 スクリーンショットが文字化けしているのは、デバッガが日本語を化かしてしまうからで、ほんとはちゃんとした日本語が入ってきます。

管理画面で、the_content の自動出力をやめるように設定して、テーマを変更して次のようなプログラムをいれると出力できます。

うちの wp-kougabu もついでに呼び出して関連記事の画像も出力するところの抜粋です。

single.php。 the_content の下あたりにいれるといいでしょう。

<?php // ポストの関連情報を $jrelateds に取得 ?>
<?php $jrelateds = jrelated_get_array(get_the_ID()); ?>
<?php // wp-kougabuに問い合わせるために出力する関連記事のpost_id配列作成 ?>
<?php $post_ids = array(); ?>
<?php foreach($jrelateds as $post_id=>$value) {
    array_push($post_ids, $post_id); } ?>
<?php // wp-kougabuにつくった配列渡して関連記事の画像URLを先にもらっておく ?>
<?php $images = kougabu_get_images(
    array('array' => true, 'post_id' => $post_ids
    , 'max_width' => 100, 'max_height' => 100)); ?>
<div id="wpjr">
    <h3 id="related">このブログで関連すると思われる他の投稿</h3>
    <ul id="wpjrelated">
    <?php // wp-jrelated からもらった関連記事をループする ?>
    <?php foreach($jrelateds as $post_id=>$jrelate) { ?>
    <li>
        <div class="thumbnail">
            <?php // wp-kougabu 画像がその関連にあれば出力する ?>
            <?php if(isset($images[$post_id])) {
                echo $images[$post_id][0]; } ?>
        </div>
        <div class="sumarry">
            <?php // wp-jrelated からリンクと頻出単語を出力する ?>
            <a href="<?php echo $jrelate['link']; ?>">
                <?php echo $jrelate['title']; ?></a><br>
            <?php echo $jrelate['text']; ?>
        </div>
    </li>
    <?php } ?>
    </ul>
</div>

自動出力と違って HTML タグは好き勝手にできますので、こちらのほうが人によっては使いやすいかもしれません。

画像を出したくて wp-kougabu 使ってないよ~という方は、

hiromasa.another :o) » Blog Archive » WordPress メディアライブラリから指定ポストの画像を一括取得する

WordPress Related Post for Japanese の関連に画像を出力してみた試験をしたときに「SQL で一括~」なことを書いていたら、yuriko さんが SQL を書いてくださいました。早速試させていただいたところ、みごとに一発抽出できました。 :-)

こちらの SQL をアレンジしてつけてみてください。

画像とかいらないよ、というかたは適宜それっぽいところを削除の方向で。 CSS はみなさんのほうがずっと詳しいので各自お願いします(笑)

というわけで、長くなってしまったのであとはのりで。。 不具合などありましたら教えてください。 😀

このエントリーをはてなブックマークに追加

WordPress Related Post for Japanese 1.50 RC リリース” への12件のコメント

  1. 入れてみました!ストップワード対応は正常に動作しているようです。

    …が、以前のバージョンでは、$wpjr->getRelated() は引数無しで動作していたんですが、1.5からは post_ID を渡さなければならないんですね。
    その辺も、どこかに書いておいたほうがいいかも。

    ちなみに、私のテーマでは $wpjr->getRelated(get_the_ID()); に書き換えました。

  2. おっと失礼しました。。 orz

    引数変更しておりました、修正お手数おかけしました。
    リリース時には記載しておきます!

    テストいただきましてありがとうございました!

  3. ピンバック: o xein’, angellein...

  4. ピンバック: WordPress Related Post for Japanese を入れてみた « のぼろぐ

  5. ピンバック: ワタシの今の環境を晒してみるよ - LOVE!?

  6. はじめまして。

    WordPress Related Post for Japaneseを利用させて頂いてます。通常のpost投稿だと関連記事がうまく表示できるようなのですが、カスタム投稿タイプになるとなぜか表示することができません。

    プラグインの編集画面からがんばってSQLの部分に
    ” AND po.post_type = ‘anime'” .
    を入れても表示することができません。

    表示のプログラムには、

    $value) {
    array_push($post_ids, $post_id); } ?>

    $jrelate) { ?>

    <a href="”>

    と記入しています。

    ためしに、$jrelatedsをprint_rで見てみましたが何もはいっていません。。。

    カスタム投稿タイプで、カスタム投稿タイプの関連記事を表示させたいのですがどうしたらいいでしょうか?もしかして、カスタム投稿は対応していないのでしょうか?

    お忙しいところ申し訳ありませんが、お時間があればご回答をよろしくお願いします。

  7. こんにちは。:)

    すいません、主にこのブログ用につくったので、カスタム投稿タイプに関する考慮はこのプラグインには入っておりませんでした。とりあえず、ソースの下のほうに、

    add_action(‘publish_post’, array (&$wpjr, ‘executeSchedulePublisd’));

    というのがあると思うのですが、それと同じ感じで

    add_action(‘publish_カスタム投稿タイプ名’, array (&$wpjr, ‘executeSchedulePublisd’));

    を入れていただいて、投稿してもらうと関連はつくられるのではないかと思います。

    ただ、関連の抽出に投稿タイプ別の考慮がないため、でたとしても現在のところ投稿もカスタム投稿もまざってでてしまいますです。

  8. お返事ありがとうございます。

    返信が遅くなりすみません。

    add_action(‘publish_カスタム投稿タイプ名’, array (&$wpjr, ‘executeSchedulePublisd’));

    とやってみましたがやはり表示されません。データーベースの中を覗いてみると関連記事のテーブルは作られているようですが、その中身が作られてないようです。

  9. こんにちは。:)

    _”カスタム投稿タイプ名” の部分は、カスタム投稿定義のカスタム投稿名のID(英文字)が入るのですが、それでもだめな感じでしょうか?

  10. こんにちわ。

    >カスタム投稿定義のカスタム投稿名が入るのですが

    カスタム投稿名入れてますね・・・・

    もしかすると、他にも関連記事プラグインを入れてる(YetAnother プラグイン)のでこれが干渉してるかもしれませんね。

    ひとまず、再度プラグインを削除、インストールしてまた進展がありましたらご報告します。

  11. > カスタム投稿名入れてますね・・・・

    そうですよね、、すいません。。 時間が出来ましたらこちらもちょっとみてみます! ご連絡ありがとうございました!

  12. ピンバック: プチカスタマイズ備忘録 | LOVE!?

コメントを残す

メールアドレスが公開されることはありません。