namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

pnamazu.cgi-98.10.01



古川です。

>> On Tue, 29 Sep 1998 22:35:01 +0900, mithara <mithara@xxxxxxxxxxxxxxxx> said:
  > 1.namazu 1.2.0.8-beta-6 for win32 パッケージで、日本語ディレクトリ内
  > の1140ファイル(ほとんど日本語ファイル名)についてインデックス化、
  > namazu perl版(8月31日版)で検索してみました。

perl 版をお使いいただき、光栄に思っております。今回の、一連の話題では、
全くお役に立てませんで、申しわけありませんでしたが、今後とも、どうぞ
よろしくお願い致します。


perl 版検索クライアントを、別便にて高林さんに送ります。

#       '+': 新規仕様
#       '?': 試験的仕様
#       '-': 仕様の削除
#       '*': 本体以外の仕様
#       '!': 修正
# 98.10.01
#   + field 検索に対応                                                [*1]
#   * データベースファイルを、テキストファイルと相互変換する
#     サブルーチン群 nmztxt.pl を作った                               [*2]
#   * nmztxt.pl を使ったサンプルとして、データベースのゴミ掃除をする
#     スクリプト gcnmz.pl を添付 (v1.3.* 以降用)
#   + 正規表現の変換処理を、かなりマシにした                          [*3]
#   - 正規表現検索に NMZ.(m|s)i? を使うのをやめた
#   + NMZ.w が無くても、正規表現/後方/中間一致検索ができるようになった
#     (NMZ.i, NMZ.ii を使う -> ただし、遅い)
#   ! 環境変数 NAMAZUCONF & NAMAZUCONFPATH を読んでいなかったのを修正
#   + POST Method でも検索できるようにした
#   ! 初期状態でリモートアクセスを無効にしたつもりが、なっていなかった。
#     ($RemoteEnable という変数は用意していたが、用意しただけだった)
#   - kakasi を呼ぶのをやめた (常に内蔵のわかち書きを使う)

[*1]
field 検索のときに、score が -1 になるのは、バグではなくて仕様です。

[*2]
データベースはバイナリファイルなので、下手にいじると、位置が変わって、
おかしなことになります。

よって、ユーザがデータベースを加工したいと思っても、簡単にはできません。

それで、高林さんが、clnmz のようなツールを作っているわけですが、いろいろ
なユーザの多様な要望に、高林さん一人で応えるわけにはいきませんし、もしや
るとしても、いちいち専用のツールを作っていると大変です。ここで、

    (1) まずテキストに変換して
    (2) それを加工して
    (3) データベースを構築し直す

という手順を踏むことにして、(1) と (3) が用意されていれば、(2) は、利用
者が勝手に作ることができるようになります。

そこで、データベースをテキストと双方向変換するサブルーチン群 nmztxt.pl 
というものを作ってみました。用意しているのは、

    (1) ファイル系データベースとテキストの双方向変換
            NMZ.r, NMZ.f, NMZ.fi <-> テキスト
        
    (2) 単語系データベースとテキストの双方向変換
            NMZ.i, NMZ.ii -> テキスト
            テキスト -> NMZ.h, NMZ.i, NMZ.ii, NMZ.w

    (3) フレーズデータベースとテキストの双方向変換
            NMZ.p, NMZ.pi <-> テキスト

    (4) 加工結果のファイル数、単語数を NMZ.head* に反映
    (5) NMZ.t から、無効なデータのリストを取り出す

などです。


また、これを使ったサンプルとして、v1.3.0 で導入された、インデックスの削
除/更新による、無効なデータのゴミ掃除をするスクリプト gcnmz.pl というも
のを作ってみました。

本当は、データベースを読みながら処理をして、その場で書き出した方が速い
のですが、速度よりも、汎用性を考えて、いったんテキストに落とすようにな
っています。速度と汎用性を両立できる、もう少しいい方法があれば、考えた
いと思います。


<注意> これを使ってみよう、という奇特な方へ!
        まだ作ったばかりで、実績が十分とは言えませんし、バグがあると、
        データベースが壊れかねない、危険な処理ですから、バックアップを
        とってから使うことをお勧めします。
        (いちおう、nmztxt.pl でも '.BAK' で元のを残すようにはしてあります)
        また、この他に、あると嬉しい機能などありましたら、お知らせ下さい。


[*3]
jperl でない正規表現を使って日本語の正規表現検索をするのにあたり、今ま
では
        /[ア-オ]/ 

のようなパターンを

        /(\xa5[\x22-\x2a])/

に変換し、検索対象の文字列は、

        s/([\xa1-\xfe])(.)/$1 . chr(0x7f & ord $2)/ge

とやってから検索する、という処理をしてきましたが、これだと、2 バイト文
字と 1 バイト文字が混在したものには使えませんでしたので、フィールド検索
で正規表現を使えるようにするのにあたり、この変換処理を見直し、パターン
を

        /(\xff\xa5[\xa2\xaa])/

のように変換し、検索対象の文字列は

        s/[\xa1-\xfe]./\xff$&/g

とやってから検索するようにしました。

相変わらず、$1, $2, ... や \1, \2, ... は使えませんが、他のシーケンス
は使えます (たぶん)。また、
        \H ひらがな
        \K カタカナ
        \J 漢字
というシーケンスを (必要かどうかは不明ですが) 使えるようにしてみました。

-- 

                                        ヤマハ(株)ピアノプレーヤ設計課
                                                              古川 令
                                             furukawa@xxxxxxxxxxxxxxxx