indexer.py
(インデックスの作成・追加)
selection.py
(検索)
merger.py
(インデックスの統合)
tools/sortbymtime.py
(ファイル名を日付順にソート)
tools/search.cgi
(検索用 CGI サンプル)
tools/dumpidx.py
(インデックスファイルの表示)
与えられた文書集合のためのインデックスを作成あるいは追加します。
注意:
indexer.py
は基本的な機能のみしかサポートしておらず、
文書集合 (Corpus) は FilesystemCorpus
に限定されており、
扱う文書の種類も 1つだけであると仮定しています。複数の文書や文字コードを扱いたい場合や、
ディレクトリツリー以外のものを文書集合として使用したい場合は、
API を使って Python プログラムを書く必要があります。
$ indexer.py [オプション] インデックス用ディレクトリ [ファイル名1 ファイル名2 ...]
ファイル名を省略した場合、標準入力から与えられたファイル名の一覧 (1行に1ファイル名) を使用します。
-F
-N
-R
indexer.py
はインデックスの更新時刻
(= インデックスファイルのうち最後のものが更新された時刻) よりも新しいファイルのみをインデックスします。
-F
(force) オプションを与えると、ファイルの更新時刻にかかわらず、指定された
文書すべてをインデックスに追加しますが、これはすでにインデックスされている文書を
2重にインデックスしてしまう可能性があります。-N
(new) オプションはまだ
インデックスされていない文書のみをインデックスします。
-R
(reset) オプションは既存のインデックスを無視し、
すべての文書をゼロからインデックスします。
-b basedir
-t doctype
PlainTextDocument
(テキスト形式)
HTMLDocument
(HTML形式)
SourceCodeDocument
(プログラムのソースコードなど)
EMailDocument
(RFC 2822形式)
-p prefix
idx
) を指定します。
これはアルファベット 3文字である必要があります。
-e encoding
locale.getdefaultlocale()
の値) を指定します。
-D maxdocs
2000
) を指定します。
これ以上の文書は次のインデックスファイルに持ち越されます。
0 を指定すると制限はなくなります。
-T maxterms
50000
) を指定します。
単語数がこれ以上になると、たとえ文書数が少なくても次の文書は自動的に
次のインデックスファイルに持ち越されます。
0 を指定すると制限はなくなります。
-Y
与えられた文書集合から文字列を検索・表示します。
注意:
selection.py
は基本的な機能のみしかサポートしておらず、
文書集合 (Corpus) は FilesystemCorpus
に限定されており、
扱う文書の種類も 1つだけであると仮定しています。これ以外の文書集合を扱いたい場合は、
API を使って Python プログラムを書く必要があります。
$ selection.py [-c 中間結果ファイル] [オプション] インデックス用ディレクトリ [キーワード1 キーワード2 ...]
または
$ selection.py -c 中間結果ファイル
1番目の形式で 中間結果ファイル を指定すると、 途中結果を指定されたファイルに pickle 保存し、 2番目の形式で途中から表示を再開させることができます。 (これは「次の 10件」などの表示に使います)
-b basedir
-t doctype
-p prefix
xxxNNNNN.cdb
"
という形式のファイル名をもつすべてのインデックスファイルを対象とします。
-e encoding
locale.getdefaultlocale()
の値) を指定します。
-s
Predicate
のかわりに StrictPredicate
を使用します。
-n results
-S
-D
注意: インデックス後に元の文書を更新すると 文書内の単語の位置がズレてしまうため、正しく文字列を発見できない (あるいは snippet が文字化けする) 可能性があります。
-T timeout
-T
オプションを与えると検索にかかった時間が (まじめに) 表示されます。
-Y
indexer.py
に -Y オプションを
つけてインデックスした場合のみ) 有効です。
このオプションをつけた場合、検索文字列はローマ字あるいはひらがなで
与えることができます。
複数のインデックスファイルを統合します。
与えられたインデックス用ディレクトリの .cdb
ファイルを
順に検査していき、まとめられるファイルをすべてまとめた新しいインデックスファイルを作ります。
古いインデックスファイルは拡張子 .bak
をつけて残されます。
(これらは rm
してかまいません。)
なお、インデックスファイルの統合中にも検索はできますが、 インデックスファイルの統合と追加を同時に行わないでください。
$ merger.py [オプション] インデックス用ディレクトリ
-p prefix
idx
) を指定します。
これはアルファベット 3文字である必要があります。
-D maxdocs
2000
) を指定します。
これ以上の文書は次のインデックスファイルに持ち越されます。
0 を指定すると制限はなくなります。
-T maxterms
50000
) を指定します。
単語数がこれ以上になると、たとえ文書数が少なくても次の文書は自動的に
次のインデックスファイルに持ち越されます。
0 を指定すると制限はなくなります。
与えられたファイル名一覧を古い順に (= 新しいファイルが最後にくるように) 並べ換えて表示します。
これは find
などの結果を日付順で indexer.py
に渡すときに使います。
$ sortbymtime.py [ファイル名1 ファイル名2 ...]
ファイル名を省略した場合、標準入力から与えられたファイル名の一覧 (1行に1ファイル名) を使用します。
これは Fooling を使った検索用 CGI のサンプルです。
SearchApp
クラスを適当に変更してお使いください。
とくに変更する必要がある部分はクラス変数 TITLE
と CORPUS
です。
TITLE
には検索ページのタイトルを指定します。
CORPUS
は文書集合のマッピングで、
記号 (URL中のパラメータ c
の値) と
文書集合の名前、文書ディレクトリ、文書の種類 (Pythonクラス)、
およびリンク用の基底URLを指定します。
TITLE = 'タイトル文字列' CORPUS = { '記号': (u'名前', '文書ディレクトリ', 種類, 'リンク用の基底URL'), ... }
なお、文書ディレクトリ中には、元の文書本体が doc/
というサブディレクトリに、
そのインデックスファイルが idx/
というサブディレクトリに
それぞれ格納されていると仮定しています。たとえば文書ディレクトリが /www/python
なら、
/www/python/doc
以下
/www/python/idx
以下
以下のパラメータは CGI による負荷を制限するために調整してください。
MAX_QUERY_CHARS = フォームに入力できる最大文字数 MAX_QUERY_PREDS = 検索条件の最大数 TIMEOUT = 検索のタイムアウト秒数
指定されたインデックスファイル (.cdb ファイル) を可読形式で表示します。 これはデバッグ用です。
$ dumpidx.py [ファイル名1 ファイル名2 ...]