Ticket #34783

点訳エンジンのポジションマッピング処理におけるUnicode正規化の扱い

Open Date: 2015-01-06 10:45 Last Update: 2016-08-30 10:40

Reporter:
Owner:
Type:
Status:
Open [Owner assigned]
Component:
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Accepted
File:
None

Details

半角カタカナの半濁点を含むテキストで点字カーソルの位置がおかしくなる現象についてご指摘をいただいています。

日本語点訳エンジンのポジションマッピング処理において、半角カタカナ記号の扱いが適切でないためと思います。

まだ詳細の確認をしていませんが、mecabでテキスト解析をするための前処理でユニコード正規化をしており、ここで文字数が変わってしまうためと思われます。

Ticket History (3/6 Histories)

2015-01-06 10:45 Updated by: nishimoto
  • New Ticket "点訳エンジンのポジションマッピング処理における半角カタカナ記号の扱い" created
2015-01-07 18:03 Updated by: nishimoto
  • Resolution Update from None to Accepted
Comment

miscDepsJp の更新

To git@bitbucket.org:nvdajp/nvdajpmiscdep.git
   be7ad5e..041f562  master -> master

状況を確認したので、暫定的に、点訳エンジンの入力文字列がすべて半角カタカナの場合は、テキスト解析も Unicode 正規化もスキップする、という処理を追加しています。

カナ表記から点字パターンへの変換 (translator1.py) でもう一度 Unicode 正規化されるのですが、今度は「カ」「濁点」が2マスに点訳されて、たまたま文字数が変わらないので、うまくいっている、という状況です。

半角カタカナと他の文字が混じるとうまくいきません。 もうすこしまともな方法がないか、引き続き考えてみます。

2015-01-07 18:12 Updated by: nishimoto
  • Component Update from (None) to 点訳エンジン
  • Owner Update from (None) to nishimoto
2015-06-22 09:25 Updated by: nishimoto
Comment

根本的には音声合成の正規化は NFKD で、点字の正規化は NFD で、というように Unicode 正規化を使い分けて、 点字ではできるだけ文字数の変わらない正規化をするべき、と思えてきました。

2015-06-22 09:31 Updated by: nishimoto
Comment

訂正: 根本的には音声合成の正規化は NFKC で、点字の正規化は NFC で、 というように Unicode 正規化を使い分けて、 点字では半角カタカナの文字数の変わらない正規化をするべき。

Decompose された全角カタカナが入力されたときにポジションマッピングできない問題は解決できないが、 こちらもちゃんとやるなら、 そもそも「正規化されてない文字列のすべての可能性をカバーできるテキスト解析」 をしなくてはならない。

2016-08-30 10:40 Updated by: nishimoto
  • Summary Updated
Comment

課題名を 「点訳エンジンのポジションマッピング処理における半角カタカナ記号の扱い」 から 「点訳エンジンのポジションマッピング処理におけるUnicode正規化の扱い」 に変更。

指摘があったケース:

	{
		'text':'ああ…こまった。',
		'input':'アア...コマッタ。',
		'output':'⠁⠁⠲⠲⠲⠪⠵⠂⠕⠲',
	},

'\u2026' をピリオド3個に正規化しているので、文字数が変わってしまう:

>>> import unicodedata
>>> print unicodedata.normalize('NFKC', u'ああ…こまった。')
ああ...こまった。

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login