esperecyan / dictionary-php
従来の辞書形式と「主に単語で答えるゲームにおける汎用的な辞書形式」の構文解析、直列化を行う API を提供します。
Fund package maintenance!
esperecyan
Requires
- php: >=7.1
- ext-exif: *
- ext-gd: *
- ext-gettext: *
- ext-intl: *
- ext-mbstring: *
- ext-spl: *
- ext-zip: *
- danielstjules/stringy: ^3.0.0
- esperecyan/html-filter: ^1.0.1
- esperecyan/url: ^5.0.0
- intervention/image: ^2.5.1
- james-heinrich/getid3: ^1.9.12
- league/commonmark: ^1.2.2
- league/html-to-markdown: ^4.2.0
- logue/igo-php: ^0.2.0
- mbilbille/jpnforphp: ^0.8.1
- nelexa/zip: ^3.1.4
- psr/log: ^1.0.0
- scriptfusion/byte-formatter: ^3.2.0
Requires (Dev)
- phpunit/phpunit: ^8.5.2
- dev-master
- v0.9.2
- v0.9.1
- v0.9.0
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.9
- v0.7.8
- v0.7.7
- v0.7.6
- v0.7.5
- v0.7.4
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.0
- v0.5.1
- v0.5.0
- v0.4.0
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.0
- v0.1.0
- dev-dependabot/composer/guzzlehttp/psr7-1.8.5
- dev-dependabot/composer/james-heinrich/getid3-1.9.21
- dev-esperecyan/dictionary-api
This package is auto-updated.
Last update: 2024-10-29 04:47:26 UTC
README
次のゲームの辞書を構文解析し、相互に変換できるようにする API を提供します。
- 主に単語で答えるゲームにおける汎用的な辞書形式 (以下、汎用辞書形式)
- キャッチフィーリング、Drawing Catch (*.cfq)
- きゃっちま (*.dat) ※暗号化後のファイルは扱えません
- Inteligenceω (*.txt, *.zip) ※暗号化後のファイルは扱えません
- ピクトセンス
Inteligenceωの辞書で画像・音声ファイルへのパスが含まれる場合、 そのファイルが含まれるフォルダをdatファイルと一緒にアーカイブする必要があります。 同名のファイルが含まれる辞書 (同名のファイルを別々のフォルダに分けて格納したアーカイブ) は取り扱えません。
例
<?php require_once 'vendor/autoload.php'; use esperecyan\dictionary_php as dictionary; $file = new \SplTempFileObject(); $file->fwrite(mb_convert_encoding(<<<'EOD' % 選択問題 Q,2,,../images/sun.mp4 A,1,地球,カロン,太陽,\seikai Q,0,仲間外れはどれでしょう A,1,リンゴ,\seikai,ゴリラ,ラクダ,ダチョウ,\explain=選択肢を表示しなければ問題が成立しない場合。 % 答えが複数あり、どれか1つを選択すれば正解になる場合 Q,0,食べ物はどれでしょう (答えが複数ある場合はどれが1つだけ選択) A,1,リンゴ,\seikai,ゴリラ,ラッパ,パン,\seikai % 答えが複数あり、すべて選択する必要がある場合 Q,0,同じ種類のものを選びましょう A,3,リンゴ,\seikai,ゴリラ,ラッパ,パン,\seikai % 並べ替え問題 q,0,しりとりが成立するように並べ替えてください % 問題行と解答行の間のコメント行と空行 a,2,リンゴ,1,パン,4,ゴリラ,2,ラッパ,3 EOD , 'Windows-31J', 'UTF-8')); $parser = new dictionary\Parser(null, '選択・並べ替え問題.txt'); $dictionary = $parser->parse($file); $serializer = new dictionary\serializer\GenericDictionarySerializer(); $serializer->response($dictionary);
上の例の出力は以下となります。
text,image,answer,answer,description,specifics,question,option,option,option,option,type,@title
太陽,local/sun.png,太陽,,,,,地球,カロン,太陽,,selection,選択・並べ替え問題
リンゴ,,リンゴ,,選択肢を表示しなければ問題が成立しない場合。,,仲間外れはどれでしょう,リンゴ,ゴリラ,ラクダ,ダチョウ,selection,
「リンゴ」か「パン」,,リンゴ,パン,,,"食べ物はどれでしょう (答えが複数ある場合はどれが1つだけ選択)",リンゴ,ゴリラ,ラッパ,パン,selection,
「リンゴ」と「パン」,,リンゴ,パン,,require-all-right=,同じ種類のものを選びましょう,リンゴ,ゴリラ,ラッパ,パン,selection,
"リンゴ → ゴリラ → ラッパ → パン",,,,,,しりとりが成立するように並べ替えてください,リンゴ,ゴリラ,ラッパ,パン,selection,
インストール
composer require esperecyan/dictionary-php
Composer のインストール方法については、Composer のグローバルインストール - Qiitaなどをご覧ください。
要件
- PHP 7.1 以上
- php-mbstring (mbstring拡張モジュール)
- exif拡張モジュール
- php-intl (Intl拡張モジュール)
- php-gd (GD拡張モジュール)
- php-pecl-zip (Zip拡張モジュール)
パブリックAPI
class esperecyan\dictionary_php\Parser(string $from = null, string $filename = null, string $title = null)
構文解析器。
string $from = null
変換元の辞書形式。キャッチフィーリング
きゃっちま
Inteligenceω クイズ
Inteligenceω しりとり
ピクトセンス
汎用辞書
のいずれか。
指定されていないか間違った値が指定されていれば、$filename
から判断します。
その場合のInteligenceωについては、コメント行、空行を除く最初の行が Q,
で始まるか否かで、クイズとしりとりを判別します。
string $filename = null
変換元のファイル名。
string $title = null
辞書のタイトル。
指定されていなければ、$filename
から判断します。
汎用辞書形式で @title
フィールドが存在する場合、この指定は無視されます。
Dictionary esperecyan\dictionary_php\Parser#parse(SplFileInfo $file, bool $header = null, string[] $filenames = [])
SplFileInfo $file
変換元のファイルをSplFileInfo、またはその派生クラスで与えます。
bool $header = null
変換元のファイルが 汎用辞書
の場合、ヘッダ行が存在すれば true
、存在しなければ false
、不明なら null
を指定します。
string[] $filenames = []
変換元のファイルが 汎用辞書
の場合、$file
にZIPファイルを与える代わりに、$file
にCSVファイルを与えこの引数にファイル名のリストを与えることで、
「画像・音声・動画ファイルを含む場合のファイル形式」の構文解析できます。
例外 esperecyan\dictionary_php\exception\SyntaxException
SyntaxException#getMessage() から、ユーザーに示すエラーメッセージを取得できます。
ロギング
esperecyan\dictionary_php\ParserはPSR-3: Logger InterfaceのPsr\Log\LoggerAwareInterfaceを実装しています。
class esperecyan\dictionary_php\Serializer(string $to = '汎用辞書')
直列化器。
string $to = '汎用辞書'
変換先の辞書形式。キャッチフィーリング
きゃっちま
Inteligenceω クイズ
Inteligenceω しりとり
ピクトセンス
汎用辞書
のいずれか。
指定されていないか間違った値が指定されていれば、汎用辞書
になります。
string[] esperecyan\dictionary_php\Serializer#serialize(Dictionary $dictionary, bool|string $csvOnly = false)
次のような構造の連想配列で直列化したデータを返します。
- [bytes] => 直列化したデータのバイナリ文字列
- [type] => MIME型 (charsetパラメータなどをともなう)
- [name] => ファイル名
Dictionary $dictionary
辞書。
bool|string $csvOnly = false
汎用辞書
Inteligenceω クイズ
の場合、ZIPファイルの代わりにCSVファイル、txtファイルのみを返すときに真に設定します。
真の代わりに https://example.ne.jp/dictionaries/1/files/%s
のような文字列を設定することで、%s
をファイル名に置き換えて辞書ファイル中に記述します。
例外 esperecyan\dictionary_php\exception\SerializeExceptionInterface
SerializeExceptionInterface#getMessage() から、ユーザーに示すエラーメッセージを取得できます。 以下の例外はいずれも SerializeExceptionInterface を実装しています。
ロギング
class esperecyan\dictionary_php\Dictionary
辞書データ。
(string|string[]|float)[][][] esperecyan\dictionary_php\Dictionary#getWords()
次のような構造の多次元配列で表されたお題の一覧を返します。
- [0] =>
- [text] => array(文字列)
- [image] => array(文字列)
- [image-source] =>
- [0] =>
- [lml] => CommonMark (文字列)
- [html] => HTML (文字列)
- [0] =>
- [audio] => array(文字列)
- [audio-source] =>
- [0] =>
- [lml] => CommonMark (文字列)
- [html] => HTML (文字列)
- [0] =>
- [video] => array(文字列, ……)
- [video-source] =>
- [0] =>
- [lml] => CommonMark (文字列)
- [html] => HTML (文字列)
- [0] =>
- [answer] => array(文字列, ……)
- [description] => array(文字列)
- [weight] => array(浮動小数点数)
- [specifics] => array(文字列)
- [question] => array(文字列)
- [option] => array(文字列, ……)
- [type] => array(文字列)
- [1] => ……
- [2] => ……
- ……
(string|string[])[] esperecyan\dictionary_php\Dictionary#getMetadata()
次のような構造の多次元配列で表されたメタフィールドの一覧を返します。
- [@title] => 文字列
- [@summary] =>
- [lml] => CommonMark (文字列)
- [html] => HTML (文字列)
- [@regard] => 文字列
FilesystemIterator esperecyan\dictionary_php\Dictionary#getFiles()
辞書に同梱されるファイルを返します。
esperecyan\dictionary_php\Dictionary#setFiles(FilesystemIterator $files)
辞書に同梱されるファイルを設定します。それぞれ同梱されるファイルとして妥当で、 かつすべてのファイル名とParser#parse()の第3引数$filenamesに与えたファイル名が一致している必要があります。
class esperecyan\dictionary_php\Validator()
辞書に同梱されるファイルのバリデータ。
string[] esperecyan\dictionary_php\Validator#correct(string|SplFileInfo $file, string $filename)
Serializer#serialize()の戻り値と同じ構造の戻り値を返します。
string|SplFileInfo $file
ファイルをバイナリ文字列、SplFileInfo、その派生クラスのいずれかで与えます。
string $filename
ファイル名。
例外 esperecyan\dictionary_php\exception\SyntaxException
SyntaxException#getMessage() から、ユーザーに示すエラーメッセージを取得できます。
ロギング
esperecyan\dictionary_php\ValidatorはPSR-3: Logger InterfaceのPsr\Log\LoggerAwareInterfaceを実装しています。
Contribution
Pull Request、または Issue よりお願いいたします。
セマンティック バージョニング
当ライブラリはセマンティック バージョニングを採用しています。 パブリックAPIは、上記のとおりです。
ライセンス
当スクリプトのライセンスは Mozilla Public License Version 2.0 (MPL-2.0) です。