Namazu-win32-users-ja(旧)


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

Re: ole Option



白井です。

ちょっと長いメールになってしまいましたが、無用の混乱を避けるため
に丁寧に書きました。:-)

From: U86128@xxxxxxxxxxxxxxxxx さん曰く
Subject: [namazu-win32-users-ja] Re:ole Option
Message-ID: <200003071052135152.076@xxxxxxxxxxxxxxxxx>
Date: Tue, 7 Mar 2000 10:52:12 +0900

上口> >上口> 		"|.*\\.ppt" .
上口> >		"|.*\\.ppt";
上口> >
上口> >だとどうですか。
上口> 
上口> 結果に変化はありませんでした。

上口> ># もし、上口さんのかかれたままだと Perl の代入文になっていないの
上口> ># で。。。試したのですが、エラーにはならないで、default 設定を使
上口> ># うようです。
上口> 
上口> =	" 間にスペースが無いとのご指摘ですね。

違います。最後が『 ; ではない』という点を書いたつもりでした。

上口> この場合 default を触ってる(\namazu\etc\namazu\mknmzrc)と
上口> 誤動作の原因になるという事でしょうか

ごめんなさい、説明不足でした。mknmz の default の値は
'/namazu/share/pl/conf.pl' にあります。
'/namazu/etc/namazu/mknmzrc' などは、この default 値を変更したい
ときに使います。

## だからもともと mknmzrc は全部 comment out されているのです。

上口> >こちらは、--ole(-o) option が無いから、pdf 以外の挙動は納得でき
上口> >ます。pdf が無視されるのは
上口> 
上口> 広瀬さんから、以下のように -a は万能とご指摘があったのですが、どちらが
上口> namazu の仕様としては正しいのでしょうか!?
上口> <広瀬さん>mknmz --help を見て頂ければ判ると思いますが、 -a は全ての
上口> <広瀬さん>データをインデックスの対象とするという option です。

% perl /namazu/bin/mknmz --help

対象ファイル:
  -a, --all  ((白井補填)$ALLOW_FILE を無視して)すべてのファイルを対象とする
  -o, --ole  OLEの文書フィルタを用いる (Windows環境のみ)

ということですので、--all と --ole はまったく意味が違うオプショ
ンです。

広瀬> mknmz --help を見て頂ければ判ると思いますが、 -a は全ての
広瀬> データをインデックスの対象とするという option です。

● --all をつけなければ、$ALLOW_FILE で設定した file だけ対象
● --ole をつければ、Win32::OLE が動く。ただし、--all が無ければ
 $ALLOW_FILE で設定されたファイルのみ対象とする。
● --all と --ole をつければ、すべてのファイルを対象にし、なおか
 つ、Win32::OLE フィルタも働く。

ということなので、広瀬さんと私の言っていることは矛盾していませ
ん。そのため、私は $ALLOW_FILE の設定が間違っていないかなと感じ
ました。

試してみると、

% ls -la ../TEST
total 87
drwxr-xr-x   2 shirai   rd3             0 Mar  7 11:50 .
drwxr-xr-x  16 shirai   rd3             0 Mar  7 11:50 ..
-rw-r--r--   1 shirai   rd3          6144 Feb 28 16:01 taro4.jsw
-rw-r--r--   1 shirai   rd3          4608 Feb 28 16:01 taro5.jaw
-rw-r--r--   1 shirai   rd3          6144 Feb 28 14:26 taro6.jbw
-rw-r--r--   1 shirai   rd3         95232 Aug 20  1999 zzz.doc
-rw-r--r--   1 shirai   rd3         13198 Mar  6 18:59 zzz.pdf
-rw-r--r--   1 shirai   rd3         17920 Mar  6 19:17 zzz.ppt
-rw-r--r--   1 shirai   rd3         29184 Mar  6 18:21 zzz.xls

# 以下、エラー無視 :-)

% perl /namazu/bin/mknmz --ole ../TEST
5個のファイルがインデックス作成の対象として見つかりました
1/5 - /c|/tmp/TEST/taro4.jsw [application/ichitaro4]
2/5 - /c|/tmp/TEST/taro5.jaw [application/ichitaro5]
3/5 - /c|/tmp/TEST/taro6.jbw [application/ichitaro6]
4/5 - /c|/tmp/TEST/zzz.doc [application/msword]
5/5 - /c|/tmp/TEST/zzz.pdf [application/pdf]

ここで、
/namazu/etc/namazu/mknmzrc を以下のように変えて、INDEX を一回消す。

$ALLOW_FILE =	".*\\.(?:$HTML_SUFFIX)|.*\\.txt" .
		"|.*\\.gz|.*\\.Z|.*\\.bz2" .
		"|.*\\.pdf|.*\\.doc|.*\\.tex" .
		"|.*\\.ppt|.*\\.xls" .
		"|.*\\.j[sab]w" . 
		"|\\d+|[-\\w]+\\.[1-9n]";

