英辞郎のデータをubunntuで使う
辞書ツールはgolddictにした。
次を参考にした。
英辞郎(第五版)をstardictに変換する方法:iPad/iPhoneで英辞郎を使おう:iPadイングリッシュ:iPad/iPhoneによる英会話独学術
aaa555 no Zakki (Daily Memo)
aaa555 no Zakki (Daily Memo)
実際の手順は、
Windows上での作業
1)『英辞郎 第五版』をインストール。
2)インストールした「PDIC Unicode for EIJIRO V」を起動し、「File」>「辞書設定<詳細>」>「辞書設定」ダイアログで以下の4個のファイル
・EIJI-118.dic
・WAEI-118.dic
・RYAKU118.dic
・REIJI118.dic
を表示し、「辞書の変換」を選択し「辞書変換の設定」ダイアログを表示させる。「変換先ファイル形式」に「PDIC1行テキスト形式」選択する。
3)文字コード変換 「Unicode」から「UTF-8」に変換。
「文字コード変換ツール for .NET 2.0」
http://www.vector.co.jp/soft/winnt/util/se372195.html
を使う。
ubuntuでの作業
4)以下の2つのスクリプトを使って変換する。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Encode;my $infile = $ARGV[0];
if(!$infile) {
die "Usage: $0 [infile]\n";
}my $file;
my %W;open($file, $infile) || die "$!\n";
while(<$file>) {
my $line = decode('cp932', $_);if($line =~ /^(.+)? : /) {
my $key = $1;#$key =~ s/\{.+\}//;
#$key =~ s/\s+$//;# 優先的に最初に持ってくるようにkeyにスペースを追加
$key =~ s/\{/ \{/;$_ =~ s/\r//;
$W{$key} = $_;
}
}close($file);
foreach (sort keys %W) {
print $W{$_};
}
use strict;
use utf8;
use Encode;
my ($key, $value, $word, $class, $prevword, $in) = ('', '', '', '', '');
my %desc;
my %classvalue = (
'語源' => 23,
'名' => 22,
'代' => 21,
'動' => 20,
'自他動' => 19,
'他動' => 18,
'自動' => 17,
'形' => 16,
'副' => 15,
'助動' => 14,
'前' => 13,
'助' => 12,
'接続' => 11,
'接頭' => 10,
'接尾' => 9,
'間' => 8,
'句動' => 7,
'句他動' => 6,
'句自動' => 5,
'略' => 4,
'人名' => 3,
'地名' => 2,
'組織' => 1
);
while (<>) {
chomp;
$in = decode('cp932', $_);
if ( ($key, $value) = ($in =~ m/^■(.+) : (.+)$/) ) {
if ( $key =~ m/^([^\{]*[^\{\s])\s+\{([^\}]+)\}$/ ) {
($word, $class) = ($1, $2);
}
else {
($word, $class) = ($key, '-');
}$value =~ s/\\/\\\\/g;
$value =~ s/■・/\\n /g;
$value =~ s/■/\\n/g;
$value =~ s/([a-zA-Z]+)・/$1?/g;
# $value =~ s/{[ぁ-?/()・_ー ]+}//g; # to remove (most of) FURIGANAs
# $value =~ s/【@】([^、【]+、)+//; # to remove KANA pronunciations
if ( $word !~ m/[。、]/ ) { # to remove sentences, i.e. non-words, in order to avoid StarDict crashing
if ( ($word ne $prevword) && ($prevword ne '') ) {
flush($prevword, %desc);
undef %desc;
}
$desc{$class} = $value;
$prevword = $word;
}
}
else {
print STDERR encode('cp932', "irregular line[$.]: $in\n");
}
($key, $value, $word, $class) = ('', '', '', '');
}
flush($prevword, %desc);
sub flush {
my ($word, %desc) = @_;
my ($key);print encode('utf8', "$word\t");
if ( $desc{'-'} ) {
print encode('utf8', "$desc{'-'}\\n");
delete $desc{'-'};
}
foreach $key (sort byclass keys %desc) {
print encode('utf8', "?$key?$desc{$key}\\n");
}
print "\n";
}
sub byclass {
my ($as, $ac, $am) = ( $a =~ m/^(?:([0-9]+)\-)?([^\-\s]+)(?:\-([0-9]+))?/ );
my ($bs, $bc, $bm) = ( $b =~ m/^(?:([0-9]+)\-)?([^\-\s]+)(?:\-([0-9]+))?/ );
my @diffs = ($as - $bs, $ac - $bc, $classvalue{$bc} - $classvalue{$ac}, $ac cmp $bc, $am - $bm);
my $diff;
foreach $diff (@diffs) {
if ($diff != 0) {
return $diff;
}
}
return 0;
}
5)全てのファイルについて、以下の2種類の文字置換を行う。vimを使った。
・「///」をタブコード「¥t」(半角¥とt)に変換
:%s;///;\t;g
・「¥」(半角¥)を「¥n」(半角¥とn)に変換 ←いらないかも
:%s;/;\n;g
6)stardict-editor コマンドを実行し、 .tab ファイルを指定して [Compile] をクリックする。
7)できたファイルをgoldendictを立ち上げ、編集>辞書でファイルをインポートする。