点訳エンジンのテストケースを作る
NVDA 2010.2 ユーザーガイド点訳版に含まれる文例を参考に、テストケースを追加しました。
http://bazaar.launchpad.net/~nvdajp/nvdajp/jpmain/revision/4271
可読性を考慮して、下記のフォーマットを使ってみました。
# 数 283C 3456 ⠼ 数符 # 外 2830 56 ⠰ 外字符 # 大 2820 6 ⠠ 大文字符 # - 2824 36 ⠤ 第一つなぎ符 全角マイナス # < 2826 236 ⠦ 外国語引用符 全角小なり # > 2834 356 ⠴ 外国語引用符(とじる) 全角大なり NVDA 2010.2 User Guideの日本語訳です。 <大大nvda 数2010. 数2 大user 大guide> ノ ニホンゴヤクデス。
カナはカタカナに、アルファベットは小文字に統一しています。
なお translateTest.py は実験的な点訳アルゴリズムとテストの両方を含んでおり、 mecab.py だけに依存しています。 コマンドプロンプトから Python インタプリタで単体実行できます。
この独自中間フォーマットをドットパターンに変換する処理は未実装です。
現在は nvdajp の点訳処理は Wakach.py および tenji.py で行なわれており、そのラッパーとして translate.py が用意されています。
translateTest.py は現在使われている処理とは完全に独立させました。
チケット 28989 の JTalk の更新によって、miscdep レポジトリだけで、このテストケースの実行が可能になっています。
実装
設計の基本方針
形態素ごとの処理、形態素単位のつながり判定、文字単位のつながり判定、の3段階に分けることで見通しがよくなってきました。
rev 95 で一致率 61 / 121 です。
今後、文例を外部ファイルにして、開発者が参加しやすくなるように検討します。
関連チケット #28958 liblouisの日本語対応拡張
開発スナップショット jpdev121208 に関するコメントを、テストケースに加えるために、ここにまとめます。
(1)読点のあとにマスあけ
(2)句点のあとのふたマスあけ
(3)数字の入った文章のよみで、「何年何月何日」は「何年□何月□何日」というように数符の前にマスあけを入れる
(4)1月 2月・・が1ツキ、2ツキ、・・ではなく、1月から12月まで「ガツ」と読むように
(5)1回 2回 ・・などのときに「か」と「い」の間に36のつなぎ符が、入らないように
(6)「おじいさん」「おばあさん」「おねえさん」「とおり」などの「あ」「い」「え」「お」は、25の長音符ではなく、「あ」「い」「え」「お」をそのまま使う。 「う」だけは、「おとうさん」「いもうと」など長音符。
テストケースの記述方法が変わっているので、情報をまとめます。
自動テスト用ファイルは liblouis にならって harness と呼んでいます。
データは Python のソースコードで、文字コードは UTF-8 です。Unicode 点字シンボルを使っています。
bzr で管理されている harness ファイル:
http://bzr.sourceforge.jp/view/nvdajp/nvdajpmain/annotate/head:/jptools/harness.py
自動テストを実行すると、下記の結果が得られます:
c:\work\nvda\jpmain\jptools>python jpBrailleRunner.py h1: 0 error(s). see __h1output.txt h2: 21 error(s). see __h2output.txt
h1: カナと記号のテスト
h2: テキスト解析とマスあけのテスト
になっています。
出力ファイル __h1output.txt __h2output.txt テキスト解析の中間結果を確認するためのログ __h2log.txt
h1 の処理は liblouis テーブルとして実装できそうです。
テスト用データにこれから追加しないといけないのは、文字位置の対応関係です。 これはポジションマッピングと呼ばれていて、 点訳前の文字列の何文字目が、点訳後のセルのどのマスに対応するかを示します。 タッチカーソルの位置を正しく処理するために必要です。
「点訳のてびき」2章および3章に対応するテストケースと、現在の実装における達成状況の確認が、日本語チームのボランティアのかたがたによって行われました。
現在は Microsoft Excel のファイルとして、Dropbox で関係者によって共有されています。
今後の作業はテストケースを実行可能なPythonソースコードにすること、テストケースをすこしでも多くカバーできるようにエンジンを改良することです。
達成状況をこまかく管理するために、このチケットは完了とさせていただきます。ご協力いただいたかたがたに感謝します。
関連する未解決の課題:
チケット #29364 点字ディスプレイでカーソル出力がずれる(ポジションマッピングの実装)
チケット #30164 日本語点訳エンジンにおける記号の処理
チケット #28958 liblouisの日本語対応拡張
点訳エンジン改良のために、実現するべき仕様を明確にしなくてはいけませんが、これを「テスト駆動開発」の考え方に当てはめると、テストケースを整備することがひとつの目標と考えられます。
この作業は昨年から構想しているのですが、進んでいません。
例えば下記のようなテストコードが nvdajp に入っています。これはカナ変換と分かち書きに関する自動テストの実装案です。
日本語の分かち書き規則だけではなく、記号、数字、英字の混在など、さまざまなケースを集めたいと思います。
JTalk のテキスト解析とも連携して整備すべきと思います。