「主にひらがなで答えるネット対戦ゲーム」の辞書形式

<i class="fa fa-github"></i> 仕様書を作成しました【2015-12-02】
===============================================================
主に単語で答えるゲームにおける汎用的な辞書形式
https://github.com/esperecyan/dictionary/blob/master/dictionary.md

今後の議論は、同リポジトリへのPull RequestやIssueの投稿などでお願いいたします。

-------------------------------------------------------------------------------

概要
====
次のセクションにリストアップしているゲームは、いずれも独自の辞書形式を用いており互換性がありません。汎用的 (標準的) な辞書形式の仕様を作る場合、適切な形式がどういうものかを考えます。コメントや編集リクエストで意見をいただけるとありがたいです。

当記事の初版は、私が一例として個人的にざっくりと書いたものです。これを叩き台としてある程度かたちになったら、仕様書としての原案を作成したいと考えています。

既存の辞書形式
==============
|                                 | お題に設定できるもの                       | 複数の回答 [^曖昧] | 本来の表記 [^答え] | 解説 | その他の制限                                                               |
|---------------------------------|--------------------------------------------|--------------------|--------------------|------|----------------------------------------------------------------------------|
| [キャッチフィーリング] \(*.cfq) | 文字                                       |                    |                    |      | ひらがな・カタカナを同一視                                                 |
| [Drawing Catch] \(*.cfq)        | 文字                                       |                    |                    |      |                                                                            |
| [きゃっちま] \(*.dat)           | 文字                                       | 可                 |                    |      | 辞書全体の文字数が多すぎるものは不可                                       |
| [ピクトセンス]                  | 文字 (ひらがな [^dash])                    |                    |                    |      | お題の数は5〜500<br>1つのお題は32文字以下<br>辞書全体の文字数は5〜5000文字 |
| [Inteligenceω] \(*.txt)        | 文字 (ひらがな [^hiragna])<br>画像<br>音声 | 可                 | 可                 | 可   |                                                                            |
| ([おえかきの森])                | 文字 (ひらがな)                            | 可                 | 可                 |      |                                                                            |

[^dash]: `〜` は不可
[^hiragna]: `ゔ` や `〜` は不可
[^曖昧]: 1つのお題に対し、複数の回答を設定できること。たとえば、「玉子焼き」に対して「たまごやき」、「だしまきたまご」、「あつやきたまご」など
[^答え]: ひらがなではない漢字やカタカナの表記を設定できること。たとえば、「たいよう」に対して「太陽」など

[キャッチフィーリング]: https://secure.pokemori.jp/catchfeeling-runtime
[Drawing Catch]: http://drafly.nazo.cc/games/olds/DC
[きゃっちま]: http://vodka-catchm.seesaa.net/article/115922159.html
[ピクトセンス]: http://pictsense.com/
[Inteligenceω]: http://page.freett.com/loxteam/inteli.htm
[おえかきの森]: http://casual.hangame.co.jp/oekaki/

汎用的な辞書形式の要件
======================
* 日本語以外を主体とした辞書を作成できるように、お題をひらがなに制限しない
* 複数の回答、本来の表記、解説を設定できる
* お題や解説で利用できるようにするため、画像、音声を含むことができる形式
	* 動画も扱うか否か【2015-11-10】
	* トリミング位置や表示位置などの細かな属性を指定しやすい形式【2015-11-10】
