Namazu-win32-users-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: インデックス作成時のエラーその後
- From: "Yoshinori.TAKESAKO" <takesako@xxxxxxxxx>
- Date: Wed, 24 Jan 2001 08:18:29 +0900
- X-ml-name: namazu-win32-users-ja
- X-mail-count: 00622
竹迫です。
池浦さん、ご報告どうもありがとうございます。
Subject: [namazu-win32-users-ja] インデックス作成時のエラーその後
From: <sikeura_BGY@xxxxxxxxxxxxxxxxxxxxxxxxxx> said:
> 竹迫さんの修正が加わったkakasi-2.3.3をcygwinでコンパイルして
>メール:kakasi -w cr_eat_mode bug? に添付のfailed.txtや当方の問題の
>テキストファイルで
> kakasi -w < failed.txt
>を行うとkakasi単体は正常に終了するようになりました。しかしこのテキスト
>ファイルを
> C:\>perl c:\namazu\bin\mknmz -U -O d:\index d:\test
> ※d:\testに問題のテキストファイルを入れています。
>とすると以前と同様perlがハングする状態のままでした。ちなみに同じことを
>failed.txtでやるとmknmzは正常に終了します。そこでPerlをデバックモードに
>してmknmzを追っかけていくと、wakati.pl中のwakatize_japanese_subで71行目の
> $str = Text::Kakasi::do_kakasi($$content);
>でハングしているような感じでした。まだどこかでオーバーフローしている
>モジュールがあるのでしょうか?
Namazu version 2.0 以降からは、mknmz のインデックス処理の分かち書きを
Text::Kakasi モジュールをデフォルトで使用するようになっています。
・Text-Kakasi-1.04.tar.gz の入手先
http://www.daionet.gr.jp/~knok/kakasi/
これをコンパイルしてPerlにインストールする必要があるのですが、
Win32版の ActivePerl だったら、Microsoft Visual C++ がないと
コンパイルは難しいと思います。
# cygwin の gcc では、多分無理だと思います。
次の version の Namazu のリリースまで待つというのも何ですので、
ちょっと効率は悪くなりますが、Perlモジュールでなくプロセス経由で
kakasi を利用するという手もありますので紹介しておきます。
具体的な方法としては、
(1) \namazu\share\namazu\pl\conf.pl ファイル中の、
$KAKASI = "module_kakasi -ieuc -oeuc -w";
という部分を \kakasi\bin に PATH が通っていれば、
$KAKASI = "kakasi -ieuc -oeuc -w";
と書き直して、
(2) \namazu\share\namazu\pl\wakati.pl ファイル中の
wakatize_japanese_sub サブルーチンの最後の方で、
my $tmpfile = util::tmpnam("NMZ.wakati");
という行があるので、その後ろに以下の1行を追加します。
$tmpfile =~ s/\//\\/g;
多分、これでうまくインデックスが作成できると思います。
> あと、oletaro.plも使ってみたのですが、更新日付がうまくとれないようです。
>Word2000で一太郎のファイルを開いてからVBAでチェックしてみましたが、Wordで
>一太郎のファイルを開いた場合BuiltinDocumentPropertiesプロパティではファイ
>ルの更新日時は取得できないようです。
情報ありがとうございます。
手元に一太郎のファイルがほとんどないのでとても助かります。
> スマートではないですが、olemsword.pl(一太郎専用に書き直した方がよいか?)に
> use Win32::OLE::Variant;
>を追加して、更新日付の取得部分を
> my $Fso=Win32::OLE->new('Scripting.FileSystemObject');
> my $File=$Fso->GetFile($cfile->{FullName});
> $fields->{'date'} = $File->{DateCreated}; # createdate
> undef $File;
> undef $Fso;
>と書き換えるととりあえず取れるようになります。もっとスマートな方法があったら
>いいのですが。
おぉ、まさに VBA の方法がそのまま Perl Win32:OLE に移植されていますね。(^^;
更新日時が取得できないときは、どのような結果が返ってくるのでしょうか?
BuiltinDocumentPropertiesプロパティで更新日時が取得できなかったときは、
undef $fields->{'date'}; としておくと、mknmz の complete_field_info()
サブルーチンの中で、勝手にファイルの最終更新日の設定をしてくれるので、
OLEフィルタ内で無理に設定しなくても大丈夫かもしれません。
--
広島市立大学 情報科学部 情報機械システム工学科
竹迫 良範 <takesako@xxxxxxxxx>