FANDOM


前書き

まず、僕がなぜこういう風に新しい辞書形式を考えるに至ったかを説明しよう。このウィキにいる人ならすぐにわかるであろうがOTM-JSON形式にちょっとした不便さを感じたからだ。ただ、OTM-JSON形式が劣っているという意味ではないことは理解してほしい。少なくともPDIC-CSV形式よりは辞書データを作るのに適している形式であるためだ。OTM-JSON形式は百科事典の事も考慮して作られたのである事は薄々だが気が付いていた。ただ、OTM-JSON形式は便利な分少々踏み込みが浅いと感じている。問題点を纏めると以下になるだろう。

  • 発音を充てる場所が用意されていない。ZpDICはこれの対処を(content)の場所に発音を表す項目を入れることで代用している。
  • 例文は別の所で補完しておいた方が良いと思われる。(たった一個の単語だけで出来ているとは限らないから)
  • ニュアンスの違いを説明する場所が別にほしい。(関連語の所に説明が出来たならこんな問題はなかったんだけど……)
  • せっかく作ったイラストや絵、音声などを挿入したいのに入れにくい(簡易HTML形式に対応できれば解決だな)
  • 見出し語と関連語って関係があるような気がする。一つに纏められないかな?

とあげられるだけ問題をあげてみた。という事で自分の作りたい辞書用に新しく作る事にした。

概要

まず名前についてだが、かつて作ろうとした辞書制作ソフト"Aliory Language Maker" から名前を取り"Aliory Language Dictionary Format"縮めて"ALDiF"(アルディフ)と名づけることにした。またアルディフは二つの種類があり其々、"ALDiF-D" と "ALDiF-E" である。前者は一・二言語辞書に最適と思われる構造にし、一つの語の詳細な説明が出来るように設計した。後者は百科事典を作る際に最適そうな構造にし、幾多にわたる項目の列挙が出来るように設計している。

今の所、構成が出来上がっているのは"ALDiF-D"の方である。"ALDiF-E"は今後考えて行く事にする。

"ALDiF-D"の構造

まず、この辞書形式は総合辞書を作るための形式にしようと思っていたのでかなり詳細な設定が出来るようにしたつもりである。ちなみに、<int> は整数値を<str>は文字列を表す。更に [<hoge>] は<hoge> という要素からなる配列である。また、"|" でつながれた項目はどれか一方だけが成り立つ事を表す。

整数値は、OTM-JSON形式と同じくアプリケーションの予期せぬ動作を防ぐ為に-2147483648 以上 2147483647 未満 (符号付き 4 バイト) が望ましい。

<record> ::= {
  // このキーは以下のキー以外のキーがあってもかまわない。
  // また、言語のコードや名前などは全体で統一しておく必要がある。

  // 表示で使う言語のコードや名前など
  "language" : <str>,
  // 単語の配列
  "words" : [<word>],
  // 例文の配列
  "examples" : [<example>],
  // シソーラスの配列
  "thesauruses" : [<thesaurus>]
}

<word> ::= {
  // 単語の識別番号(<word>全体の中で一意。)
  "id" : <int>,
  "expression" : {
    // 見出し語として扱いたい<xdata>の識別番号
    "title" : <int>,
    // 語形の配列
    "data" : [<xdata>]
  },
  // タグの配列
  "tags" : [<tag>],
  // 意味解説の配列
  "meaning" : [<mean>]
}

<example> ::= {
  // 例文の識別番号(<example>全体の中で一意。)
  "id" : <int>,
  // 原文
  "text" : <str>,
  // 翻訳の配列(これは他言語に対応する為の策である。)
  "translations" : [<xtrans>]
}

<thesaurus> ::= {
  // シソーラスの識別番号(<thesaurus>全体の中で一意。)
  "id" : <int>,
  // 関連付けしたい単語の配列
  "list" : [<wlist>],
  // 関連付けした単語のニュアンスなどを説明する配列
  "summary" : [<ttext>]
}

<xdata> ::= {
  // 語形の識別番号(<xdata>全体の中で一意)
  "id" : <int>,
  // 語形の簡単な説明
  "form" : <str>,
  // 綴り
  "spelling" : <str>,
  // 発音(アクセント)
  "pronunsiation" : <str>
}

