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 で日本語点訳が難しいか。。

http://twilog.org/nishimotz/date-120528

KGS社のドライバ

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

ドキュメントの点訳

since 2011-01-06

http://togetter.com/li/82042 その1

http://togetter.com/li/86145 その2

関連情報

brltty と BrlAPI : http://brl.thefreecat.org/

nvda ページにて本家の実装の調査。

チケット1863で点字ディスプレイのドライバが本家にマージされる過程がよくわかる

nvdajp_braille.txt · 最終更新: 2012/12/27 19:20 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0