例文検索システム(お試し版)のメモ

大量のテキストファイルから特定のフレーズを含む文を検索するシステムです.Python の勉強が目的だったのか,システムの開発が目的だったのか,今となっては思い出せません.:D

ブラウザからクエリの登録をしておいて,検索が完了したら結果をダウンロードできるようになるというシステムです.検索手法は,先頭から順にパターンマッチングするのみです.一応,複数のクエリをまとめて検索するようになっているので,山手線方式といえるでしょうか.

手元の環境では,300GB くらいのテキストファイルを 200-300MB ずつに分割して圧縮しておき,それらを対象に検索できるようにしてあります.実装がイマイチなので,あまり速度が出ません.

  • 使い方
    • アーカイブの展開
      • hasu.tar.gz を展開します.
    • トライ用ライブラリ(SWIG)の構築
      • ディレクトリ hasu/script に移動して make します.
      • SWIG をインストールしておく必要があります.
    • 設定の変更
      • Config.py の HOME_DIR を設定します.HOME_DIR/SOURCE_DIR が検索対象の格納ディレクトリ,HOME_DIR/RESULT_DIR が検索結果の格納ディレクトリになります.また,検索プロセスは実行状況を HOME_DIR/job_list.xml と HOME_DIR/source_list.xml に出力します.
      • インタフェースとして HTTP を使うため,例えば Apache2 がアクセスできるようにファイルやディレクトリのアクセス権限を設定する必要があります.HOME_DIR/job_list.xml については,書き込みもおこなうため,ご注意ください.
      • 他にも設定できる項目があります.詳細は Config.py をご覧ください.
    • 検索対象の用意
      • HOME_DIR/SOURCE_DIR に検索対象となるファイルを入れるか,HOME_DIR/SOURCE_DIR を検索対象が格納されているディレクトリへのシンボリック・リンクにしてください.
    • 検索結果用ディレクトリの作成
      • HOME_DIR/SOURCE_DIR を作成してください.
      • 別のユーザで検索プロセスを実行する場合,検索プロセスが書き込めるように,ディレクトリのアクセス権限を設定する必要があるかもしれません.
    • HTTP サーバの設定
      • hasu/script 内の index.py, search.py, insert.py, delete.py が CGI プログラムになっています.ブラウザから操作できるように,HTTP サーバを設定します.
      • 一例として,Ubuntu server 9.04 の Apache2 では,/etc/apache2/sites-available/default に /cgi-bin/ の項目を真似して新しい項目を追加してやれば動きました.

ScriptAlias /hasu/ /home/hasu/script/

AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all

    • 検索用プロセスの実行
      • hasu/script/Main.py を実行します.

python hasu/script/Main.py

以下,余談です.

せっかく大規模コーパスがあるのに,あまり使われていなくて勿体ないという理由で着手しました(今でもほとんど使われていませんが…).コーパスを圧縮したままで検索できて索引も必要ないので,使うのは楽です.

ローカルにデータが展開されていれば grep するだけの話なのですが,研究室のメンバに割り当てられている PC のディスク容量が小さすぎて無理という問題があるため,サーバとして動くようにという話になり,文単位でとにかく大量の事例を返せばよいということで,Solr のような検索システムを投入するのも無駄な気がすると思い,云々….最終的に,簡単に実装できて使えないこともない現在の方式に落ち着きました.