<tag> ::= {
  // タグの種類(意味論的なものか統語論的なものかなどの分類)
  "type" : <str>,
  // タグの内容
  "text" : <str>
}

<mean> ::= {
  // 品詞の情報
  "pos" : <str>,
  // 訳語の一覧
  "translations" : [<wtrans>],
  // 意味や用法などの説明
  "contents" : [<content>]
}

<xtrans> ::= {
  // 翻訳する言語のコードや名前など
  "language" : <str>,
  // 翻訳した内容
  "translation" : <str>
}

<wlist> ::= {
  // 類義や対義などの関連性の種類(任意で増設可)
  "type" : <str>,
  // 関連付ける単語の識別番号
  "word" : <int>
}

<wtrans> ::= {
  // 訳語の設定に使う言語のコードや名前など
  "language" : <str>,
  // その言語において当てはまる訳語の配列
  "forms" : [<str>]
}

<ttext> ::= {
  // 説明に使う言語のコードや名前など
  "language" : <str>,
  // 説明の内容
  "text" : <str>
}

<content> ::= {
  // 説明に使う言語のコードや名前など
  "language" : <str>,
  // 説明する内容を端的に表す見出し
  "type" : <str>,
  // 説明の内容
  "content" : <str>
}

何故に"examples"や"thesauruses"が<word>内にないのかというとどちらもその単語だけが使われている保証はなく他の意味を持つ語も含まれていると考えたためである。

<tag>の"type"が必要な理由には、一つのタグの中に意味論的なタグと統語論的なタグとが混在するとどのタグがどういう種類なのかが分からなくなり、タグ管理の品質が落ちてしまうのではないかと考えたからである。この二つのタグはどちらもタグには変わりないのだが其々用途が異なっていると思われる。意味論的なタグはその単語が表す意味の一端を担い、その語がどういう特性を持っているのかを理解するのに役立ち、統語論的なタグはその単語の用法の一端を担い、その語がどのように使われどれだけの項が必要なのかを理解するのに役立つ。そのためタグ管理は非常に重要な事項なのである。また以下に統語論的なタグと意味論的なタグの例を列挙する。

基本的に説明が長い項目(<thesaurus>の"summary"や、<content>の"summary")は簡易的なHTMLの編集機能があると良いと思われる。

統語論的なタグ 「接頭辞」、「接尾辞」、「繋辞」、「格」、「法」、「相」など
意味論的なタグ

「色彩」、「感覚」、「加工」、「身体」、「臓器」、「筋肉」、「骨格」など

今のところ関連性には以下の案がある。

  • 類義関係 (synonym)
  • 対義関係 (antonym)
  • 上位関係・下位関係 (hypernym/hyponym)
  • 派生関係・原型関係 (derivative)

"ALDiF-E"の構造

つぎに、この辞書形式はあらゆる分野にわたって説明できるように設計したつもりである。ちなみに、<int> は整数値を<str>は文字列を表す。更に [<hoge>] は<hoge> という要素からなる配列である。また、"|" でつながれた項目はどれか一方だけが成り立つ事を表す。

整数値は、OTM-JSON形式と同じくアプリケーションの予期せぬ動作を防ぐ為に-2147483648 以上 2147483647 未満 (符号付き 4 バイト) が望ましい。

<record> ::= {
  // このキーは以下のキー以外のキーがあってもかまわない。
  // また、言語のコードや名前などは全体で統一しておく必要がある。

  // 表示に使う言語のコードや名前
  "language" : <str>,
  // 内容
  "contents" : [<content>]
}

<content> ::= {
  // 項目の識別番号(<content>全体の中で一意)
  "id" : <str>
  // 見出し
  "title" : <str>,
  // 分類(基本的に最初の分類から階層を下って行く)
  "class" : [<str>],
  // 内容
  "texts" : [<text>]
}

<text> ::= {
  // 説明で使う言語のコードや名前
  "language" : <str>,
  // 説明の内容
  "text" : <str>
}