Tkrzw-Dict: 統合英和辞書検索システム

概要

本パッケージは、オープンなデータをつかって英和辞書を構築し、それを検索するためのシステムを提供する。ここで言うオープンなデータとは、Wiktionary日本語版Wiktionary英語版WordNet日本語WordNetを指す。それらのデータはインターネットを介して無料で入手することができ、当該ライセンスに基づいて自由に利用することができる。すなわち、本パッケージは、あなたが自分の辞書データを無料で構築し、自由にカスタマイズして利用することを可能にする。

まずはデモサイトを利用されたい。検索窓に英単語を入力し、「検索」ボタンを押せば、その英単語の語義が表示される。検索窓に日本語を入力して検索すれば、その日本語を語義に含む英単語のリストが表示される。すなわち、本システムは英和辞書としても和英辞書としても利用できる。単語だけでなく、複数語からなるフレーズでも検索できる。さらに、スペルミスを吸収するための曖昧一致検索や、関連語を検索するための類語検索も実装されている。語の変化形で検索できる屈折索引も利用できる。英文読解の際には英和辞書検索機能が頻繁に用いられるが、その際には曖昧一致検索や屈折索引が自動的に機能し、検索語を入力し直す手間を大幅に削減してくれる。英作文の際には、和英辞書検索機能が頻繁に用いられるが、その際には類語検索を利用すると、所望の英単語を探す手間を大幅に削減できる。

EPUB形式の電子辞書として使いたい場合には、このEPUBファイルをダウンロードして、任意のEPUBリーダにインストールすればよい。

インストール

本パッケージはUNIX系のOSで動作する。また、DBMライブラリであるTkrzwとそのPythonインターフェイスに依存する。所定の手順に基づき、それらを予めインストールしておくこと。

本パッケージのコードベースはGitHubにて公開されている。以下のコマンドで全てのコードを入手できる。

辞書データはこのアーカイブファイルをダウンロードすることで入手できる。それを展開すると、以下のファイルが得られる。

検索用のプログラムはWebサーバ上で動作するCGIスクリプトとして実装されている。よって、Webサーバをインストールし、CGIスクリプトの実行設定をする必要がある。その上で、以下のプログラムを所定の場所に配置する。また、Pythonのregexモジュールをインストールする。

search_union.pyをCGIスクリプトとして実行可能にし、それにアクセスすると検索機能が利用できる。拡張子をCGI等に変えても良い。辞書データの各種ファイルは同一ディレクトリに置いてあることを前提とするが、search_union.py内のCGI_DATA_PREFIXという変数の値を変更することでファイルの位置や名前を変更できる。

search_union.pyはコマンドラインツールとしても使うことができる。検索語は引数として指定する。--data_prefixオプションで辞書データの接頭辞を指定できる。--indexオプションの次にnormalかreserveかinflectionをつけて索引モードを指定できる。--searchオプションの次にexactかprefixかsuffixかcontainかwordかeditかrelatedをつけて検索モードを指定できる。--viewオプションの次にfullかsimpleかlistをつけて表示モードを指定できる。

配布された辞書データを検索して利用するだけであれば、ここまでのことだけを知っておけば問題ない。これ以降の記述は、辞書データや検索システムを改造したい人のみが読むべきである。

辞書データファイル

union-body.tkhは、辞書本体のデータを収めたDBMファイルである。Tkrzwのハッシュ〜データベースの形式である。キーは小文字に正規化された英語の検索語であり、値はその検索語に一致する見出し語の語義情報のリストをJSON形式で表現したものである。例えば、「japan」というキーに対しては「Japan」(=日本)と「japan」(=漆)という二つの見出し語の情報のリストが関連づけられる。以下のようなコマンドで中身を見ることができる。

各々の見出し語は、以下の属性を持つJSONの連想配列である。

見出し語のitem属性は、以下の属性を持つJSONの連想配列のリストである。リスト内の要素の順序は、第一キーはラベル順である。第二キーは、Wiktionary由来のデータでは元データにおける収録順であり、WordNet由来のデータでは翻訳語の和文コーパスにおける頻度の降順である。

