Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
redesigning mknmz
- From: Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx>
- Date: Sat, 08 Apr 2000 20:33:15 +0900
- X-ml-name: namazu-devel-ja
- X-mail-count: 00345
気が向いたので mknmz --help をもとに mknmzの再設計を検討しま
した。言語は perl を想定していますが、設計そのものは他の言語
にも通用すると思います。
| 対象ファイル:
| -a, --all すべてのファイルを対象とする
| -t, --media-type=MTYPE 対象ファイルの文書形式を指定する
| -h, --mailnews --media-type='message/rfc822' と同じ
| --mhonarc --media-type='text/html; x-type=mhonarc' と同じ
| -F, --target-list=FILE インデックス対象のファイルのリストを読み込む
| --allow=PATTERN 対象とするファイル名の正規表現を指定する
| --deny=PATTERN 拒絶するファイル名の正規表現を指定する
| --exclude=PATTERN 除外するパス名の正規表現を指定する
| -e, --robots 次の記述を含む HTMLファイルを除外する
| <meta name=\"ROBOTS\" content=\"NOINDEX\">
| -M, --meta HTMLの metaタグをフィールド指定検索に用いる
| -r, --replace=CODE URIを置換するためのコードを指定する
| --html-split HTMLファイルを <a name=\"...\"> 単位で分割処理する
| --mtime=INT 変更日制限 find(1) の-mtime と同じ規則
| 例:-50 で50 日以内、+50 で50 日より古いものだけ
対象ファイルを見つける部品は File::Find を所有するクラス
Namazu::Find に分解するといいと思います。
| 形態素解析:
| -c, --use-chasen 日本語の単語のわかち書きにChaSen を用いる
| -k, --use-kakasi 日本語の単語のわかち書きにKAKASI を用いる
| -m, --use-chasen-noun 名詞のみを抽出する
わかち書き処理のモジュール化は野首さんに期待。 :-)
Text::Splitter があると便利そう。
| 文字列処理:
| -E, --no-edge-symbol 単語の両端の記号は削除する
| -G, --no-okurigana 送り仮名を削除する
| -H, --no-hiragana 平仮名のみの単語は登録しない
| -K, --no-symbol 記号をすべて削除する
文字列の処理は Namazu::Lex クラスにまとめるといいかな。フィ
ルタ類は Namazu::Filter に。
| 要約:
| -U, --no-encode-uri URIのencodeを行わない
| -x, --no-heading-summary HTML のヘディングによる要約作成を行わない
要約は Namazu::Summary (has a HTML::Summary) かな。
| インデックス作成:
| --update=INDEX 更新するインデックスを指定する
| -Y, --no-delete 削除された文書の検出を行わない
| -Z, --no-update 文書の更新・削除を反映しない
インデックス作成のためには、まずインデックスを表現する
Namazu::Index クラスが必要です。また、文書を表現するクラスと
して Namazu::Document が欲しいです。
Namazu::Document は Namazu::Lex と Namazu::Filter を使って自
分自身の面倒をみます。
その上で、 Namazu::Index と Namazu::Document を使ってインデッ
クス作成をしてくれるクラス Namazu::Indexer があるといいと思
います。
複数のインデックスをマージする仕事は Namazu::IndexMerger ク
ラスに任せます。
現在は、$ON_MEMORY_MAX の単位で作業ファイルを作りながら 1つ
のインデックスを大きくしていますが、新しい設計では、
$ON_MEMORY_MAX の単位で小さなインデックスを作成して、最後に
Namazu::IndexMerger にマージしてもらう、という方針がいいでしょ
う。
| その他:
| -s, --checkpoint チェックポイント機構を作動させる
mknmz を Namazu::Mknmz クラスとして表現します。re-exec 時に
は Data::Dumper を使って内部状態をファイルに書き出せばいいと
思います。--checkpoint オプションを廃止して、常に re-exec す
る仕様にした方がいいかもしれません。
| -C, --show-config 現在の設定を表示する
| -f, --config=FILE 設定ファイルを指定する
| -I, --include=FILE カスタマイズ用ファイルを読み込む
| -O, --output-dir=DIR インデックスの出力先を指定する
| -T, --template-dir=DIR NMZ.{head,foot,body}.* のディレクトリを指定する
| -q, --quiet インデックス処理の最中にメッセージを表示しない
| -v, --version ヴァージョンを表示する
| -V, --verbose 口やかましいモード
| --debug デバッグモード
| --help このヘルプを表示する
こういったユーザインターフェイスに関する細かい処理は
Namazu::Mknmz に任せます。他のクラスは自分の単純な仕事に専念
します。
Namazu::Mknmz は複数の Namazu::Indexer に仕事を割り振って、
それらを並列に働かせる能力を持っているといいと思います。並列
処理の実装は perl のスレッド機能か、単純なfork & exec のどち
らかを選びます。--checkpoint を考えると後者の方が楽そうです。
C で mknmz を完全に書き直すのは大変なので、高速な処理が必要
なクラス (たとえば Namazu::Index, Namazu::Lex) だけを Cのラ
イブラリとして書く、という方針がいいかもしれません。
…以上、おおまかですが、たたき台として再設計の案をまとめまし
た。オブジェクト指向の設計に不馴れなので、こなれていない部分
があると思います。ご意見ください。
# こういった話を 4月18 日にできるといいですね
p.s.
だんだん perl が嫌になってきました。オブジェクト指向の設計で
書き直すなら別の言語を選択した方がいいかもしれません。
-- Satoru Takabayashi