Namazu-devel-ja(旧)


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

Re: Office系フィルタで wvSummary を利用してみては? (Re: macbinary.pl)



寺西です。

Tadamasa Teranishi wrote:
> 
> この用途にはうまく使えませんでしたが、Summary が入っている場合は
> wvSummary 等を使い、title, author, keywords を取り出して、情報を
> 利用するように Office 系のフィルタを修正することは可能かもしれません。
> (Win32 系の OLEフィルタでは、現状でも Summary の情報を利用して
> います。)

ということで、wvSummary を使って title, author, keywords を
取り出すプログラムを書いてみました。
HEAD 用です。(msword.pl 用ですが、excel.pl, powerpoint.pl も
同等の修正で対応可能です。)
これで、filter/win32/olemsword.pl と同じように著者の情報が利用
できます。

ところで taro7_10.pl を見ていると OLE/Storage_Lite.pm を
使って同等の処理をしていることに気づきました。

> wvSummary は libole2 の test-ole の簡易版のようなものですから、
> Word 以外でも使えます。
> # libole2 の Perl モジュールってないのかな。

そのものではありませんが、OLE/Storage_Lite.pm が、これ相当と
して使えるのかな。(Perl モジュールでできるなら、そちらの方が
いいですね。)


$ cvs diff msword.pl
Index: msword.pl
===================================================================
RCS file: /storage/cvsroot/namazu/filter/msword.pl,v
retrieving revision 1.37
diff -r1.37 msword.pl
36a37
> my $wvsummarypath = undef;
42a44,45
>     $wvsummarypath = util::checkcmd('wvSummary');
>
105a109,111
>     # get summary info in all OLE documents.
>     getSummaryInfo($tmpfile, $cont, $weighted_str, $headings, $fields);
>
176a183,243
>     return undef;
> }
>
> sub getSummaryInfo ($$$) {
>     my ($cfile, $cont, $weighted_str, $headings, $fields)
>       = @_;
>
>     return undef unless (defined $wvsummarypath);
>
>     my @cmd = ($wvsummarypath, $cfile);
>     my ($status, $fh_out, $fh_err) = util::systemcmd(@cmd);
>     my $summary = util::readfile($fh_out);
>
>     my $title = undef;
>     my $subject = undef;
>     my $author = undef;
>     my $keywords = undef;
>
>     if ($summary =~ /^The title is (.*)$/m) {
>         $title = $1;
>
>         # PowerPoint Only
> #        undef $title if $title eq # which has no slide title
> #            "\xbd\xd7\xb2\xc4\xde\x20\xc0\xb2\xc4\xd9\x82\xc8\x82\xb5";
>     }
>     if ($summary =~ /^The subject is (.*)$/m) {
>         $subject = $1;
>     }
>     if ($summary =~ /^The author is (.*)$/m) {
>         $author = $1;
>     }
>     if ($summary =~ /^The keywords are (.*)$/m) {
>         $keywords = $1;
>     }
>
>     my $weight = $conf::Weight{'html'}->{'title'};
>     if (defined $title) {
>         codeconv::toeuc(\$title);
>         $$weighted_str .= "\x7f$weight\x7f$title\x7f/$weight\x7f\n";
>     }
>
>     if (defined $subject) {
>         codeconv::toeuc(\$subject);
>         $$weighted_str .= "\x7f$weight\x7f$subject\x7f/$weight\x7f\n";
>     }
>
>     $fields->{'title'} = $title;
>     $fields->{'title'} = $subject unless (defined $title);
>
>     if (defined $author) {
>         codeconv::toeuc(\$author);
>         $fields->{'author'} = $author;
>     }
>
>     if (defined $keywords) {
>         codeconv::toeuc(\$keywords);
>
>         $weight = $conf::Weight{'metakey'};
>         $$weighted_str .= "\x7f$weight\x7f$keywords\x7f/$weight\x7f\n";
>     }
>
-- 
=====================================================================
寺西 忠勝(TADAMASA TERANISHI)  yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint =  474E 4D93 8E97 11F6 662D  8A42 17F5 52F4 10E7 D14E