Ticket #29508

日本語テキスト解析の辞書登録機能

Open Date: 2012-09-11 15:51 Last Update: 2014-03-04 11:16

Reporter:
Owner:
Status:
Closed
Component:
MileStone:
Priority:
6
Severity:
6
Resolution:
Fixed
File:
None

Details

nvda-japanese-users 856 で下記のご提案がありました。

点字出力でのユーザー辞書登録を 簡単にできるようにしていただけると 有難いです。

現在では音声辞書の登録は出来ても 点字での辞書登録は出来ないのですね?

現在でも他のスクリーンリーダーと比べても NVDAの点字辞書は優れていると思います。

それだけに 固有名詞のユーザー辞書登録が 簡単にできると 更にすばらしくなると思います。

例えば女性の名前の「久代」という単語が いつも点字で「クシロ」と出るのを直したい、 というようなことです。

Ticket History (3/26 Histories)

2012-09-11 15:51 Updated by: nishimoto
  • New Ticket "日本語点訳エンジンの辞書登録機能" created
2012-09-19 16:50 Updated by: nishimoto
Comment

点訳エンジンの辞書登録機能は、もしかしたら rbtn をそのまま出力するか「ラジオボタン」に置き換えるか、といったユーザーごとの用語のカスタマイズに使えるかも知れません。

関連 点字ディスプレイ出力における略語の日本語化 (29297)

http://sourceforge.jp/ticket/browse.php?group_id=4221&tid=29297

実装の方法としては、liblouis ベースの処理と日本語点訳の処理のどちらでも動くものを作るのか、日本語点訳に限定したものを作るのか、ということが検討課題と思います。

2013-10-26 11:45 Updated by: nishimoto
  • Resolution Update from None to Duplicate
  • Severity Update from 5 - Medium to 6
  • Priority Update from 5 - Medium to 6
Comment

「読み上げ辞書」の「デフォルト」に登録された単語(パターン)を、日本語点訳エンジンにも適用してはどうか、というご提案をいただきました。

2013-10-27 22:33 Updated by: nishimoto
Comment

「読み上げ辞書」の「デフォルト」に登録された単語(パターン)を、日本語点訳エンジンにも適用する、という仕様について検討しています。

以下のような前提、制約がありそうです。

  • タッチカーソル(ポジションマッピング)をサポートする必要がある
  • 英字や数字など「音声に適用するが点字には適用したくないパターン」があり得る

そのため、以下の仕様・制約を検討中です。

  • 正規表現で定義されたパターンは点字には適用しない
  • コメントに nobrl と書かれたエントリーは点字には適用しない
2014-01-30 12:31 Updated by: nishimoto
  • Resolution Update from Duplicate to Accepted
Comment

この作業の方針を再検討していましたが「読み上げ辞書」で文字列置換の前処理をするのではなく、 MeCab のユーザー辞書や部分解析などを使う方法が、以下の理由から、よりスマートに思えます。

  • MeCab解析結果からの点訳アルゴリズムを変更しなくてよい
  • ポジションマッピングのサポートが容易)なので、

関連チケット #32345

2014-01-31 17:58 Updated by: nishimoto
Comment

mecab のユーザー辞書に対応するとしたら、例えば以下のような実装が考えられます。

  • 第1段階: ユーザー辞書バイナリを NVDA が読み込めるようにする。具体的には NVDA の初期化時にユーザー設定ディレクトリをチェックして、ユーザー辞書バイナリがあれば dicrc に userdic のパスを追加して mecab を初期化する。
  • 第2段階: mecab-dict-index を実行してユーザー設定ディレクトリにバイナリをコピーする操作を NVDA メニューの中でできるようにする。辞書ソース CSV ファイルの編集用 GUI を提供する。

あるいは、ユーザー辞書をバイナリ化する機能を Web サービス化してもよいかも知れません。

参考 mecab 単語の追加方法

2014-02-13 18:22 Updated by: nishimoto
Comment

とりあえず miscdep に作業ブランチを作りました。

