package nmzidx nmzidx::new($dir[, $mode]) $dir ... インデックスのあるディレクトリ。 $mode ... 'w'(書き出し)、'r'(読み出し) または 's' (検索) (省略時は 'r')。 'w' のとき、実際に open されるのは、一時ファイルである。 replace_db によって、インデックスに書き戻される。 mode を大文字にすると、lock ファイルを作る。 's' は、ほとんど 'r' と同じだが、検索に特化したオプションである。 単純に、シーケンシャルに読み出すのと、検索するのとでは、やりたい こと、できることに違いができるはずなので、今のうちから分けておく。 現時点で分かっている差異は、 NMZ.r は行ファイルであり、インデックスが無いので、seek できない。 -> 'r' では、NMZ.r も読む代わりに、seek はサポートしない -> 's' では、seek できる代わりに、NMZ.r は読まない 普通に読むだけならば、phrase のハッシュを計算することは無いのでは ないか。 -> 'r' では、ハッシュ用の seed を計算しない。 (ちょっとは速いかも。でも、たぶんほとんど変わらない) ただし、今のところ、サポートしない機能を使おうとしたときも、 特にエラー等は出さず、黙って誤動作する。 nmzidx::close lock ファイルを消去する nmzidx::open_field([$field]) field ファイルを open する。 nmzidx::open_flist NMZ.t, NMZ.r, NMZ.field.* を open し、nmzflist オブジェクトを返す nmzidx::open_word NMZ.i*, NMZ.w* を open し、nmzword オブジェクトを返す nmzidx::open_phrase NMZ.p* を open し、nmzphrase オブジェクトを返す nmzidx::replace_db write open した一時ファイルで実際のファイルを置き換える nmzidx::write_status NMZ.status, NMZ.head.* に、ファイル数、単語数を書く nmzidx::log_open([$tag]) NMZ.log を open し、$tag および時刻を書く。ファイルハンドルを返す nmzidx::log_close NMZ.log に perl version, system name, 実行時間を書き、close する package nmzfield nmzfield::new([$field]) $field が指定されていれば、open も呼び出す nmzfield::close nmzfield::open($field) NMZ.field.$field* を open する nmzfield::open_all NMZ.field.* を全て open する package nmzflist nmzflist::new (nmzidx::open_flist から呼ばれる) nmzflist::close nmzflist::read(\%list) 文書の情報を %$list に返す $list->{'t'} 時刻 $list->{'r'} ファイル名 %{$list->{'field'}} field 値 nmzflist::write(\%list) %$list の文書の情報を書き出す nmzflist::seek($offset[, $whence]) $offset, $whence で表される番号の文書情報へ seek する package nmzword nmzword::new (nmzidx::open_word から呼ばれる) nmzword::close nmzword::read(\$word, \%list) $$word に単語、%$list に [文書 -> スコア] を返す nmzword::write($word, \%list) $word に単語、%$list の [文書 -> スコア] を書き出す nmzword::seek($offset[, $whence]) $offset, $whence で表される番号の単語情報へ seek する nmzword::getword($number) $number 番目の単語を返す nmzword::wakati($keyword [, $opt]) $keyword を一回わかち書きし、($pre, $post) という形で返す。 $pre には、最長一致した語、$post には、残りの文字列を返す。 $post には、まだわかち書きの余地がある。 $keyword そのものがあった場合は、($keyword, '') が返り、 一文字も一致する語がなかった場合は、('', $keyword) が返る。 $opt に 'b' を入れると、1 バイト単位となる。デフォルトは、 EUC-JP を想定し、2 バイト単位。 nmzword::forward(\@list, $keyword) $keyword で始まる語を、@list に返す。 nmzword::search(\%list, $keyword) $keyword の検索結果を、%list に $list{文書番号} = スコア という形で返す package nmzphrase nmzphrase::new (nmzidx::open_word から呼ばれる) nmzphrase::close nmzphrase::read(\@list) @$list に文書のリストを返す nmzphrase::write(\@list) @$list の文書リストを書き出す nmzphrase::seek($offset[, $whence]) $offset, $whence で表される番号の phrase 情報へ seek する nmzphrase::search(\%list, $word1[, $word2]) $word1 $word2 というフレーズの検索結果を、%list に $list{文書番号} = スコア という形で返す