読者です 読者をやめる 読者になる 読者になる

市販のデータを用いてAnkiデッキを生成する方法 Epwing辞書編

以前から、Ankiデッキを効率的に各種のデータから作成する方法を開拓してきたが、ここではEpwing辞書からAnkiデッキを生成する方法を紹介する。

まえがき

Epwingとはかつて、一度データを購入すれば、自身が所有するあらゆる端末上で利用することができるようになるという、夢のような、自由で便利な辞書データの規格(JIS X 4081)であった。 しかし現在では、旧式化、クローズドな規格への切り替えなどにより、ほぼ絶滅しており、オリジナルのEpwing辞書の入手は困難になっている。 一方で、デファクト・スタンダードとして一度覇権を握った影響は大きく、現在でも各種プラットフォーム向けのEpwing辞書ビューアは生き長らえており、各種の辞書ソフトのデータをEpwing形式に変換するようなツールも有志により開発が続けられている。 中でもロゴヴィスタの電子辞書シリーズは、Epwingから派生したフォーマットを使用していることもあり、かなりの辞書がdessedによりEpwing形式に変換可能である。 ITの基礎知識を持つ語学学習者が、これらのEpwing辞書から好きなものを選び、高品質なAnkiデッキを容易に作成できるようになることが、本稿の意図するところである。

準備

おおよそ以下のものが必要である。

  • Javaランタイム

Wokを動作させるために必要になる。多くの環境ではデフォルトでインストールされているため、新たに導入する必要はない。必要があれば、https://java.com/ja/download/ からダウンロードする。

  • Wok

TSVファイルを加工するためのツールhttps://github.com/rubyu/wok/releases/download/v0.1.0/wok-0.1.0.jar をダウンロードする。

Wokが行う処理を記述したファイル。 https://github.com/rubyu/wok-scripts/archive/v0.1.zip からダウンロードする。

前述のEpwing辞書。好みのものを用意すること。

  • 単語のリスト

Ankiデッキに変換する元となる、単語が列挙されたファイル。ASCII、またはUTF-8で記述されていること。

ツアー

以下では次に示されるシンプルな単語のリスト list.txt を出発点として、僅かな手順で、十分に実用になるデッキを生成していく。

> type list.txt
apple
book
car

環境構築

まだ作業を始めたばかり、フォルダの中身はlist.txtだけだ。

> dir /b
list.txt

Java環境は整っているだろうか。確かめてみよう。

> java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) Client VM (build 25.77-b03, mixed mode, sharing)

ではここで、Wok、そしてWok-Scriptsをダウンロードしよう。Wok-Scriptsはzipで圧縮されているので解凍しておく。フォルダの中身はこうだ。

> dir /b
list.txt
wok-0.1.0.jar
wok-scripts-0.1
wok-scripts-0.1.zip

Wok-Scriptsには動作テスト用に、挨拶をするだけのスクリプト hello.wok が含まれている。早速試してみよう。

> java -jar wok-0.1.0.jar -f wok-scripts-0.1\hello.wok
Hello!

フィールドを追加する

list.txtにフィールドを追加することで、Ankiのデッキとして意味を持つTSVファイル(フィールドがタブで句切られているファイル)を構築していく。

ランクフィールド

まず簡単な例を示す。 ある単語が、ある単語リストの中で何番目であるかを示すフィールドを構築するためのスクリプトrank.wokを用いて以下のように:

> java -jar wok-0.1.0.jar -f wok-scripts-0.1\rank.wok -v src=0 -v dst=1 -v grp=1 -v@rawstr list=list.txt -v update=true list.txt
"apple" "1"
"book"  "2"
"car"   "3"

ここで、-v src=0 は処理の元になるフィールドの番号を指定している。list.txtにはまだ1つのフィールドしかない。そのため0と置く。

-v dst=1 は処理の結果を書き込むフィールド番号を指定している。1を指定しているため、2番めのフィールドに処理結果が書き込まれる。

-v grp=1 は何件ごとに1つのランクとするか。ここでは1件ごとにランクは繰り上がる。

-v@rawstr list=list.txt はランクの基準となるリストを指定している。ここでは入力と同じファイルを指定している。

-v update=truedstで指定したフィールドに値があった場合、それを上書きすると指定している。

list.txt を処理するため、一番最後に与えている。

また、Wokを実行した結果は、リダイレクトを用いて任意のファイルとして保存することができる。ここではres0.tsvとして結果を保存する。

> java -jar wok-0.1.0.jar -f wok-scripts-0.1\rank.wok -v src=0 -v dst=1 -v grp=1 -v@rawstr list=list.txt -v update=true list.txt > res0.tsv

うまく保存できただろうか。確認してみよう。

> type res0.tsv
"apple" "1"
"book"  "2"
"car"   "3"
音声フィールド

ここでは研究社新英和(第7版)・和英(第5版)中辞典(KENE7J5)をデッキ生成に用いる。

Epwing辞書を検索し、音声ファイルのフィールドを構築するためのスクリプトeb-voice-anki.wokを用いて、以下のように:

> java -jar wok-0.1.0.jar -f wok-scripts-0.1\eb-voice-anki.wok -v src=0 -v dst=2 -v idx=0 -v update=true -v@rawstr dic=KENE7J5 -v@rawstr media=media res0.tsv > res1.tsv

-v idx=0 は検索結果の何番目の音声ファイルを使用するかを指定している。(例えば UK、USなどの順で、)複数の音声が含まれている場合に、望ましいインデックス番号を指定すことができる。

-v@rawstr dic=KENE7J5Epwing辞書のパス(CATALOGSを子に持つフォルダ)を指定している。環境に合わせて適切な値を設定すること。

-v@rawstr media=media は音声ファイルを保存するフォルダを指定している。このフォルダが存在しない場合、処理の中で自動的に生成される。

このスクリプトは処理を実行するのに必要なebquery-0.3.1.jarを自動的に保存する。見覚えがないファイルが存在することに驚かないこと。

さて、結果を見てみよう。

> type res1.tsv
"apple" "1"     "[sound:D7E4E20774DDB06FBA354BD6B91FE24F.wav]"
"book"  "2"     "[sound:9669237A5749E31144688F7F24C2C6D9.wav]"
"car"   "3"     "[sound:4C7A322536A21791D5F559F3E199C77B.wav]"

[]で囲まれたAnki形式のsoundタグを持つ3番めのフィールドが追加されている。

> dir /b media
4C7A322536A21791D5F559F3E199C77B.wav
9669237A5749E31144688F7F24C2C6D9.wav
D7E4E20774DDB06FBA354BD6B91FE24F.wav

音声ファイルもきちんとmediaフォルダ内に作られている。

語義フィールド

さて、最後のフィールド。音声フィールドと同様に、研究社新英和(第7版)・和英(第5版)中辞典(KENE7J5)を用いることとする。

このフィールドを作成するために、必要なものがある。それはMapファイルで、ここで必要になるのはKENE7J5.mapEBWin4をインストールすると、%APPDATA%\EBWin4\GAIJIに自動的に生成される。あるいは空のmapファイルを用いてもよい。その場合はtype nul > KENE7J5.mapとして用意する。

念のため、KENE7J5.mapが存在するか確認しておこう。

> dir /b
ebquery-0.3.1.jar
KENE7J5.map
list.txt
media
res0.tsv
res1.tsv
wok-0.1.0.jar
wok-scripts-0.1
wok-scripts-0.1.zip

準備ができれば、Epwing辞書を検索し、語義のフィールドを構築するためのスクリプトeb-html-min.wokを用いて、以下のように:

> java -jar wok-0.1.0.jar -f wok-scripts-0.1\eb-html-min.wok -v src=0 -v dst=3 -v update=true -v@rawstr dic=KENE7J5 -v@rawstr ebmap=KENE7J5.map -v@rawstr media=media res1.tsv > res2.tsv

-v@rawstr ebmap=KENE7J5.map は前述のmapファイルの場所を指定している。

-v@rawstr media=media 音声フィールドのときと同様。ここでは外字を表示するための画像ファイルを保存する。

さて、結果を見てみよう。

> type res2.tsv
"apple" "1"     "[sound:D7E4E20774DDB06FBA354BD6B91FE24F.wav]"  "<span class=""e
bquery KENE7J5""><span class=""ebkw""><img alt=""hA132"" class=""ebec"" src=""40
CB34C31B79B8D7EF231201333C4468.png""><span class=""ebul"">ap繝サple</span> </span
><br>/ヌスpl/竊帝浹螢ー<br>笏・img alt=""zB128"" class=""ebec"" src=""ACD7681805EBF
0F9BD3345E9F56C122F.png""><br><span class=""ebul"">1</span> <span class=""ebul""
~略~

ちょっと見づらいが、4番目のフィールド、HTMLで記述された語義が生成されている。 各フィールドの文字数でもチェックしてみよう。

> java -jar wok-0.1.0.jar -f wok-scripts-0.1\cell-convert.wok -v@rawstr expr=v.size res2.tsv
"5"     "1"     "44"    "1081"
"4"     "1"     "44"    "10742"
"3"     "1"     "44"    "1536"

うまく生成できたようだ。これでデッキは完成。res2.tsvをAnkiで読み込み、mediaフォルダの中のファイルをAnkiのcollection.mediaにコピーすれば、作業は完了となる。

なお、その際、Anki側では適切なノートタイプを予め定義しておく必要がある。ここでは「単語」「ランク」「音声」「語義」からなるデッキを生成したので、ノートタイプも同様に。

おすすめの辞書コンテンツ

dessed にて変換可能なもの

音声あり、中辞典。Weblioを引くと表示されるのはだいたいこれ。

大辞典。英和。

研究社 新英和大辞典第6版
ロゴヴィスタ (2007-02-17)
売り上げランキング: 432

大辞典。和英。

コーパスとして。

コーパスとして。

NEW 斎藤和英大辞典
NEW 斎藤和英大辞典
posted with amazlet at 16.05.02
ロゴヴィスタ (2013-05-24)
売り上げランキング: 11,426