[Namazu-devel-ja 777] Re: File::MMagic::checktype_data

Tadamasa Teranishi yw3t-trns @ asahi-net.or.jp
2005年 12月 16日 (金) 21:18:41 JST


寺西です。

HDDクラッシュのため、返事が遅くなりました。
しかも秘密鍵もその中に。どっかにバックアップはあるはずだが...。
2.0.15リリースのためのメモ書き資料もすべてそのHDDに...。
とてもヘコんでます。(>_<)

Yukio USUDA wrote:
> 
> > 単純に sort の部分をコメントアウトしない修正版と修正前で比較しても
> > 簡単に判断できるかもしれません。
...
> my $token = '(' . (join '|', @{$self->{SPECIALS}->{$type}}) . ')';
> としても数%の違いしかありませんでした

これはこっちでも確かめたのですが、sort はそうコストはかかって
いないようでした。
確かQソートなので、n の数が小さいと係数が大きい分不利かとは
思いましたが、全体から見ると全然小さかったようです。

> また、以前寺西さんが試した際に addSpecials 時に sort 結果を作成して
> おいても数%の差しかなかったということから '|' による選択パターンが
> 重い処理なのだと思います。

のようです。

> これも最初にマッチングした位置であれば
> m/(aa|bb|cc)/m;
> で良いと思えますが、gをとると make test に失敗しますし、
> g をとっても数%しか速度が変わりませんでした。

これは g をとると pos が使えないからですね。
 
> 元になったとされる file.kulp を見るとマッチしたら即確定となっている
> ので判定条件については File::MMagic オリジナルの考え方のようです

なるほど。

「最後にマッチした部分がファイル先頭に近い部分のものを採用」という
ことではないですし、「パターンにマッチした回数が多いものを採用」
というわけではないので、

+               while ($data =~ /$token/mg) {
+                   $count++;
+               }

ループを回さず、最初に見つけたところの pos を記憶して、
もっとも小さな値を採用すれば、より高速で現在と互換性のある
ものができるでしょう。
ただし、regex依存ならプログラムを複雑化するだけなので、
修正が適しているかどうかは微妙ですね。

> > できるだけファイルの先頭の情報で判断できるものを優先するということ
> > でしょうか。
> > テキストの判定用のようですし、先頭のヘッダ情報で判定しないと、
> > 本文中のテキストで判断してはまずいからかな???
> >
> File::MMagic::checktype_data はテキスト判定用です。
> ヘッダで判定するためには magic で判定する別ルーチンがあります。

いや、ここでヘッダとはメールのヘッダ行のようなものを指した
つもりです。
まぁ、HTML でも最初の方のBODYより前の部分とかも、同様にヘッダ
と指していると思っていただいてもいいです。
とにかくテキストでもプレーンテキスト以外なら、何かしら先頭部分に
ヘッダー情報があるものです。
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E




Namazu-devel-ja メーリングリストの案内