nvdajp_braille
目次
nvdajp_braille
NVDA日本語チーム nvdajp における作業。
新しいエンジンの設計
since 2012-07-15
NVDAユーザ会広島 における議論。
- (1) 前処理: 外字引用符 情報点字など、日本語処理から除外する部分を分離
- (2) 形態素解析(Mecab):連語の分かち書き、数符、長音、仮名遣い(「ぢ、づ」など)を辞書に追加
- (3) 形態素単位の処理:
- 辞書の追加情報の反映:連語、長音
- 未知語の品詞情報の修正:英字、数字、記号、空白
- 数字の変換
- (4) 形態素の連接による分かち判定
- (5) 文字単位の後処理
- 前処理(1)で分離された部分を liblouis 的な方法で点訳して、ここで (2)(3)(4) の処理結果とマージする
- 外 大 数 つなぎ符 記号などの処理
- ドットパターンに変換
日本語に依存する部分は (2)(3)(4) の部分。(1) で除外した部分は liblouis に投げるか、同じような処理をする。
(2) の処理は libopenjtalk 音声合成エンジンと辞書を共通化する。
liblouis
なぜ liblouis で日本語点訳が難しいか。。
KGS社のドライバ
- bmutil_j501_x64.exe
- ksusbserdrv145.exe
KGS社の開発情報
点訳エンジン
2012.2jp-beta1 までは Python コンソールで以下のような実験ができる
from nvdajptext import * print Wakach.Mecab_wakach(u"形態素解析")
2012.2jp-beta2 以降では以下のとおり(予定):
from synthDrivers.jtalk import * print Wakach.Mecab_wakach(u"形態素解析")
ドライバ関連
since 2010-12-30
nvdajp を点字ディスプレイに対応させる作業。
@hoozukiyama さんの報告に基づくメモ。
KGS の DirectBM.dll を使用している。
成果 1.点字変換辞書の作成(カナ、数符、アルファベット大文字、アルファベット小文字) 2.数符、外字符、外字符内大文字と小文字の状態遷移の処理実装 3.ピンディスプレイキー入力コールバック処理への機能追加(ファンクションキー、タッチカーソル、矢印、6点字などの入力) 4.ピンディスプレイへの文字列パターン出力処理の実装(全角文字列→出力パターン) 5.上記4点の機能を実験レベルでNVDA実装 課題 1.半角文字の処理。 2.漢字、平仮名を含む文字列を分かちされたカタカナ文字列に変換。(mecabの使用を検討) 3.Windows側のUI通知のピンディスプレイ出力処理。 3.ピンディスプレイ側の入力通知をWindows側の処理に反映(sendkeyの発行) 4.初期化、終了処理の実装 5.ユーザーインターフェイスの作成
2011.1.1j での試験的実装
since 2011-06-13
Wakach.py の Mecab_split
- 品詞名を見ている。記号、空白は rr, ss へ
- ss「空白」→ s2 に " " を追加
- ss「数」 → 表記を正規化して変化の有無をチェックする。
- 変化あり → 表記(フィールド0)を使う
- 変化なし → フィールド9 を使う、空白を追加
- naist-jdic には「記号」「数」として全角「、」や「・」が含まれているので注意が必要
要検討事項
- jdic 単語をさらに分割すべき場合がある
- jdic 単語を複数連結するべき場合がある
- 英数・記号などの切り替えが必要で、品詞から判定できない場合がある
mecab 処理のリソース重複を避けてメモリを節約する必要も?
ダミードライバ
since 2011-07-08
下記のような nvdajp_dummy.py を作ってみた。
import braille import ui import queueHandler from logHandler import log from ctypes import * from ctypes.wintypes import * class BrailleDisplayDriver(braille.BrailleDisplayDriver): """ nvdajp dummy braille in NVDA. """ name = "nvdajp_dummy" description = _(u"nvdajp dummy braille") @classmethod def check(cls): return True def __init__(self): log.info("initializing nvdajp_dummy_braille") super(BrailleDisplayDriver, self).__init__() def terminate(self): log.info("terminating nvdajp_dummy_braille") super(BrailleDisplayDriver, self).terminate() def _get_numCells(self): log.info("_get_numCells") return 40 def display(self, cells): log.info("display %d" % len(cells)) s = " ".join("%d" % cell for cell in cells) log.info(s)
下記のようなログが得られることを確認した。
INFO - brailleDisplayDrivers.nvdajp_dummy.BrailleDisplayDriver.display (11:24:34): display 40 INFO - brailleDisplayDrivers.nvdajp_dummy.BrailleDisplayDriver.display (11:24:34): 93 103 89 65 4 115 45 18 52 17 25 4 4 115 45 18 52 3 52 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ドキュメントの点訳
関連情報
brltty と BrlAPI : http://brl.thefreecat.org/
nvda ページにて本家の実装の調査。
チケット1863で点字ディスプレイのドライバが本家にマージされる過程がよくわかる
nvdajp_braille.txt · 最終更新: 2012/12/27 19:20 by Takuya Nishimoto