% perl /namazu/bin/mknmz --ole ../TEST
7個のファイルがインデックス作成の対象として見つかりました
1/7 - /c|/tmp/TEST/taro4.jsw [application/ichitaro4]
2/7 - /c|/tmp/TEST/taro5.jaw [application/ichitaro5]
3/7 - /c|/tmp/TEST/taro6.jbw [application/ichitaro6]
4/7 - /c|/tmp/TEST/zzz.doc [application/msword]
5/7 - /c|/tmp/TEST/zzz.pdf [application/pdf]
6/7 - /c|/tmp/TEST/zzz.ppt [application/msword]
7/7 - /c|/tmp/TEST/zzz.xls [application/powerpoint]

となります。

上口> >上口> さっそく xpdf-0.90-win32 より pdftotext を追加し
上口> >pdftotext.exe に path が通っていないということは無いでしょうか?
上口> 
上口> 2つの質問が入り混じってすみませんが、
上口> pdftotext は \namazu\bin\pdftotext として存在し、単独コマンドとして
上口> 利用しています。

もしかして、namazu が ある drive と mknmz を実行する drive が違
うということは無いでしょうか? もし、そうなら、

/namazu/share/namazu/pl/util.pl の 161 行目付近の checkcmd を

sub checkcmd ($) {
    my $cmd = shift;
    my $pd = ':';
    $pd = ';' if (($^O eq "MSWin32") || ($^O eq "os2"));

    for my $dir (split(/$pd/, $ENV{'PATH'})) {
	return "$dir/$cmd" if (-x "$dir/$cmd");
	return "$dir/$cmd.com" if (-x "$dir/$cmd.com" &&
		(($mknmz::SYSTEM eq "MSWin32") || ($mknmz::SYSTEM eq "os2")));
	return "$dir/$cmd.exe" if (-x "$dir/$cmd.exe" &&
		(($mknmz::SYSTEM eq "MSWin32") || ($mknmz::SYSTEM eq "os2")));
	return "$dir/$cmd.bat" if (-x "$dir/$cmd.bat" &&
				   ($mknmz::SYSTEM eq "MSWin32"));
	return "$dir/$cmd.cmd" if (-x "$dir/$cmd.cmd" &&
				   ($mknmz::SYSTEM eq "os2"));
    }
    return undef;
}

で置き換えて試してみて下さい。

# 既知のバグなので次のバージョンで直ります。

上口> >こちらは、きっと '--all --ole' と二つ書けば大丈夫なのではないで
上口> >しょうか。
上口> 
上口> むむっ。結局 -a -o の2つのオプションが必要!?

対象 directory にゴミがなければ、それが一番簡単だと思います。
$ALLOW_FILE を使っても大丈夫です。

上口> ここで実験です。対象ディレクトリ中に、doc,xls,ppt,pdf を1ファイル用意して
上口> mknmz -a -o -O にて各文章のタイトル無でテストするとエラーが発生しましたが
上口> doc.xls.ppt は対象ファイルとなりました。
上口> しかし ppt については文字化けが発生しており、xls に関してはキーワードがありません。
上口> 詳しくは wdnmz に代わるコマンド知らないので解りませんが。。。

NMZ.w を直接見れば、とりあえずなにが keyword になっているかわか
ります。ただし、EUC-JP で書かれています。
また、mknmz に --debug を追加すると stderr に大量に途中経過が出
ます。(こちらも stderr の内容は EUC-JP ですが、見ると勉強になり
ます :-)

上口> 1/1 - /e|/www/trip/test_xls.xls Oops, cannot start PowerPoint at C:/namazu/share/namazu/filter/olepowerpoint.pl line 151.
上口> となります。(Oops って洒落たエラーだ)
                    ~~~~ たしかに。^^;;;

上口> ># ただし、私の環境では excel と powertpoint は Win32::OLE がエラー
上口> ># しまくるので動作しませんけど。。。
上口> 
上口> 私も以下のエラーが大量生産されています。

私も同じエラーですね。

上口> ># File-MMagic が MS-Office の file type を誤判別するしね。
上口> ># MS の作る file の Magic Number って 100% 判定するのは無理なん
上口> ># じゃないかなぁ、と思っています。Win32::OLE のときは、気持悪い
上口> ># けど '拡張子' で判別なのかなぁ。
上口> 
上口> 私は、以前namazu1.3.0.11 で ML #1111 #1114 #503 を参考に全文検索を
上口> やっておりましたが、キーワードの強調表示がほしいだけで 
上口> 2.0 化を試みていますが、まいりました。。

う〜む、Win32::OLE って昨日初めて使ったので、このあたりはまった
く疎いのです。MS-Office に関連する話は追いかけてもいませんでした。^^;

# できればかかわりたくなかったぐらい。^^;;;

現状では、OLE Filter は MS-Word 以外向け以外はきちんと動いていな
い、ということだと思います。

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxxxxxxxxxx)