おいしいブログ

辞書アプリを作ろう vol.1

2017-12-30

english

さくっ!パッ!と英単語を調べたい、というモチベーションから無料の便利な辞書アプリも確か無かった気もするので辞書アプリを作ろうかなと思い立ったのですが、まぁ特に新しいアプリも出てないよな〜と思ってApp Storeを覗いたらあるじゃないですか・・Weblioさん・・。便利ですやん・・Weblioさん・・? 湧き出るモチベーションが枯れていくのが実感出来たわけですが、とにかく作ることを目的にやるか・・? とダメなパターンで始めます。

辞書データを探す

大本の辞書データを探します。さっくり検索したところ、EDICTというのが良さそうな感じなのでこれを利用することにします。

The EDICT Dictionary File

ライセンスは Creative Commons Attribution-ShareAlike Licence (V3.0).

You are free:
- to Share - to copy, distribute and transmit the work
- to Remix - to adapt the work

Under the following conditions:
- Attribution. You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work).
- Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible licence.```

<a href="http://ftp.monash.edu/pub/nihongo/00INDEX.html" target="_blank">The Monash Nihongo ftp Archive</a> から、UTF-8 codingのファイル(edict2u.gz)をダウンロード。中を覗いてみます。

```sh
# format, KANJI [KANA] /(general information) gloss/gloss/.../

$ head -n 10000 edict2u | tail
インターン /(n) (See 研修医) intern/(P)/EntL1023060X/
インターンシップ /(n) internship/EntL1986080X/
インターン制度 [インターンせいど] /(n) (See 研修医制度) internship system/EntL1959610X/
インタセプト;インターセプト /(n) intercept/EntL1023070X/
インタビュー(P);インタビュ;インタービュー;インタビュウ(ik);インタヴュー /(n,vs) interview (i.e. television, newspaper, etc.)/(P)/EntL1023100X/
インタビュアー;インタヴュアー;インタビューアー /(n) interviewer/EntL1023110X/
インタフェース;インターフェース;インターフェイス;インタフェイス;インターフェス;インタフェス /(n) {comp} interface/EntL1022940X/
インタフェースアドレス;インタフェース・アドレス /(n) {comp} interface address/EntL2283570X/
インタフェースカード;インタフェース・カード /(n) {comp} interface card/EntL2283580X/
インタフェースモジュール;インタフェース・モジュール /(n) {comp} interface module/EntL2283590/

良さそうです?

アプリの構成を考える

  • JavaScript
  • Python3
  • Elasticsearch

この3つを使って作りましょう。辞書データをElasticsearchに放り込んで、Pythonで取得、JSで表示するように作ります。

辞書データを整形する

末尾の Entから始まる文字列や、 (){} で囲われた文字列など辞書機能には不要そうな文字列を除外し、日本語、英語の単純なペアのデータに整形します。

$ cat edict2u | sed -e 's@/Ent.*@@' | sed -e 's@([^)]*)@@g' | sed -e 's@{[^}]*}@@g' | sed -e 's/<space><space>/<space>/g' > edict2u.txt

確認してみます。

$ head -n 50000 edict2u | tail 
因子集合 [いんししゅうごう] /(n) {comp} factor set/EntL2341770X/
因子分析 [いんしぶんせき] /(n) factor analysis/EntL1168730X/
因州弁 [いんしゅうべん] /(n) dialects of Japanese spoken in Eastern Tottori prefecture/EntL2546160/
因習;因襲 [いんしゅう] /(n) convention/tradition/long-established custom/EntL1587900X/
因習的 [いんしゅうてき] /(adj-na) conventional/EntL2520510/
因習道徳 [いんしゅうどうとく] /(n) (yoji) conventional morality (morals)/EntL2041870X/
因循 [いんじゅん] /(adj-na,n) indecision/vacillation/EntL1168740X/
因循姑息 [いんじゅんこそく] /(n) (yoji) dilly-dallying and temporizing (temporising)/EntL1168750X/
因数 [いんすう] /(n) {math} factor/EntL1168760X/
因数定理 [いんすうていり] /(n) {math} factor theorem/EntL2212110X/

$ head -n 50000 edict2u.txt | tail 
因子集合 [いんししゅうごう] / factor set
因子分析 [いんしぶんせき] / factor analysis
因州弁 [いんしゅうべん] / dialects of Japanese spoken in Eastern Tottori prefecture
因習;因襲 [いんしゅう] / convention/tradition/long-established custom
因習的 [いんしゅうてき] / conventional
因習道徳 [いんしゅうどうとく] / conventional morality 
因循 [いんじゅん] / indecision/vacillation
因循姑息 [いんじゅんこそく] / dilly-dallying and temporizing 
因数 [いんすう] / factor
因数定理 [いんすうていり] / factor theorem

悪くないんじゃないでしょうか?

ひとまず今回はここまでにして、次は整形した辞書データをElasticsearchに投入から続けて行きたいと思います。