* ひらがな・カタカナ、大文字・小文字、半角・全角【2015-11-10】の同一視
* 人が読み書きしやすいように、text/* なMIMEタイプをもつ形式
* 既存のサービスで管理しやすいように、標準で [表計算ソフト] が付属する [Google ドライブ] などの [オンラインストレージ] で扱える形式【2015-11-09】
* コンピューターが読み書きしやすいように、標準化されている、または広く使われている形式
* お題の出題頻度の設定【2015-11-07】
* 文字数制限をどうするか【2015-11-08】
* 選択問題や並べ替え問題用の辞書を区別するための、辞書自体の種類の指定【2015-11-10】
	* 辞書単位ではなく問題単位で指定するか【2015-11-12】
* 回答が複数ある場合の一括指定 (正規表現やワイルドカード)【2015-11-10】
	* その際のエスケープシーケンス

[表計算ソフト]: https://ja.wikipedia.org/wiki/%E8%A1%A8%E8%A8%88%E7%AE%97%E3%82%BD%E3%83%95%E3%83%88
[Google ドライブ]: https://ja.wikipedia.org/wiki/Google_%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96
[オンラインストレージ]: https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8

汎用的な辞書形式の提案
======================
&#x20;
<dl>
<dt>テキストファイルの形式</dt><dd>(案A) [YAML]</dd><dd>(案B) [CSV]</dd><dd>書き方を覚えなくても辞書の作成・編集ができるように、オンラインエディタを用意する</dd>

<dt>画像、音声を含む場合の形式</dt><dd>[ZIP]</dd><dd>テキストファイルを1つと、1つ以上の画像・音声ファイルを含む</dd>

<dt>解説の形式</dt><dd>[CommonMark]&#x20;[^方言]</dd>

<dt>画像ファイルの形式</dt><dd>[PNG]、[JPEG]、[GIF]、[SVG]</dd>

<dt>音声ファイルの形式</dt><dd>[MP4] \([AAC])、[MP3]</dd><dd>上記は `<audio>` で広くサポートされている形式 [^audio] 【2015-11-08】</dd>

<dt>動画ファイルの形式【2015-11-14】</dt><dd>[MP4] \([H.264]+[AAC])</dd><dd>上記は `<video>` で広くサポートされている形式 [^audio]</dd>

<dt>仕様の公開場所</dt><dd>[GitHub]</dd><dd>リポジトリ名: `dictionary` 【2015-11-14】</dd><dd>仕様の名前: `主に単語で答えるゲームにおける汎用的な辞書形式` 【2015-11-14】</dd>

<dt>仕様書のライセンス</dt><dd>[CC BY 4.0]</dd>
</dl>

[^方言]: [Markdown] の方言の一つ。
[^audio]: [HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット - HTML | MDN](https://developer.mozilla.org/docs/Web/HTML/Supported_media_formats)

[YAML]: https://ja.wikipedia.org/wiki/YAML
[CSV]: https://ja.wikipedia.org/wiki/Comma-Separated_Values
[ZIP]: https://ja.wikipedia.org/wiki/ZIP_(%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88)
[CommonMark]: http://commonmark.org/
[PNG]: https://ja.wikipedia.org/wiki/Portable_Network_Graphics
[JPEG]: https://ja.wikipedia.org/wiki/JPEG
[GIF]: https://ja.wikipedia.org/wiki/Graphics_Interchange_Format
[SVG]: https://ja.wikipedia.org/wiki/Scalable_Vector_Graphics
[MP4]: https://ja.wikipedia.org/wiki/MP4
[AAC]: https://ja.wikipedia.org/wiki/AAC
[MP3]: https://ja.wikipedia.org/wiki/MP3
[H.264]: https://ja.wikipedia.org/wiki/H.264
[GitHub]: https://ja.wikipedia.org/wiki/GitHub
[Markdown]: https://ja.wikipedia.org/wiki/Markdown
[CC BY 4.0]: https://creativecommons.org/licenses/by/4.0/deed.ja

YAML採用の例【2015-11-07】
==========================
簡単な形
--------

### 案A

```yaml
title: 天体
words:
- たいよう
- ちきゅう
- カロン
```

### 案B

```yaml
$title: 天体
たいよう:
ちきゅう:
カロン:
```

「ルートオブジェクトのキー」をこのように「本来の表記」とする場合、「`$` + アルファベット」を前方互換性のために予約語のような扱いにしなければならないかもしれません。

画像や解説などを含む形
----------------------

```yaml
$title: 天体
$description: 恒星、惑星、衛星などのリスト。
太陽:
  image: sun.png
  answer: [たいよう, おひさま]
  description: 恒星。
地球:
  image: earth.png
  answer: ちきゅう
  description: 惑星。
カロン:
  image: charon.png
  description: |
    冥王星の衛星。
    
    > カロンは1978年6月22日にアメリカの天文学者ジェームズ・クリスティーによって発見された。
    > その後、冥王星が冥府の王プルートーの名に因むことから、
    > この衛星はギリシア神話の冥府の川・アケローンの渡し守カローンにちなんで「カロン」と命名された。
    > なおクリスティーは当初から一貫してCharonの「char」を
    > 妻シャーリーン（Charlene） のニックネーム「シャー（Char）」と同じように発音していたため、
    > これが英語圏で定着して「シャーロン」と呼ばれるようになった。
    引用元: [カロン (衛星) - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AD%E3%83%B3_(%E8%A1%9B%E6%98%9F))
```

`image` で指定された画像ファイルを使って、キャラ当てクイズをしたり、お絵描きクイズの解説の一部としたりすることができるでしょう。

`answer` を含むお題の場合、ルートオブジェクトのキー (上の例では `太陽` `地球`) を答えるときに使えるか否か、またどれをヒントとして扱うかがわかりません。場合によっては冗長になりますが、`answer` を含むお題の場合、ルートオブジェクトのキーを答えとして使えないように取り決める必要があるかと思います。【2015-11-08】

音声ファイルを含む形
--------------------

```yaml
$title: クラシック音楽
四季:
  audio: four-seasons.mp4
  answer: [しき, はる]
魔王:
  audio: erlking.mp4
  answer: まおう
ラデツキー行進曲:
  audio: radetzky-march.mp4
  answer: らでつきーこうしんきょく
```

`audio` はイントロ当てクイズに使ったり、もしくはお絵描きクイズの解説の一部として用いることもできるかもしれません。

### オプションの指定案A【2015-11-12】

```yaml
$title: クラシック音楽
四季:
  audio: four-seasons.mp4
  start: 50
  length: 3
  answer: [しき, はる]
```

### オプションの指定案B【2015-11-12】

```yaml
$title: クラシック音楽
四季:
  audio: four-seasons.mp4
  specifics:
    start: 50
    length: 3
  answer: [しき, はる]
```

### オプションの指定案C【2015-11-12】

```yaml
$title: クラシック音楽
四季:
  audio:
    file: four-seasons.mp4
    start: 50
    length: 3
  answer: [しき, はる]
```

`start` に再生開始位置の秒数、`length` に再生秒数を指定する例。

お題の出題頻度 (重み付け)
-------------------------

```yaml
$title: ポケモン
よめ:
  weight: 3
  description: このお題は他のお題の3倍出題されやすい。
ピカチュウ:
カイリュー:
ヤドラン:
ミュウ:
  weight: 0.5
  description: このお題は他のお題より出題されにくい。
```

キャッチフィーリング等の辞書で、出題頻度を上げるために同じお題を繰り返す場合がありましたが、その代替として。

選択・並べ替え問題【2015-11-12】
--------------------------------

### 案A

```yaml
$title: 選択・並べ替え問題
林檎:
  question: 仲間外れはどれでしょう
  option: [リンゴ, ゴリラ, ラクダ, ダチョウ]
  answer: 1
林檎かパン:
  question: 食べ物はどれでしょう (答えが複数ある場合はどれが1つだけ選択)
  option: [リンゴ, ゴリラ, ラッパ, パン]
  answer: [1, 4]
食べ物:
  question: 同じ種類のものを選びましょう
  option: [リンゴ, ゴリラ, ラッパ, パン]
  answer: "14"
リンゴ→ゴリラ→ラクダ→ダチョウ:
  question: しりとりが成立するように並べ替えてください
  option: [リンゴ, ゴリラ, ラクダ, ダチョウ]
  answer: "1234"
```

### 案B

```yaml
$title: 選択・並べ替え問題
太陽:
  image: sun.png
  option: [太陽, 地球, カロン]
  answer: たいよう
  description: 最初の選択肢 (ここでは「太陽」) を答えとして扱う。
林檎:
  question: 仲間外れはどれでしょう
  option: [リンゴ, ゴリラ, ラクダ, ダチョウ]
  answer: リンゴ
  type: selection
  description: 選択肢を表示しなければ問題が成立しない場合。
林檎かパン:
  question: 食べ物はどれでしょう (答えが複数ある場合はどれが1つだけ選択)
  option: [リンゴ, ゴリラ, ラッパ, パン]
  answer: [リンゴ, パン]
  type: selection
食べ物:
  question: 同じ種類のものを選びましょう
  option: [リンゴ, ゴリラ, ラッパ, パン]
  answer: [リンゴ, パン]
  specifics:
    require-all-right: true
  type: selection
リンゴ→ゴリラ→ラクダ→ダチョウ:
  question: しりとりが成立するように並べ替えてください
  option: [リンゴ, ゴリラ, ラクダ, ダチョウ]
  type: selection
  description: answerが存在しなければ並べ替え問題として扱う。
```

こちらの案では、ゲームの種類や難易度設定などに応じて、選択肢を表示したりしなかったりする問題 (上の「太陽」の例) が作成できます。


ひらがな以外で答える辞書・正規表現を含む辞書【2015-11-12】
----------------------------------------------------------

```yaml
$title: 英単語
$regard: !regexp /[a-z]+/
title:
  answer: [たいとる]
description:
text:
  answer: [text, !regexp /て[くき]すと/]
```

正規表現は [HTMLのpattern属性] のように、全体に一致するものとして扱うのが良いと思います。`answer` に正規表現を指定する場合、ヒント生成・お手付き判定のため、必ず文字列も指定しておかなければなりません。また、プログラミング言語間の互換性のため、構文を制限する必要があるでしょう。

ひらがな以外で答える辞書の場合、お手付き判定のため、以上の例の `$regard` のように、追加の文字の指定が必要になってくるかと思います。

[HTMLのpattern属性]: https://developer.mozilla.org/docs/Web/HTML/Element/Input#attr-pattern

CSV採用の例【2015-11-09】
=========================
簡単な形
--------

```csv
たいよう
ちきゅう
カロン
```

画像や解説などを含む形
----------------------

```csv
text,image,answer,answer,description,title,summary
太陽,sun.png,たいよう,おひさま,恒星。,天体,恒星、惑星、衛星などのリスト。
地球,earth.png,ちきゅう,,惑星。,,
カロン,charon.png,,,"冥王星の衛星。

> カロンは1978年6月22日にアメリカの天文学者ジェームズ・クリスティーによって発見された。
> その後、冥王星が冥府の王プルートーの名に因むことから、
> この衛星はギリシア神話の冥府の川・アケローンの渡し守カローンにちなんで「カロン」と命名された。
> なおクリスティーは当初から一貫してCharonの「char」を
> 妻シャーリーン（Charlene） のニックネーム「シャー（Char）」と同じように発音していたため、
> これが英語圏で定着して「シャーロン」と呼ばれるようになった。
引用元: [カロン (衛星) - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AD%E3%83%B3_(%E8%A1%9B%E6%98%9F))",,
```

| text   | image      | answer   | answer   | description | title | summary                        |
|--------|------------|----------|----------|-------------|-------|--------------------------------|
| 太陽   | sun.png    | たいよう | おひさま | 恒星。      | 天体  | 恒星、惑星、衛星などのリスト。 | 
| 地球   | earth.png  | ちきゅう |          | 惑星。      |       |                                |
| カロン | charon.png |          |          | "冥王星の衛星。<br><br>> カロンは1978年6月22日にアメリカの天文学者ジェームズ・クリスティーによって発見された。<br>> その後、冥王星が冥府の王プルートーの名に因むことから、<br>> この衛星はギリシア神話の冥府の川・アケローンの渡し守カローンにちなんで「カロン」と命名された。<br>> なおクリスティーは当初から一貫してCharonの「char」を<br>> 妻シャーリーン（Charlene） のニックネーム「シャー（Char）」と同じように発音していたため、<br>> これが英語圏で定着して「シャーロン」と呼ばれるようになった。<br>引用元: \[カロン (衛星) - Wikipedia](https\://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%AD%E3%83%B3_(%E8%A1%9B%E6%98%9F))" | |

音声ファイルを含む形
--------------------

```csv
text,audio,answer,answer,title
四季,four-seasons.mp4,しき,はる,クラシック音楽
魔王,erlking.mp4,まおう,,,
ラデツキー行進曲,radetzky-march.mp4,らでつきーこうしんきょく,,,
```

| text             | audio              | answer                   | answer | title          |
|------------------|--------------------|--------------------------|--------|----------------|
| 四季             | four-seasons.mp4   | しき                     | はる   | クラシック音楽 |
| 魔王             | erlking.mp4        | まおう                   |        |                | 
| ラデツキー行進曲 | radetzky-march.mp4 | らでつきーこうしんきょく |        |                |

### オプションの指定案A【2015-11-12】

| text             | audio              | start | length | answer | answer | title          |
|------------------|--------------------|-------|--------|--------|--------|----------------|
| 四季             | four-seasons.mp4   | 50    | 3      |しき    | はる   | クラシック音楽 |

### オプションの指定案B【2015-11-12】

| text             | audio              | specifics         | answer | answer | title          |
|------------------|--------------------|-------------------|--------|--------|----------------|
| 四季             | four-seasons.mp4   | start=50&length=3 |しき    | はる   | クラシック音楽 |

`specifics` に [application/x-www-form-urlencoded] 形式で埋め込む例。

[application/x-www-form-urlencoded]: http://www.hcn.zaq.ne.jp/___/WEB/URL-ja.html#application/x-www-form-urlencoded

お題の出題頻度 (重み付け)
-------------------------

```csv
text,weight,description,title
よめ,3,このお題は他のお題の3倍出題されやすい。,ポケモン
ピカチュウ,,,
カイリュー,,,
ヤドラン,,,
ミュウ,0.5,このお題は他のお題より出題されにくい。,
```

| text       | weight | description                             | title    |
|------------|--------|-----------------------------------------|----------|
| よめ       | 3      | このお題は他のお題の3倍出題されやすい。 | ポケモン |
| ピカチュウ |        |                                         |          |
| カイリュー |        |                                         |          |
| ヤドラン   |        |                                         |          |
| ミュウ     | 0.5    | このお題は他のお題より出題されにくい。  |          |

選択・並べ替え問題【2015-11-12】
--------------------------------

### 案A

| text                             | question                                                     | option | option | option | option   | answer | answer | title              |
|----------------------------------|--------------------------------------------------------------|--------|--------|--------|----------|--------|--------|--------------------|
| 林檎                             | 仲間外れはどれでしょう                                       | リンゴ | ゴリラ | ラクダ | ダチョウ | 1      |        | 選択・並べ替え問題 |
| 林檎かパン                       | 食べ物はどれでしょう (答えが複数ある場合はどれが1つだけ選択) | リンゴ | ゴリラ | ラッパ | パン     | 1      | 4      |                    |
| 食べ物                           | 同じ種類のものを選びましょう                                 | リンゴ | ゴリラ | ラッパ | パン     | 14     |        |                    |
| リンゴ→ゴリラ→ラクダ→ダチョウ | しりとりが成立するように並べ替えてください                   | リンゴ | ゴリラ | ラクダ | ダチョウ | 1234   |        |                    |

### 案B

| text                             | image   | question                                                     | option | option | option | option   | answer   | answer | specifics            | type      | description | title              |
|----------------------------------|---------|--------------------------------------------------------------|--------|--------|--------|----------|----------|--------|----------------------|-----------|-------------|--------------------|
| 太陽                             | sun.png |                                                              | 太陽   | 地球   | カロン |          | たいよう |        |                | | 最初の選択肢 (ここでは「太陽」) を答えとして扱う。 | 選択・並べ替え問題 |
| 林檎                             |         | 仲間外れはどれでしょう                                       | リンゴ | ゴリラ | ラクダ | ダチョウ | リンゴ   |        |                      | selection | 選択肢を表示しなければ問題が成立しない場合。| |
| 林檎かパン                       |         | 食べ物はどれでしょう (答えが複数ある場合はどれが1つだけ選択) | リンゴ | ゴリラ | ラッパ | パン     | リンゴ   | パン   |                      | selection |             |                    |
| 食べ物                           |         | 同じ種類のものを選びましょう                                 | リンゴ | ゴリラ | ラッパ | パン     | リンゴ   | パン   | require-all-right=on | selection |             |                    |
| リンゴ→ゴリラ→ラクダ→ダチョウ |         | しりとりが成立するように並べ替えてください                   | リンゴ | ゴリラ | ラクダ | ダチョウ |          |        |                      | selection | answerが存在しなければ並べ替え問題として扱う。 | |

ひらがな以外で答える辞書・正規表現を含む辞書【2015-11-12】
----------------------------------------------------------

| text        | answer   | answer         | title  | regard   |
|-------------|----------|----------------|--------|----------|
| title       | たいとる |                | 英単語 | /[a-z]+/ |
| description |          |                |        |          |
| text        | text     | /て[くき]すと/ |        |          |

脚注
====