まず source/synthDrivers/jtalk/mecab.py の Mecab_initialize に何かオプションを与えると mecabrc の userdic = /home/foo/bar/foo.dic,/home/foo/bar2/usr.dic,/home/foo/bar3/bar.dic に相当する情報を与えられるようにするつもりです。

To ssh://git@bitbucket.org/nvdajp/nvdajpmiscdep.git
 * [new branch]      ti29508 -> ti29508
2014-02-13 21:01 Updated by: nishimoto
Comment

mecabuser.csv に UTF-8 で

足手纏い,,,,名詞,形容動詞語幹,*,*,*,*,足手纏い,アシデマトイ,アシデマトイ,4/6,C1,アシデ マトイ

のように書いてコンパイルされたユーザー辞書が使われると mecabHarness.py のテストケースでいままで未対応だった

	{'text':'足手纏い', 'braille':'アシデ マトイ'},

が正しく解析されることを確認できました。

まだ mecabrc にユーザー辞書のパスをハードコーディングしており、パスを動的に追加する処理を実装していません。

mecabライブラリの中でmecabrcの文字コードの扱いがどうなっているかわからないので、もしかするとユーザー設定ディレクトリのパスにマルチバイト文字が使われているとうまく初期化できない、といったことが起こるかも知れません。

To ssh://git@bitbucket.org/nvdajp/nvdajpmiscdep.git
   ad3a830..ffd6e8a  ti29508 -> ti29508
2014-02-17 13:03 Updated by: nishimoto
Comment

miscdep の master に作業をマージしました。

To ssh://git@bitbucket.org/nvdajp/nvdajpmiscdep.git
   ad3a830..7162dd9  master -> master

以下のような仕様です。

  • NVDAのユーザー設定フォルダに jtusr.dic または jtusr*.dic のパターンにマッチするコンパイル済み Mecab 辞書ファイルが見つかったら、JTalk および点訳エンジンがそのファイルをユーザー辞書として使用する。

NVDA 側のテストビルドはこれから行います。また、CSV ファイルをコンパイルするツールは NVDA 本体に組み込まないで、アドオンで提供しようと思っています。

2014-02-17 13:45 Updated by: nishimoto
Comment

jpbeta140217

https://dl.dropboxusercontent.com/u/62564469/nvda_jpbeta140217.exe

テスト用辞書ファイル

https://dl.dropboxusercontent.com/u/62564469/jtusr.dic

この jtusr.dic をユーザー設定フォルダ C:\Users\ユーザー名\AppData\Roaming\nvda にコピーして jpbeta140217 を実行すると、以下の文章の解析結果が変わることを確認しています。

足手纏い
誤り:あしてまとい
正解:あしでまとい

ただしポータブル版の場合はポータブル版の設定フォルダが参照されます。

実験のための辞書なので、現状ではこの1単語だけをコンパイルしています。

2014-02-17 22:02 Updated by: nishimoto
Comment

辞書コンパイルのためのアドオン(jtusrdic)のひな形を作りました。

ソースは下記:

https://bitbucket.org/nishimotz/nvdajtusrdic

とりあえず mecab-dict-index.exe を呼び出すだけの簡単なものを作るつもりです。

2014-02-18 18:50 Updated by: nishimoto
Comment

お問い合わせをいただいたので補足します。

ポータブル版のユーザー設定フォルダは、 c:\nvdajp にポータブル版を作ったとすると、 c:\nvdajp\userConfig になります。

つまり jtusr.dic を

c:\nvdajp\userConfig\jtusr.dic

にコピーすることになります。

ユーザーガイド 8.4. 設定プロファイルの保存場所

ポータブル版のNVDAは、すべての設定項目、
カスタムアプリケーションモジュール及びカスタムドライバーを、
NVDAディレクトリー内のuserConfigというディレクトリーに保存します。

http://www.nvda.jp/nvda2013.3jp/ja/userGuide.html#toc75

2014.1jp のリリースを遅らせないために、この作業はここまでで jpbranch にマージすることとして、辞書コンパイルはアドオンで対応させてください。

