Namazu-devel-ja(旧)


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

filter/postscript.pl



馬場@京大宇宙物理 です。

意外なことに、PostScript ファイルってこれまで扱えなかったのですね。
# そのへんをインデックスさせてみて初めて気が付いたとゆう... _o_

テキスト抽出は ps2text と ps2ascii を使ったもので十分だろうとおも
います。ps2text, ps2ascii ともに Ghostscript が必要です。ps2ascii 
は Ghostscript に付いてますが英語しか扱えませんですね。ps2text は
日本語Postscriptからでもテキスト抽出できますので便利です。

一次配布先が見当たらないのですが、とりあえず
http://www.softpark.jplaza.com/cgi-bin/DL.cgi/0+/SunOS/ps2text+/ps2text-0.4.tar.Z
から入手できます。0.3 はいろんなところに転がっているのですが、
0.4 は(捜した範囲では)ここからしか持ってこれませんでした。
あと、http://www.nmt.ne.jp/~ysas/fliner/ps2text_0_4_pat.gz に改良
パッチがあります。説明は http://www.nmt.ne.jp/~ysas/fliner/ です。


んで、ps2text を入れておいて、他のfilterプログラムを見ながら適当に
フィルタをでっちあげてみたのですが、ちょっとヘンなことになっている
ので、お知恵を拝借させてください。

以下の postscript.pl を /usr/share/namazu/filter/ などにコピって、
mknmz を走らせると、hoge.ps ファイルを認識してくれません。一方で、
huga.ps.gz のように gzip 圧縮してある ps ファイルだと、

1/14 - /home/baba/Namazu/ps/F77VOS.ps.gz [text/plain]

のようになってインデックスします。text/plain と表示するのがちょっ
と気に入りませんが、とりあえずこのインデックスで検索はできます。

ということで、Postscript ファイルからの日本語テキスト抽出はokだけど
ファイル検出に問題があるので、直していただけないでしょうか。
--
馬場  肇 ( Hajime BABA )            E-mail: baba@xxxxxxxxxxxxxxxxxxxxxx
京都大学理学部宇宙物理学教室 博士後期課程
--



#
# -*- Perl -*-
# $Id: postscript.pl,v 1.16 2000/03/23 10:41:04 knok Exp $
# Copyright (C) 2000 Namazu Project All rights reserved ,
#     This is free software with ABSOLUTELY NO WARRANTY.
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either versions 2, or (at your option)
#  any later version.
# 
#  This program is distributed in the hope that it will be useful
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#  02111-1307, USA
#
#  This file must be encoded in EUC-JP encoding
#

package postscript;
use strict;
require 'util.pl';

my $postscriptpath = undef;

sub mediatype() {
    return ('application/postscript');
}

sub status() {
    if (util::islang("ja")) {
	$postscriptpath = util::checkcmd('ps2text');
    } else {
	$postscriptpath = util::checkcmd('ps2ascii');
    }
    return 'no' unless (defined $postscriptpath);
    return 'yes';
}

sub recursive() {
    return 1;
}

sub pre_codeconv() {
    return 0;
}

sub post_codeconv () {
    return 0;
}

sub add_magic ($) {
    return;
}

sub filter ($$$$$) {
    my ($orig_cfile, $cont, $weighted_str, $headings, $fields)
      = @_;

    my $tmpfile = util::tmpnam('NMZ.postscript');

    util::vprint("Processing postscript file ... (using  '$postscriptpath')\n");

    my $fh = util::efopen("| $postscriptpath > $tmpfile");
    print $fh $$cont;
    undef $fh;
    $fh = util::efopen("$tmpfile");
    my $size = util::filesize($fh);
    if ($size > $conf::FILE_SIZE_MAX) {
	return 'too_large_postscript_file';
    }
    $$cont = util::readfile($fh);
    undef $fh;
    unlink($tmpfile);
    return undef;
}

1;