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

[debian-users:03765] Generate JE dictionary from gene.txt



高林@愛知大学と申します

# 先ほど linux-users に流した内容に少し補足が付け加えられています。

少し前に gene というフリーの英和辞書が Mule で使えるということが少
し話題になりましたが、この英和辞書を無理やり和英辞書に変換するため
のいいかげんなスクリプトを作ってみました。これ以上ないというくらい
アドホックな作りなので、あまり役に立たないかもしれませんが、まった
く使えないわけでもないので紹介してみます。興味のある方はお試し下さ
い。

このスクリプトの実行には nkf v1.62, KAKASI, Perl5 が必要です。
"geneJE.pl" という名前で保存して gene.txt (オリジナル) のあるディ
レクトリで実行してください。

…と、和英辞書をでっちあげてみたものの、これを Mule で使おうとして
うまくいかなくて困っています。 Tagami-K さんの作成された gene.el 
を少しいじればなんとかなりそうなのですが、 Emacs Lisp はさっぱり分
からないのでお手上げの状態です。

他力本願で申し訳ございませんが、上記の和英辞書を Mule で使えるよう
にしてくださる方はいませんでしょうか:)。 gene.el を拡張して和英辞
書もひけるようになったら便利だと思います。

この和英辞書作成スクリプトは需要があるようでしたら、もう少し真面目
に作りたいと思います。ご意見をお待ちしております。

gene.lzh は
<URL:http://www.forest.impress.co.jp/win12/dict.html#gene95>

gene.el は
<URL:http://fukuda.aist-nara.ac.jp/mnt/disk3/www/home/Mew/debian-users/msg02702.html>

KAKASI は
<URL:http://www.kusastro.kyoto-u.ac.jp/%7Ebaba/wais/>

からそれぞれ取得できます。


-- プログラムここから --
#!/usr/bin/perl

$| = 1;

print "Making EJ dictionary - gene.dic...\n";
system("nkf -eXd gene.txt |perl -e 'while(<>){chop \$_;\$tmp=<>;print \"\$_\t\$tmp\";}' >gene.dic");

print "Making JE dictionary - jgene.dic...\n";
open(EJ, "kakasi -Ea <gene.dic|") || die "Can't open gene.dic";
while(<EJ>) {
    /(.*)\t(.*)/;
    $word = $1;
    $definition = $2;
    $definition =~ s/(\/.*)/&commaquote($1)/e;
    $definition =~ s/(\(.*?\))/&commaquote($1)/ge;
    $definition =~ s/(\".*?\")/&commaquote($1)/ge;
    $definition =~ s/(hoshi)//g;

    @meanings = split(/, */, $definition);
    foreach $meaning (@meanings) {
	$meaning =~ s/^(\d+\. *)|(\(\d+\) *)//;
	$meaning =~ s/\(the ~\)//;
	$meaning =~ s/^\((.*)\)$/$1/;
        $meaning =~ s/^\? *//;
	$meaning =~ s/^([^\xa1-\xfe]+) ([\(\)\[\]\<\>xa1-\xfe]+)/$2 $1/g;
	$meaning =~ s/^(([<\[\(]+.*?[>\]\)]+ *)+)(.*)/$3$1/;
	$meaning =~ s/^(\d+\. *)|(\(\d+\) *)//;
	$meaning =~ s/\x0/,/g;
	$je{$meaning} .= $word . ", ";
    }
}
close(EJ);

print "Writing jgene.dic...\n";
open(JE, ">jgene.dic") || die "Can't open jgene.dic";
foreach $word (sort keys (%je)) {
    print JE "$word\t$je{$word}\n";
}
close(JE);

sub commaquote {
    my ($str) = @_;
    $str =~ s/,/\x0/g;
    $str;
}


-- プログラムここまで --

--
高林 哲 Satoru Takabayashi