ユーザー辞書が使用されるときにログファイルに出力を出すように変更しました。

INFO - synthDrivers.jtalk.mecab.Mecab_initialize (18:47:50):
dic: C:\Users\NISHIM~1\AppData\Local\Temp\nshDEF9.tmp\app\synthDrivers\jtalk\dic
INFO - synthDrivers.jtalk.mecab.Mecab_initialize (18:47:50):
mecab:0.996 nvdajp-jtalk-dic (utf-8) 20140218-093813
INFO - synthDrivers.jtalk.mecab.Mecab_initialize (18:47:50):
user_dics: C:\Users\nishimotz\AppData\Roaming\nvda\jtusr.dic

なお Mecab がユーザー辞書のパスをカンマ区切りで受け取る仕様のため、ファイル名やディレクトリ名に半角カンマが含まれている場合は無視するようにしています。

2014-02-18 21:51 Updated by: nishimoto
  • Component Update from 点字ディスプレイ to テキスト解析
Comment

jpbranch にマージしました。

NVDA日本語テスト版 jpbeta140218

https://dl.dropboxusercontent.com/u/62564469/nvda_jpbeta140218.exe

チケットのコンポーネント種別を「点字ディスプレイ」から「テキスト解析」に変更しました。

2014-02-19 18:14 Updated by: nishimoto
  • Summary Updated
Comment

概要を「日本語点訳エンジンの辞書登録機能」から「日本語テキスト解析の辞書登録機能」に変更します。

辞書コンパイル用アドオン jtusrdic 0.1 を作りました。

https://dl.dropboxusercontent.com/u/62564469/jtusrdic-0.1.nvda-addon

まだメニュー項目が英語だったり、ドキュメントがアドオンテンプレートのままですが、ご容赦ください。

ツールメニュー "Edit JTalk User Dic source"

  • ユーザー設定ディレクトリに jtusr*.csv があれば関連づけされたアプリケーションで開く
  • なければユーザー設定ディレクトリに jtusr.csv を作り、UTF-8 形式でひな形のデータ(「足手纏い」のサンプル)を作成し、関連づけされたアプリケーションで開く

ツールメニュー "Compile JTalk User Dic"

  • ユーザー設定ディレクトリに jtusr*.csv があれば、コンパイルして jtusr*.dic を作成し、"Compile done." を表示する。
  • なければ "No source found." を表示する。

文字コードは UTF-8 でなくてはいけません。

以下、簡単に辞書ソースファイルの説明です。

やや難しいですが、NVDA日本語版でログ出力レベルを「デバッグ」にすると現在の辞書でのテキスト解析結果が出るので、参考にしていただけると思います。

足手纏い,,,,名詞,形容動詞語幹,*,*,*,*,足手纏い,アシデマトイ,アシデマトイ,4/6,C1,アシデ マトイ
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音,アクセント,アクセント結合規則,点字表記

「表層形」から「発音」までは下記「mecab:単語の追加方法」で説明されている。

上記の例の補足:

  • 「表層形」と「原形」を同じにしている。
  • 読みと発音はどちらも「アシデマトイ」にしている。
  • 品詞は「名詞」にした。品詞細分類1は「ナニナニだ」のように形容動詞を作るので「形容動詞語幹」にしている。
  • 左文脈ID,右文脈ID,コストは省略し、品詞細分類2,品詞細分類3,活用形,活用型は * にしている。

アクセント,アクセント結合規則 は Open JTalk の独自拡張である。

アクセントは "アクセントのあるモーラ位置/全体のモーラ数" で記述されている。

  • 上記の例では「あしでまとい」は6モーラ、アクセントのある場所は「ま」なので4モーラ目、したがって 4/6 になる。

アクセント結合規則は下記のブログ記事に説明がある:

点字表記は NVDA 日本語版の独自拡張である。

点字表記は点字出力でのカナ表記と、半角スペースでマスアケの場所を指定する。

  • 上記の例では「アシデマトイ」をひとつのまとまりとして解析して、マスアケを3文字目と4文字目の間で行うように指定するので「アシデ マトイ」になる。