WordNet由来の見出し語のtext属性では、サブセクションの先頭に "[xxx]:" という形式で以下のラベルが付くことがある。

union-tran-index.tkhは、和英検索用の索引を収めたDBMファイルである。Tkrzwのハッシュデータベースの形式である。キーは小文字に正規化された日本語の検索語であり、値はその検索語を語義に含む英語の見出し語の正規化した文字列のリストをTSV形式で表現したものである。例えば「日本」というキーに対しては「japan」や「nippon」が関連づけられる。リスト内の要素の順序は、英文コーパスにおける頻度の降順である。

union-infl-index.tkhは、屈折検索用の索引を収めたDBMファイルである。Tkrzwのハッシュデータベースの形式である。キーは小文字に正規化された英語の屈折形であり、値はその屈折形を持つ語の原型の正規化した文字列のリストをTSV形式で表現したものである。例えば「better」というキーに対しては「well」と「good」が関連づけられる。リスト内の要素の順序は、英文コーパスにおける頻度の降順である。

union-keys.txtは、英和検索のキーのみを収めたテキストファイルである。英語の見出し語の正規化した文字列が行区切りで並べられている。リスト内の要素の順序は、英文コーパスにおける頻度の降順である。

union-tran-keys.txtは、和英検索のキーのみを収めたテキストファイルである。翻訳語の正規化した文字列が行区切りで並べられている。リスト内の要素の順序は、英文コーパスにおける頻度の降順である。

辞書データの構築

辞書データを自分で作るのは面倒なので、上述の辞書データのアーカイブファイルをダウンロードするのが推奨される。しかし、自分なりにカスタマイズしたい場合には、これ以降の記述を読む価値がある。辞書データの構築を行うプログラム群は、PythonのMeCabモジュールとnltkモジュールに依存するので、それらを予めインストールしておくこと。

英和辞書を作るにあたっては、英語や日本語の各語の頻度をデータベースにしておいて、それを用いて語の並び替えを行うことが望ましい。よって、Wikipedia英語版および日本版のデータをコーパスとして、語と共起語の頻度を集計したデータベースを用意した。以下をダウンロードされたい。これらもパッケージに属するスクリプトで生成できるが、時間がかかるので推奨しない。

辞書データを構築するにあたり、収録すべき各見出し語のデータを表現した「語義TSVファイル」を準備する必要がある。ファイル内では、各行が各見出し語の情報をTSV形式で表現し、TSVの各フィールドは「name=value」形式で、属性名とその値を表現する。属性名には以下のものがる。同じ属性が複数回現れても良い。

Wiktionaryの日本語版および英語版の語義TSVファイルを生成するには、各々のXMLファイルをダウンロードしておいてから、以下のコマンドを実行すればよい。

 wiktionary-ja.tsv
$ bzcat ~/enwiktionary-latest-pages-articles.xml.bz2 |
  ./parse_wiktionary_en.py > wiktionary-en.tsv
]]>

WordNetと日本語WordNetを統合した語義TSVファイルを生成するには、各々のアーカイブファイルを展開しておいてから、以下のコマンドを実行すればよい。

 wordnet.tsv
]]>

規程の書式に準拠した語義TSVファイルを生成することで、任意のデータソースを使った辞書データを構築することができる。既成の以下ファイルをダウンロードしてから適当にカスタマイズしても良い。

語の頻度データベースと語義TSVファイルが揃ったら、以下のコマンドを実行すると、英和辞書データの本体であるDBMファイルが構築できる。

その他の検索用ファイルは、以下の手順を踏めば生成できる。

EPUB形式の辞書ファイルを作成するには、以下の手順を踏む。

ライセンス

Tkrzw-dictのソースコードは平林幹雄が書いて、Google LLCが著作権を保持し、Apache license 2.0に基づいて頒布される。辞書データのライセンスについては各々のデータソースのサイトを参照されたい。著者に連絡するには <hirarin@gmail.com> にメールを送られたい。