【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

人工言語のコマンドライン辞書を整備

テキスト形式の辞書を grep する簡易的な辞書ツールを作りました。

目次

概要

人工言語で文章を読む際、ロマンス語寄りに作られた言語であれば何となく読めます。しかし書くとなると正確な語形が必要なため、辞書が引けるように整備しました。

対象は以下の5言語です。

言語の紹介は以下の記事を参照してください。

Interlingua

テキスト形式の辞書が提供されています。

これを grep すればほぼ用は足ります。

$ grep indicate iedict.txt
indicar : to indicate, be indicative of
indicative : indicative (that indicates)
marcar : to mark, indicate
revindicar : to reclaim, vindicate
vindicar : to revenge, avenge, vindicate

※ indicate は結果があまり多くない単語として例に挙げました。

単語として切り出すには正規表現を使用します。

$ grep "\bindicate\b" iedict.txt
indicar : to indicate, be indicative of
marcar : to mark, indicate

ラッパー

ファイルや正規表現を毎回指定すると面倒なため、簡単なラッパーを作りました。

このスクリプトをどこかパスが通っている所に置いて実行属性を付けます。拡張子は取り除いて gdict という名前で置くとします。

辞書ファイルもどこか適当なところに置きます。~/share に置くとしてエイリアスを定義します。

alias ina='gdict -d ~/share/iedict.txt'

inaInterlingua の ISO 639-2/3 の言語コードです。