2014-02-20 13:34 Updated by: nishimoto
Comment

辞書ソースをテキストエディタで開きやすいように拡張子を csv ではなく txt に変更しました。

https://dl.dropboxusercontent.com/u/62564469/jtusrdic-0.2.nvda-addon

エディタ機能を独自に作ればいいのかも知れませんが、もう少し検討させてください。

2014-02-21 13:36 Updated by: nishimoto
Comment

アドオンが辞書のコンパイルに失敗する不具合について調べているのですが、 どうやら jtusr.dic がすでに mecab に読み込まれている状態で、 読み込まれたファイルを上書きしようとするとパーミッションエラーになるようです。

設計を見直したいと思います。

ERROR - unhandled exception (13:30:48):
Traceback (most recent call last):
  File "userConfig\addons\jtusrdic\globalPlugins\jtusrdic\__init__.py", line 51, in compileUserDic
    ret = mecabDictIndex['-d', jtalkDir.dic_dir, '-u', u, '-f', 'utf-8', '-t', 'utf-8', s]()
  File "userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\commands\base.py", line 90, in __call__
    return self.run(args, **kwargs)[1]
  File "userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\commands\base.py", line 203, in run
    return p.run()
  File "userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\commands\base.py", line 166, in runner
    return run_proc(p, retcode, timeout)
  File "userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\commands\processes.py", line 208, in run_proc
    stdout, stderr)
ProcessExecutionError: Command line: ['C:\\work\\nvda\\nvdajp\\source\\userConfig\\addons\\jtusrdic\\globalPlugins\\jtusrdic\\mecab-dict-index.exe', '-d', 'C:\\work\\nvda\\nvdajp\\source\\synthDrivers\\jtalk\\dic', '-u', 'C:\\work\\nvda\\nvdajp\\source\\userConfig\\jtusr.dic', '-f', 'utf-8', '-t', 'utf-8', 'C:\\work\\nvda\\nvdajp\\source\\userConfig\\jtusr.txt']
Exit code: -1
Stdout:  | reading C:\work\nvda\nvdajp\source\userConfig\jtusr.txt ... 1
         | emitting double-array: 100% |###########################################| 
Stderr:  | dictionary.cpp(324) [bofs] permission denied: C:\work\nvda\nvdajp\source\userConfig\jtusr.dic
2014-02-21 15:42 Updated by: nishimoto
Comment

NVDA 日本語ベータ版 jpbeta140221 https://dl.dropboxusercontent.com/u/62564469/nvda_jpbeta140221.exe

辞書コンパイル用アドオン jtusrdic 0.3 https://dl.dropboxusercontent.com/u/62564469/jtusrdic-0.3.nvda-addon

mecab 初期化のときに、ユーザー辞書ファイルを一時ファイルにコピーして読み込むように変更しました。

辞書コンパイルアドオンでは、ユーザー辞書ファイルのひな形を BOM なしの UTF-8 (UTF-8N) で作成するように変更しました。

その他、バグ修正、エラーログの追加などを行いました。

なお、本家が NVDA 2014.1 リリース候補1 をリリースしたので、 日本語チームのリポジトリに jp2014.1 ブランチを作成しました。 このテスト版は jp2014.1 ブランチからビルドされています。

2014-02-21 23:38 Updated by: nishimoto
Comment

辞書コンパイル用アドオン jtusrdic 0.4

https://dl.dropboxusercontent.com/u/62564469/jtusrdic-0.4.nvda-addon

"Edit JTalk User Dic source" で作成または編集された jtusr.txt が BOM つきの UTF-8 であっても、"Compile JTalk User Dic" を実行したときに BOM なしの UTF-8N に変換してから辞書コンパイルするようにしました。

2014-02-22 11:38 Updated by: nishimoto
Comment

辞書コンパイル用アドオン jtusrdic 0.5

https://dl.dropboxusercontent.com/u/62564469/jtusrdic-0.5.nvda-addon

