Permalink から、特徴的単語を持つ似たエントリを検索します。
Bulkfeeds で「似たBlog記事を検索」する Similarity Search をリリースしました。
わかりやすく言うと、「おとなり Blog」とか呼ばれるようなものです。Blog エントリに含まれる文章を形態素解析し、特徴的単語を抜き出して、それらの単語で Bulkfeeds の RSS Item 全文検索します。結果、話題の関連性が高いエントリが検索できます。また、Blog ツールの permalink (Individual Entries) に javascript を使って関連記事の見出しを埋め込むこともできます(「くっつきおとなり Blog」みたいなもの)。
Similarity Search に permalink の URL をいれれば、類似記事が検索できます。
Similarity Search のページに Bookmarklet がおいてあります。これはブラウズ中のページの URL を /app/similar のクエリに付加するものです。 URL をわざわざ入力する手間がはぶけて便利かと。
Blog のエントリ Permalink に javascript をつかって、関連記事を埋め込むことができます。Movable Type の場合を例にすると、以下のようなコードを Individual Entries のテンプレートの好きな箇所に埋め込むと、関連記事一覧を出力できます。
<script language="JavaScript"> var url ='<$MTEntryPermalink$>'; var n = 10; var oe = 'euc-jp'; var style = 'mt-comments'; // or 'lite' document.write('<scr' + 'ipt language="JavaScript" src="http://bulkfeeds.net/app/similar.js?url=' + escape(url) + '&n=' + n + '&style=' + style + '&oe=' + oe + '"></scr' + 'ipt>'); </script>
上級者な人は、もっとカンタンに
<script language="JavaScript" src="http://bulkfeeds.net/app/similar.js?url=<$MTEntryPermalink encode_url="1"$>&n=5&style=lite&oe=euc-jp&noheader=1"></script>
でもよいでしょう。
パラメータの意味は以下のとおり
style=lite, style=mt-comments とも div で class 指定を埋め込んでいます。サンプルのスタイルシートを Demo Page におきましたので、ソースを参照してみてください。
また blosxom の場合に permalink に埋め込む用の plugin を hail2u の kyo さんが作ってくれました。
tDiary などの段落アンカー系ツールでは、1つの日付単位がHTML になるので、複数記事があった場合に js が複数となり Bulkfeeds 側の負荷が高くなってしまいます。この解決方法は、js をつかって1つの script で埋め込めるような仕様を現在検討しています。
javascript で埋め込まず、リンクだけしたい場合には、単純に以下のようにすればOK です。
<a href="http://bulkfeeds.net/app/similar?url=<$MTEntryPermalink encode_url="1"$>">Bulkfeeds で関連記事検索</a>
Permalink の形態素解析は、Bulkfeeds の全文検索インデクス作成と同時に行っていますので、Bulkfeeds で巡回していないサイトは検索対象外です。また、インデクス作成が追いついてない場合(最大で1時間くらい)、検索対象外となります。時間がたてば検索できるようになるはずです。
また Similarity Feed (埋め込み用 js)の生成は、初回アクセスのみ動的に行い、2回目以降はキャッシュから吐き出すようにしています(ので初回だけは出力が遅くなる場合があります)。以後サーバ側でキャッシュは定期的に最新に保たれますが、結果を強制的に最新にしたい場合は強制リロード (WinIE なら Ctrl+F5) を使用してみてください。
どの単語がそのエントリの特徴語に選ばれたかは、Bulkfeeds の Similarity Search 画面に表示されます。特徴語は、Bulkfeeds の直近 100,000 エントリから idf を作成(1日1回のバッチ)して、エントリの単語の tf の平方根(正規化)とかけあわせ (tf*idf)、上位4語を抜き出して適当にペアをつくって検索しています。分かち書きに kakasi を使用しているため、おかしなところできれることがありますが、実験した限りでは MeCab などよりよい精度を示したため kakasi にしました。
ベータ版なので、出力されるHTMLなどが随時変更になる可能性があります。 その辺はご容赦を。逆にこうしてほしいといった要望があれば(作者にやる気がある)今がチャンスです。
検索後の表示画面で「特徴的単語」という部分にもBulkfeedsで検索した単語にリンクを張るようにしたらどうでしょう?
てなわけなので対応しました。こんな感じ 抽出したキーワード1個1個に検索結果のリンクがつくようになります。
Bulkfeeds Similarity Search用Javascriptをちょっと変更(utf-8以外のサイト用)
BulkfeedsのSimilarity Search設定用のjavascriptの方法だとShift_JISのサイトでの表示にIEだと表示されていたがFirebirdだとちょっと文字化けしてしまったのでcharasetでの強引な表示にしたところIEでもFirebirdでも文字化けなしで設定できたのでこれにする。
これは oe パラメータをいれても Content-Type が charset=utf-8 なままのせいだと思います。script タグで charset をいれてもらえばとりあえず対策になりますが、サーバ側で oe パラメータによってきちんと charset を変更するようにしました。
similar.js にパラメータ noheader を追加しました。style=lite の場合に bulkfeedsSimilarityHeader を出力せず、代わりに bulkfeedsSimilarityFooter というセクションで "powered by Bulkfeeds" というリンク文字列をフッタ表示します。独自にブロックなどつくって入れている方はこちらの方が便利かもしれません。Demo Page にも UP してますので参考まで。
hail2u.net で公開されている blosxom 用プラグイン にリンクしました。
上級者用の javascript に記述していたパラメータ num を n に修正しました。
tDiary などの段落アンカーによる Blog ツールでの対応について追記しました。(現状ではサポート、推奨していません)
出力するHTMLのリンク target を指定するパラメータを新設しました。
変数名 num となっていたのを n に修正しました。
上級者向けのとこをコピペした方は修正おねがいします。すいません。
またまた script の上級者用にバグがありました。
MTPermalink の encode_url=1 とあるのは encode_url="1" です。クォートが必要です。
js ファイルはどのように生成されているか、負荷はどの程度かについての解説を追加しました。
Posted by: miyagawa on February 6, 2004 11:50 AMはじめまして。とても便利な機能なので試しに導入させていただきました。
HTMLの仕様としては推奨されていないようですが、.jsで出力されるaタグ内のtarget属性を指定できるようにできないでしょうか。
別ウインドウで開くようにしたいということです。
ぜひご検討をお願いします。
cabさん
なるほどフレームとか使ってる場合はもんだいになるかもしれませんね。検討します。
結城です。試しにhttp://www.textfile.org/のエントリにSimilarity Searchを導入してみました。かっこいいですね。でも、Bulkfeedsへの負荷は大丈夫なのでしょうか…。
Posted by: 結城浩 on February 8, 2004 12:05 AM結城さん
導入どうもです。
動的生成は1回目だけなので負荷的にはまだ大丈夫だとおもいます。
やばくなったら会社に頼りますか ;-)
のらさん
たぶんキャッシュのせいですねえ。
js は負荷下げるために3時間ぐらいDBみないでそのまま吐いてるんすよ。
cabさんと同じく、link targetを指定できるようにして頂けると助かります。
Posted by: I'kyu on February 16, 2004 01:17 PM初めまして。自分のblogに導入させていただきました。記事を書くのが楽しくなりそうです。感謝。
Posted by: tranquillity on February 24, 2004 09:00 PMtarget属性指定に対応して頂いてたんですね。ありがとうございます。
早速対応させました。
あらら、Trackbackが重複してしまいました。スイマセン。
ところで、jsで吐き出しているのですが、Sort byの指定ができるとウレシイです。ぜひご検討を。
はじめまして。
Similarity Searchを使わせていただきました。
負荷になるようならやめます、大丈夫でしょうか?
learning...
Similarity Searchの「形態素解析の結果で得られる特徴的単語」を取得するようなインタフェースって検討されてませんでしょうか?
例えば、それがJavaScriptで取ってこれれば、GoogleのWebSearchの検索ボックスにその「特徴的単語」を突っ込ませたりできないかなーと思ったもので…。これがあれば、そのエントリ見ている人が、Similarity Searchが挙げてくれる他の類似エントリ以外に、簡単にGoogleの検索結果に飛べるんじゃないかなーと思ったもので…(検索ボックスから余分な単語を削ったりする必要はありますけど)。
Posted by: mya on June 21, 2004 07:55 PMSimilarity Search ですが、コレってblogのエントリ自体のタイトルって見てないのでしょうか?
先日ウチのblogからも利用させて頂くようにしてみたのですが、どうもエントリ内の本文だけを見ているような感じで、検索結果が妙にトンチンカンになってしまいます。
例えばFirefoxのweb検索枠についてのエントリを上げたのですが、
http://n-yoshi.jugem.jp/?eid=477
本文中には「Firefox」という文言が一度しか出てこないため頻出する「枠」という文言が特徴としてとらえられ、結果、プロ野球のドラフト関連エントリ(ドラフト「枠」)が引っかかってきてしまいます。
似たような不具合はあちこちの検索システムで見受けられると思いますが、ココで一番最初に見て欲しいのはまずタイトルであり、その次に本文中の文言でタイトルと同じ文言があればソレをより重み付けされた特徴として、最後に本文を浚って特徴の絞り込み、と云う感じにする必要があるのではないか、と。
と云うことで、特徴判断のアルゴリズムについて、再考願います。
(なんてー要望、ココに書いて良いのかな?)
>document.location.href を使用する手もあります(その場合アクセス方法によってはうまく表示されない可能性があります)。
ということで、
location.hrefを使った場合のバージョンを作ってみました。
一応、#以降を取り除く処理をしてるので、大体の場合は大丈夫かと思います。
http://blog.livedoor.jp/walf443/archives/11218160.html
Posted by: ヴァルフ on December 26, 2004 12:19 AMbulkfeedsをいつも利用させて頂いています。
技術的解説の項目を読んでいて、一つ疑問に思った点があります。
MeCabなどよりkakasiの方がよい精度を示したので、分かち書きにkakasiを採用したそうですが、具体的にどのような点がkakasiの方がよかったのでしょうか?
もしよろしければ、お答え頂けると幸いです。