検索は大文字と小文字を区別しません。(case-insensitive

$ ina japan
✔ Japon : Japan
✔ japonese : Japanese (Japanese language, native of Japan)
✔ sinojaponese : Sino-Japanese
✔ yen  : yen (Japanese currency)

grep-i オプションを利用しています。

行頭が分かりやすいようにチェックマーク ✔ を付加しています。

オプション

単語として切り出すには -w オプションを使用します。

$ ina -w indicate
✔ indicar : to indicate, be indicative of
✔ marcar : to mark, indicate

grep に渡しているだけなので、正規表現も書けます。

$ ina "\bindicate"
✔ indicar : to indicate, be indicative of
✔ indicative : indicative (that indicates)
✔ marcar : to mark, indicate

複数の単語を指定すると、連続として処理されます。

$ ina to indicate
✔ indicar : to indicate, be indicative of

結果が多過ぎるときは -m オプションで制限できます。デフォルトは 100 件です。

$ ina -m 3 -w the
✔ A que apprender francese? : What’s the point of learning French?
✔ Accende le lumine! : Put the light on!
✔ Como es le tapete? : What’s the carpet like?

※ 無制限は -m 0 です。

Interlingue

以下のリポジトリ内の 1 ファイルを使用します。

辞書ファイルを ~/share に置くとしてエイリアスを定義します。

alias ile='gdict -d ~/share/english-interlingue_dictionary.txt'

使用方法は Interlingua のときと基本的に同じです。

$ ile indicate
✔ INDICATE #v.#indicar (-ation, -ator, -ativ, -ative), monstrar#
✔ POINT #v.#(aim) directer, apuntar; (indicate) monstrar; (sharpen) puntar#
✔ POOL #n.#stagne; (fund) funde comun; (comm., fin.) sindicate#
✔ TRADES-UNION #n.#sindicate#
✔ VINDICATE #v.#justificar#

ファイルフォーマットとして Interlingue が # で囲まれています。不要であればテキストファイルを直接編集して削除すると良いでしょう。

Glosbe

この辞書では情報が不足すると感じる場合は Glosbe を使うと良いでしょう。

MacLeod Dave 氏によって用例が大量に登録されているため便利です。

On top of that I have added the Kemp - Pope dictionary to Glosbe and a lot of translation memories, giving it 21,000+ entries and results showing the word in use when you search for it.

Ido

単一のテキストファイルとしては提供されていないため、以下のリポジトリのファイルを加工して使います。

このリポジトリをクローンします。

git clone https://github.com/kyegupov/ido_web_dictionary.git

以下の F# スクリプトをダウンロードします。

  1. [F#] Ido dictionary converter
  2. [F#] XML Parser

1つ目のスクリプトを実行します。

fsharpi Convert.fsx

2つのファイルが生成されます。

  1. en-io.txt (英語 → Ido
  2. io-en.txt (Ido → 英語)

結合して ~/share に置くとします。

cat en-io.txt io-en.txt > ~/share/ido.txt

エイリアスを定義します。

alias ido='gdict -d ~/share/ido.txt'

使い方は今までの言語と同じです。用例が豊富で情報量が多いため、見出し語に絞るため正規表現で文頭 ^ を指定すると良いでしょう。

$ ido ^indicate
✔ indicate: indikar (ulu, ulo ad ulu).

Volapük

単一のテキストファイルとしては提供されていないため、以下の HTML ファイルを加工して使います。

これら2つの URL から HTML ファイルをダウンロードします。

wget http://personal.southern.edu/~caviness/Volapuk/Misc/eng-vol.htm
wget http://personal.southern.edu/~caviness/Volapuk/Misc/vol-eng.htm

以下の F# スクリプトをダウンロードします。

  1. [F#] Volapük dictionary converter
  2. [F#] XML Parser

1つ目のスクリプトを実行します。

fsharpi Convert.fsx

2つのファイルが生成されます。

  1. eng-vol.txt (英語 → Volapük)
  2. vol-eng.txt (Volapük → 英語)

結合して ~/share に置くとします。

cat eng-vol.txt vol-eng.txt > ~/share/volapuk.txt

エイリアスを定義します。

alias vol='gdict -d ~/share/volapuk.txt'

使い方は今までの言語と同じです。

$ vol indicate
✔ direct - nemedik, stedöfik, stedöfo | (to indicate way) = lüodükön
✔ (to) indicate - jonön
✔ gidükön - to justify, to vindicate
✔ jonön - to indicate, to point, to show

Novial

単一のテキストファイルとしては提供されていないため、以下の HTML ファイルを加工して使います。

この URL から novial.html という名前で HTML ファイルをダウンロードします。

wget -O novial.html https://sites.google.com/site/noviallexike/novial-lexike-1930

以下の F# スクリプトをダウンロードします。

  1. [F#] Novial dictionary converter
  2. [F#] XML Parser

1つ目のスクリプトを実行します。

fsharpi Convert.fsx

1つの辞書ファイルが生成されます。

  • novial.txt (Novial → 英語)

辞書ファイルを ~/share に置くとしてエイリアスを定義します。

alias nov='gdict -d ~/share/novial.txt'

使い方は今までの言語と同じです。

英語の綴りを直しただけの単語は対応する英語が省略されているため、今まで例に使っていた indicate は c → k に修正して、接尾辞を取り除いて検索します。

$ nov indika
✔ indika FE, D -izieren, angeben, anzeigen.
✔ indikative (gram.).
✔ sindikalisme | -liste.

※ FE というのは、フランス語と英語の対応語が省略されていることを意味します。

見出しに接尾辞も収録されています。先頭にハイフンが付くオプションでない引数を使用するには、ダブルクォートで囲んでバックスラッシュを付けます。

$ nov "\-ere"
✔ droge D, F drogue, E drug | -ere | -eria.
✔ -ere (-ro, -ra) F -eur, -ateur, celui qui fait qqch ou est occupé par, E -er, -or, person occuþied in doing, D -er, -eur, -or, -ator, Person die mit etw. beschäftigt ist; ex. bakere, redaktere, bankere, judikere F juge, E judge, D Richter; reptere FE reptile, D Kriechtier; klimere F plante grimpante, E climbing plant, D Kletterpflanze | kp. -iste: reformere introdukte reformes, reformiste favora reformes.
✔ -eria (-ere + -ia): printeria F imprimerie, E printing office, D Buchdruckerei; bakeria, laveria....
✔ shu(e) E shoe, D Schuh, F soulier | -ere.

この辞書では情報が不足すると感じる場合は Glosbe を使うと良いでしょう。

WiktionaryOmegaWikiTatoeba の情報を組み合わせて、割と良い感じにまとめてくれます。

他の言語

1行1単語形式のテキストファイルがあれば他の言語にも応用できます。

たとえば以下にパブリックドメインの英和辞書データがあります。

これを適当な場所に置いて gdict のエイリアスを設定すれば、同様に使用できます。