コンパイルした辞書が userConfig に書き込まれない不具合を修正しました。

2014-02-22 21:17 Updated by: nishimoto
Comment

Windows XP SP3 では以下のように問題が起きていることを確認しました。

インストール環境:no source found でコンパイルができない。

INFO - external:globalPlugins.jtusrdic.compileUserDic (21:08:54):
system_dic "C:\Program Files\NVDA\synthDrivers\jtalk\dic"
INFO - external:globalPlugins.jtusrdic.compileUserDic (21:08:54):
configDir "C:\Documents and Settings\nishimotz\Application Data\nvda"

ポータブル環境:辞書コンパイルで下記のエラーが発生する。

INFO - __main__ (21:11:24):
Starting NVDA
INFO - core.main (21:11:24):
Config dir: C:\nvdajp\userConfig
INFO - core.main (21:11:25):
NVDA version jpbeta140221
INFO - core.main (21:11:25):
Using Windows version sys.getwindowsversion(major=5, minor=1, build=2600, platform=2, service_pack='Service Pack 3')
INFO - core.main (21:11:25):
Using Python version 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)]
INFO - core.main (21:11:25):
Using comtypes version 0.6.2
INFO - synthDrivers.jtalk.mecab.Mecab_initialize (21:11:30):
dic: C:\nvdajp\synthDrivers\jtalk\dic
INFO - synthDrivers.jtalk.mecab.Mecab_initialize (21:11:30):
mecab:0.996 nvdajp-jtalk-dic (utf-8) 20140221-060434
INFO - synthDrivers.jtalk.jtalkDriver.initialize (21:11:30):
loaded C:\nvdajp\synthDrivers\jtalk\mei\mei_normal.htsvoice
INFO - synthDrivers.jtalk.jtalkDriver.initialize (21:11:30):
loaded C:\nvdajp\synthDrivers\jtalk\lite\voice.htsvoice
INFO - synthDriverHandler.setSynth (21:11:30):
Loaded synthDriver nvdajp_jtalk
INFO - core.main (21:11:30):
Using wx version 2.8.12.1 (msw-unicode)
INFO - braille.initialize (21:11:30):
Using liblouis version 2.5.3
INFO - braille.BrailleHandler.setDisplayByName (21:11:30):
Loaded braille display driver noBraille, current display has 0 cells.
INFO - brailleInput.initialize (21:11:30):
Braille input initialized
WARNING - core.main (21:11:31):
UIA not available
INFO - core.main (21:11:31):
NVDA initialized
INFO - config.ConfigManager.save (21:11:33):
Base configuration saved
INFO - external:globalPlugins.jtusrdic.compileUserDic (21:11:51):
system_dic "C:\nvdajp\synthDrivers\jtalk\dic"
INFO - external:globalPlugins.jtusrdic.compileUserDic (21:11:51):
configDir "C:\nvdajp\userConfig"
INFO - external:globalPlugins.jtusrdic.compileUserDic (21:11:51):
user_dic C:\DOCUME~1\NISHIM~1\LOCALS~1\Temp\tmpkjmn33\jtusr.txt to C:\nvdajp\userConfig\jtusr.dic
ERROR - unhandled exception (21:11:51):
Traceback (most recent call last):
  File "C:\nvdajp\userConfig\addons\jtusrdic\globalPlugins\jtusrdic\__init__.py", line 51, in compileUserDic
  File "C:\nvdajp\userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\commands\base.py", line 90, in __call__
  File "C:\nvdajp\userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\commands\base.py", line 202, in run
  File "contextlib.pyo", line 17, in __enter__
  File "C:\nvdajp\userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\commands\base.py", line 159, in bgrun
  File "C:\nvdajp\userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\commands\base.py", line 220, in popen
  File "C:\nvdajp\userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\machines\local.py", line 100, in popen
  File "C:\nvdajp\userConfig\addons\jtusrdic\globalPlugins\jtusrdic\plumbum\machines\local.py", line 246, in _popen
  File "subprocess.pyo", line 709, in __init__
  File "subprocess.pyo", line 957, in _execute_child
