
まぁ、ブラウザの機能として付いてるかもしれないですが、試作・習作ということで作ってみました。
もちろんインストールが可能ですが、閲覧ページのキーワードインデックスを作るため、体感で分かるくらいFirefoxの動作が遅くなります。ご注意ください。
Search on the History(SorH) - search_on_the_history.user.js
機能
- about:blankページで履歴検索ができます
- http://から始まるページだけ検索可能です
Greasemonkeyスクリプト中でやってること
ページを閲覧すると、内蔵するはてなの公開した本文抽出Javascriptライブラリを利用してページの本文を抽出します。
Yahoo! JAPANの日本語形態素解析APIに本文を投げ、名詞だけを抽出します。
ページのURLをMD5でハッシュ化した値をキーに、タイトルや本文をGM_setValueで保存します。
併せて、上記形態素解析されたキーワードもMD5ハッシュ値をキーに、出現するページへのポインタやキーワードの出現回数と併せてGM_setValueで保存します。
この2つのキー・バリュー型のDBが検索用インデックスになります。
ちなみに、Greasemonkeyスクリプトから使えるGM_setValueとGM_getValueをキー・バリュー型DBとして使いやすくするライブラリを自作して使ってます。
about:blankページでは、簡単なフォームを用意して、履歴検索のためのキーワード入力を受け付けます。
入力されたキーワードを先ほどの検索用インデックスに問い合わせ、得られたページのリストをスコア順にソートして表示します。
このときのページスコアは、キーワードDBとページDBを元にtf-idf(文書内のキーワード種類数で正規化)を用いて計算しています。tf-idfはスクリプトの191行目くらいです。
まとめ
とりあえず、公開されているいろんなライブラリやWebAPIを利用すると、Greasemonkeyスクリプト(Javascript)だけでもおれおれ検索エンジンが作れてしまいました。
ただ、Gathering(ページをインデックス化する)時にブラウザが固まるほど処理が重たくなってしまっているので、パフォーマンスを改善することが次に必要かと思ってます。
また、Searching(検索)時も今は数十~数百ページからの検索なので比較的高速ですが、保持するページ数が増えたときにもパフォーマンスが悪化しそうな気がしています。
最後に
まとめの後になりましたが、このGreasemonkeyスクリプトでは下記のライブラリやWebAPIを利用させていただいています。本当にありがとうございます。