11月≪ 2013年12月 ≫01月

12345678910111213141516171819202122232425262728293031
2013.12/09(Mon)

Androidスマホで英辞郎

Androidのスマホで英和辞書を使いたい。無料のものもあるが,実用性はやはり落ちる。できれば英辞郎を使いたい。

調べてみるとColordict対応の英辞郎辞書が購入できる。が,既に購入済みの英辞郎があるので,それを変換してスマホに入れられないかと考えた。

当然,同じことを考えた先達がいてネットに情報もあった。

しかし,思いの外苦労した。人には勧めない。購入した方が手間や時間を考えると正解と思う。
ただ,間違いなく1ヶ月もしたら何をどうしたのか覚えていそうに無いので自分のために記録しておく。

まず必要なもの。

情報:以下のサイト
http://fisheater-uk.blogspot.jp/2011/03/stardict-android.html
http://d.hatena.ne.jp/aaa555/mobile?sid=5e78fece023e7557&date=20120630

PC側の準備
英辞郎テキスト(これは購入する)EIJI-137.txt
Perl処理環境(ActivePerlとかを入れておく)
StarDict portableをダウンロード(StarDictPortable-stardict.sourceforge.com_3.0.3.paf.exe 9.8 MB)

スマホ側の準備
ColorDictをGoogle Playからインストールしておく

つまずくところ,その1
StarDict Editorをダウンロードしてもうまく動かない。**.dllがないとか言われる。調べてみると
StarDictプロジェクトは権利関係がクリアできず解散してしまっている。

ただ,StarDict portableをダウンロードが以下でできた。
http://code.google.com/p/stardict-3/downloads/detail?name=StarDictPortable-stardict.sourceforge.com_3.0.3.paf.exe&can=2&q=

つまずくところ,その2
Perlプログラムを切り取り,秀丸でテキストファイルにする。そのままだとShift-JISなので保存する時にUTF-8で保存する。ここはつまずかない。

Perlを走らせて英辞郎テキストを変換。
C:\>perl eiji2sd.pl EIJI-137.TXT > eiji-137-sd.txt
しかし,こうしてできたファイルをStardict portableでCompileすると単語が重複しているとの英語のエラーが
出てしまう。ここがつまずくところ。

ここのエラーの問題は上の情報の2番目のサイトで説明されている。要は前処理のPerlスクリプトを走らせておかないとエラーが出てしまうのである。

つまずくところ,その3
ColorDictが読み込む辞書の場所が微妙に機種により異なる。SDカードに保存する場合もあれば,Nexusのように本体メモリだけの場合もある。特定するにはGoogle playからYahooのファイルマネージャーをインストールしておくと便利。

ColorDictがインストールされた時にthesaurusなど3つの英英辞書がデフォルトで入れられているので,その場所をみつけて,辞書ファイル eiji137.dict, eiji137.ifo, eiji137.idxを保存すればよい。

つまずくところ,その4
PCとNexus7をつないで卓駆で操作しようとするとなぜかフォルダーが表示されない。Windowsのスタートボタン,
マイコンピュータからNexus7をクリックしていかないと表示が出ない。そうして表示が出てもColoddictのdictdataが表示されない。Yahooのファイルマネージャーからは見えるのに・・・。

結局,Yahooのファイルマネージャーから辞書ファイルをコピーして終了。
------------------------
手順を整理
PCで作業
1) Perlを入れておく:StarDic portableをインストールしておく

2) 英辞郎のテキストを購入しておく。例えば,EIJI-137.TXT

3) 以下のaaa555さんのスクリプトをエディタに貼り付け, maeshori.plなどと名付けてUTF-8で保存
------------------ここから-----------------
#!/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{$_};
}
-----------ここまで-------------------

4) コマンドプロンプトで
C:\>perl maeshori.pl EIJI-137.TXT > eiji-137-sd.txt

5) 以下のfisheaterさんのスクリプトをエディタに貼り付け,eiji2sd.plと名付けてUTF-8で保存
-----------ここから-------------------
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;
}
-----------ここまで-------------------

6) コマンドプロンプトで
C:\>perl eiji2sd.pl eiji-137-sd.txt > eiji-137-sd2.txt

7) PCにインストールしたStardic portableからeiji-137-sd2.txt を開いてCompileする。

8)できた3つの拡張子ファイルeiji-137-sd2.dict, eiji-137-sd2.ifo, eiji-137-sd2.idxをスマホの
ColorDictの辞書フォルダー(dictdata)を探してコピー

9)完了
スポンサーサイト
17:50  |  コンピュータ  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
 | BLOGTOP |