WindowsError: [Error 193] %1 は有効な Win32 アプリケーションではありません。

このエラーはコマンドプロンプトから mecab-dict-index.exe を実行したときにもダイアログで表示され、プロンプト画面には「アクセスが拒否されました」と表示される。

2014-02-23 00:33 Updated by: nishimoto
Comment

辞書コンパイル用アドオン jtusrdic 0.6

https://dl.dropboxusercontent.com/u/62564469/jtusrdic-0.6.nvda-addon

Windows XP で動くように mecab-dict-index をコンパイルしました。

ただし Visual C++ 再頒布可能パッケージ vcredist_x86.exe をインストールする必要があるかも知れません。

Visual Studio 2013 の Visual C++ 再頒布可能パッケージ http://www.microsoft.com/ja-jp/download/details.aspx?id=40784

2014-02-23 13:33 Updated by: nishimoto
Comment

バージョン 0.6 でビルドした mecab-dict-index.exe ですが dumpbin /dependents しても VC ランタイムのDLL依存性が出てこないので、ランタイムをインストールしなくてもよさそうな気がします。

いちおう /MT オプションを付けてビルドするというのもやってみたのですが、違いがなさそうです。

c:\work\nvda\bb\jtusrdic>dumpbin /dependents addon\globalPlugins\jtusrdic\mecab-dict-index.exe
Microsoft (R) COFF/PE Dumper Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file addon\globalPlugins\jtusrdic\mecab-dict-index.exe

File Type: EXECUTABLE IMAGE

  Image has the following dependencies:

    KERNEL32.dll

  Summary

        5000 .data
        D000 .rdata
        4000 .reloc
       3F000 .text
2014-02-23 19:57 Updated by: nishimoto
Comment

辞書コンパイル用アドオン jtusrdic 0.7 https://dl.dropboxusercontent.com/u/62564469/jtusrdic-0.7.nvda-addon

辞書ソースを新規作成した直後にコンパイルできない不具合を修正しました。

2014-02-27 23:25 Updated by: nishimoto
Comment

細かいところですが、仕様の変更を検討しています:

現在の仕様:

  • NVDAのユーザー設定フォルダに jtusr.dic または jtusr*.dic のパターンにマッチするコンパイル済み Mecab 辞書ファイルが見つかったら、JTalk および点訳エンジンがそのファイルをユーザー辞書として使用する。

最終の仕様案:

  • NVDAのユーザー設定フォルダに jtusr.dic というファイル名のコンパイル済み Mecab 辞書ファイルが見つかったら、JTalk および点訳エンジンがそのファイルをユーザー辞書として使用する。

複数のユーザー辞書バイナリを併用される可能性を考慮していたのですが、意図しないファイルが mecab に読み込まれて誤動作するリスクがあるので、ユーザー辞書バイナリをひとつに限定したほうがよさそうに思えてきました。

2014-03-03 15:57 Updated by: nishimoto
Comment

「足手纏い」をシステム辞書に登録して、下記を jtusr.txt のテンプレートにする予定です:

次世代型点字ピンディスプレイ,,,,名詞,一般,*,*,*,*,次世代型点字ピンディスプレイ,ジセダイガタテンジピンディスプレイ,ジセダイガタテンジピンディスプレイ,12/16,C0,ジセダイガタ テンジピンディスプレイ
nvdajpmiscdep:
[master 64c1f3f] work regarding ti31543
 7 files changed, 35 insertions(+), 9 deletions(-)
2014-03-04 11:16 Updated by: nishimoto
  • Ticket Close date is changed to 2014-03-04 11:16
  • Status Update from Open to Closed
  • Resolution Update from Accepted to Fixed
Comment

複数辞書ファイルから jtusr.dic ファイル固定とする仕様変更は終わっています。

辞書コンパイル用アドオンを完成させるまでの残った作業はチケット #33324 で扱います。

本チケットは NVDA 日本語版の本体に関する作業として、完了とします。

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login