OSDN Git Service

updated jtalk dictionary source
[nvdajp/nvdajpmiscdep.git] / include / jtalk / mecabRunner.py
1 # mecabRunner.py \r
2 # -*- coding: utf-8 -*-\r
3 # Japanese text processor test module\r
4 # by Takuya Nishimoto\r
5 \r
6 from __future__ import unicode_literals\r
7 import os\r
8 import sys\r
9 from mecab import *\r
10 \r
11 def __print(s):\r
12         print s.encode('cp932', 'ignore')\r
13 \r
14 buffer = ''\r
15 \r
16 def __print_dummy(s):\r
17         global buffer\r
18         buffer += s + '\n'\r
19 \r
20 def Mecab_get_reading(mf, CODE_=CODE):\r
21         reading = ''\r
22         braille = ''\r
23         for pos in xrange(0, mf.size):\r
24                 ar = Mecab_getFeature(mf, pos, CODE_=CODE_).split(',')\r
25                 rd = ''\r
26                 if len(ar) > 9:\r
27                         rd = ar[9].replace('\u3000', ' ')\r
28                 elif ar[0] != 'ー':\r
29                         rd = ar[0]\r
30                 reading += rd\r
31                 if len(ar) > 12:\r
32                         braille += ar[12] + r" "\r
33                 else:\r
34                         braille += rd + r"/"\r
35         return (reading, braille.rstrip(r" /"))\r
36 \r
37 def get_reading(msg):\r
38         s = Mecab_text2mecab(msg)\r
39         mf = MecabFeatures()\r
40         Mecab_analysis(s, mf)\r
41         Mecab_correctFeatures(mf)\r
42         Mecab_print(mf, __print_dummy)\r
43         reading = Mecab_get_reading(mf)\r
44         mf = None\r
45         return reading\r
46 \r
47 # tasks: 要素2は音声合成の読み、(もしあれば)要素3は点訳用のカナ表記\r
48 # 点訳の表記と分かち書きは、規則で処理できないものを\r
49 # Mecab 辞書の第13フィールドに追加している。\r
50 # 要素3のスラッシュは形態素の区切り、スペースは形態素内のマスアケ\r
51 \r
52 # some examples from nvdajp-jtalk-dic:\r
53 # http://nvdajp-jtalk-dic.heroku.com/items/\r
54 tasks = [\r
55         ['あ⣿あ∫あ♪',  'アイチニーサンヨンゴーロクナナハチノテンアセキブンキゴーアオンプ'],\r
56         ['鈹噯呃瘂蹻脘鑱涿癃',  'ヒアイアクアキョーカンザンタクリュー'],\r
57         ['十五絡脈病証',  'ジューゴカラマミャクヤマイアカシ'],\r
58         ['マーク。まーく。',  'マーク。マーク。'],\r
59         ['1 2',  'イチ ニ'],\r
60         ['manage', 'マネイジ'],\r
61         ['choose', 'チュウズ'],\r
62         ['impaired', 'インペアド'],\r
63         ['failed', 'フェイルド'],\r
64         ['mixi', 'ミクシー'],\r
65         ['nullsoft', 'ヌルソフト'],\r
66         ['speech api', 'スピーチ エーピーアイ'],\r
67         ['use', 'ユース'],\r
68         ['echo', 'エコウ'],\r
69         ['you', 'ユー'],\r
70         ['youtube', 'ユーチューブ'],\r
71         ['files', 'ファイルズ'],\r
72         ['docs', 'ドックス'],\r
73         ['labs', 'ラブス'],\r
74         ['行',  'ギョー'],\r
75         ['一行', 'イチギョー'],\r
76         ['1行', 'イチギョー'],\r
77         ['1行下', 'イチギョーシタ'],\r
78         ['1行上', 'イチギョーウエ'],\r
79         ['2行', 'ニギョー'],\r
80         ['3行', 'サンギョー'],\r
81         ['現在行', 'ゲンザイギョー'],\r
82         ['最上行', 'サイジョーギョー'],\r
83         ['1行下',  'イチギョーシタ'],\r
84         ['1行上',  'イチギョーウエ'],\r
85         ['誤判定', 'ゴハンテイ'],\r
86         ['50音順', 'ゴジューオンジュン'],\r
87         ['税', 'ゼイ'],\r
88         ['三毛猫', 'ミケネコ'],\r
89         ['表計算', 'ヒョーケイサン'],\r
90         ['小文字', 'コモジ'],\r
91         ['大文字', 'オーモジ'],\r
92         ['拡張子', 'カクチョーシ'],\r
93         ['世界中', 'セカイジュー'],\r
94         ['孫正義', 'ソンマサヨシ'],\r
95         ['2分前', 'ニフンマエ'],\r
96         ['2分前', 'ニフンマエ'],\r
97         ['障がい', 'ショーガイ'],\r
98         ['親オブジェクト', 'オヤオブジェクト'],\r
99         ['z', 'ゼット'],\r
100         ['規', 'タダシ'],\r
101         ['全', 'ゼン'],\r
102         ['007', 'ゼロゼロナナ'],\r
103         ['上矢印', 'ウエヤジルシ'],\r
104         ['下矢印', 'シタヤジルシ'],\r
105         ['大見出し', 'オオミダシ'],\r
106         ['前景色', 'ゼンケイショク'],\r
107         ['梅雨前線', 'バイウゼンセン', 'バイウ ゼンセン'], \r
108         ['八ッ場ダム', 'ヤンバダム'],\r
109         ['1都5県', 'イットゴケン'],\r
110         ['1都5県', 'イットゴケン'],\r
111         ['1都6県', 'イットロッケン'],\r
112         ['1都6県', 'イットロッケン'],\r
113         ['孫正義', 'ソンマサヨシ', 'ソン マサヨシ'], \r
114         ['きゃりーぱみゅぱみゅ', 'キャリーパミュパミュ'],\r
115         ['いひ', 'イヒ'], # http://sourceforge.jp/ticket/browse.php?group_id=4221&tid=30919\r
116         ['金', 'キン' ],\r
117         ['1月', 'イチガツ', '1ガツ'], # NVDA点字表示の誤り No.18\r
118         ['為おおせる', 'シオオセル'], # 点訳のてびき第3版 第2章 その1 1 5 No.63\r
119         ['凡そ', 'オオヨソ'], # 点訳のてびき第3版 第2章 その1 1 5 No.67\r
120         ['無花果', 'イチジク'], # 点訳のてびき第3版 第2章 その1 1 6 No.3\r
121         ['砂利道', 'ジャリミチ'], # 点訳のてびき第3版 第2章 その1 1 6 No.10\r
122         ['少しずつ', 'スコシズツ'], # 点訳のてびき第3版 第2章 その1 1 6 No.20\r
123         ['鼓', 'ツヅミ'], # 点訳のてびき第3版 第2章 その1 1 6 No.32\r
124         ['葛籠', 'ツヅラ'], # 地名? 点訳のてびき第3版 第2章 その1 1 6 No.33\r
125         ['紅提灯', 'ベニヂョーチン'], # 点訳のてびき第3版 第2章 その1 1 6 No.39\r
126         ['まづ', 'マズ'], # 点訳のてびき第3版 第2章 その1 1 7 No.1\r
127         ['一つづつ', 'ヒトツズツ'], # 点訳のてびき第3版 第2章 その1 1 7 No.2\r
128         ['大きう', 'オオキュー'], # 点訳のてびき第3版 第2章 その1 1 7 No.5\r
129         ['うれしう', 'ウレシュー'], # 点訳のてびき第3版 第2章 その1 1 7 No.6\r
130         ['もみぢ', 'モミジ'], # 点訳のてびき第3版 第2章 その1 1 7 No.7\r
131         ['みづうみ', 'ミズウミ'], # 点訳のてびき第3版 第2章 その1 1 7 No.8\r
132         ['ヴァイオリン', 'バイオリン' , 'ヴァイオリン'], # 点訳のてびき第3版 第2章 その1 2 1 No.4\r
133         ['ヴィタミン', 'ビタミン', 'ヴィタミン'], # 点訳のてびき第3版 第2章 その1 2 1 No.6\r
134         ['ラヂオ', 'ラジオ'], # 点訳のてびき第3版 第2章 その1 2 1 No.22\r
135         ['ヂャケット', 'ジャケット'], # 点訳のてびき第3版 第2章 その1 2 1 No.23\r
136         ['ウヰスキー', 'ウイスキー'], # 点訳のてびき第3版 第2章 その1 2 1 No.25\r
137         ['スヰフト', 'スイフト'], # 点訳のてびき第3版 第2章 その1 2 1 No.26\r
138         ['ヱルテル', 'ウェルテル'], # 点訳のてびき第3版 第2章 その1 2 1 No.27\r
139         ['ヲルポール', 'ウォルポール'], # 点訳のてびき第3版 第2章 その1 2 1 No.28\r
140         ['ヘリコプタア', 'ヘリコプター'], # 点訳のてびき第3版 第2章 その1 2 1 No.29\r
141         ['ちゅうりっぷ', 'チューリップ'], # 点訳のてびき第3版 第2章 その1 2 1 No.30\r
142         ['おおきに', 'オーキニ',  'オオキニ', ], # 点訳のてびき第3版 第2章 その1 2 3 No.4\r
143         ['おみやぁさん', 'オミャアサン', ], # 点訳のてびき第3版 第2章 その1 2 3 No.6\r
144         ['先生ぇさまぁ', 'センセエサマア', ], # 点訳のてびき第3版 第2章 その1 2 3 No.7\r
145         ['おとゥ', 'オトー', ], # 点訳のてびき第3版 第2章 その1 2 4 No.1\r
146         ['おかァ', 'オカア', ], # 点訳のてびき第3版 第2章 その1 2 4 No.1\r
147         ['クヮルテット', 'クァルテット', ], # 点訳のてびき第3版 第2章 その1 2 4 No.5\r
148         ['ヂェスチャー', 'ジェスチャー', ], # 点訳のてびき第3版 第2章 その1 2 4 No.6\r
149         ['スェーター', 'スエーター', ], # 点訳のてびき第3版 第2章 その1 2 4 No.7\r
150         ['ヒァーッ', 'ヒャーッ', ], # 点訳のてびき第3版 第2章 その1 2 4 No.8\r
151         ['大阪', 'オーサカ', 'オオサカ'], # 点訳のてびき第3版 第2章 その1 2 5 No.1\r
152         ['遠野', 'トーノ', 'トオノ' ], # 点訳のてびき第3版 第2章 その1 2 5 No.2\r
153         ['東井', 'トーイ', ], # 点訳のてびき第3版 第2章 その1 2 5 No.3\r
154         ['青梅', 'オーメ', ], # 点訳のてびき第3版 第2章 その1 2 5 No.10\r
155         ['透', 'トール', 'トオル', ], # 点訳のてびき第3版 第2章 その1 2 5 No.11\r
156         ['みさを', 'ミサオ', 'ミサヲ', ], # 点訳のてびき第3版 第2章 その1 2 5 No.13\r
157         ['かほる', 'カオル', 'カホル', ], # 点訳のてびき第3版 第2章 その1 2 5 No.14\r
158         ['さをり', 'サオリ', 'サヲリ', ], # 点訳のてびき第3版 第2章 その1 2 5 No.19\r
159         ['みやこをどり', 'ミヤコオドリ', 'ミヤコ オドリ', ], # 点訳のてびき第3版 第2章 その1 2 5 No.24\r
160         ['をりがみ', 'オリガミ', ], # 点訳のてびき第3版 第2章 その1 2 5 No.25\r
161         ['八幡平', 'ハチマンタイ', ], # ヤワタダイラ\r
162         ['山ん中', 'ヤマンナカ', ], # 点訳のてびき第3版 第3章 その1 2 No.14\r
163         ['そういうわけ', 'ソーユウワケ', 'ソー イウ ワケ', ], # 点訳のてびき第3版 第3章 その1 3 No.51\r
164         ['そういう', 'ソーユウ', 'ソー イウ', ], # 点訳のてびき第3版 第3章 その1 5 No.2\r
165         ['どうして', 'ドーシテ', 'ドー シテ', ], # 点訳のてびき第3版 第3章 その1 5 No.5\r
166 \r
167         ['システムキャレット', None, 'システム/キャレット'],\r
168         ['フィードバック', None, 'フィード バック'],\r
169         ['インターフェース', None, 'インター フェース'],\r
170         ['オペレーティングシステム', None, 'オペレーティング システム'],\r
171         ['トーキングインストーラー', None, 'トーキングインストーラー'],\r
172         ['アイスクリーム', None, 'アイス クリーム'],\r
173         ['日本点字図書館', None, 'ニッポン テンジ トショカン'],\r
174 \r
175         ['通り', None, 'トオリ'],\r
176         ['狼', None, 'オオカミ'],\r
177         ['通る', None, 'トオル'],\r
178         ['多い', None, 'オオイ'],\r
179         ['多く', None, 'オオク'],\r
180         ['大晦日', None, 'オオミソカ'],\r
181         ['手作り', None, 'テヅクリ'],\r
182         ['南半球', None, 'ミナミ ハンキュー'],\r
183         ['アメリカ合衆国', None, 'アメリカ ガッシューコク'],\r
184         ['第一人者', None, 'ダイ1ニンシャ'],\r
185         ['一流', None, '1リュー'],\r
186         ['一月', None, '1ガツ'],\r
187         ['二月', None, '2ガツ'],\r
188         ['四方', None, '4ホー'],\r
189         ['六法全書', None, '6ポー ゼンショ'],\r
190         ['百人一首', None, '100ニン 1シュ'],\r
191         ['ヱビスビール', None, 'エビス ビール'],\r
192         ['日本コロムビア', None, 'ニッポン コロムビア'],\r
193         ['ビタミンE', None, 'ビタミン E'],\r
194         ['劇団四季', None, 'ゲキダン 4キ'],\r
195         ['四季', None, '4キ'],\r
196         ['四半期', None, '4ハンキ'],\r
197         ['四角形', None, '4カクケイ'],\r
198         ['四条', None, '4ジョー'],\r
199         ['二男', None, '2ナン'],\r
200         ['十数', None, 'ジュー/スー'], # 十,名詞,数\r
201         ['一輪車', None, '1リンシャ'],\r
202         ['三塁打', None, '3ルイダ'],\r
203         ['一汁一菜', None, '1ジュー 1サイ'],\r
204         ['五臓六腑', None, '5ゾー 6プ'],\r
205         ['二・二六事件', None, '2⠼26 ジケン'],\r
206         ['一段', None, '1ダン'],\r
207         ['七転び八起き', None, 'ナナコロビ ヤオキ'],\r
208         ['十重二十重', None, 'トエ ハタエ'],\r
209         ['3ラン', None, '3ラン'],\r
210         ['さんりんしゃ', None, '3リンシャ'],\r
211         ['いちばん', None, '1バン'],\r
212         ['X線', None, 'Xセン'],\r
213 \r
214         #['好かんやつ', 'スカンヤツ', 'スカン ヤツ', ], #点訳のてびき第3版 第3章 その1 2 No.16\r
215         #['嘘みたいな話', 'ウソミタイナハナシ', 'ウソミタイナ ハナシ', ], # 点訳のてびき第3版 第3章 その1 2 No.17\r
216         #['行っていらっしゃい', 'イッテイラッシャイ', 'イッテ イラッシャイ', ], # 点訳のてびき第3版 第3章 その1 4 No.77\r
217         #['ごめんください', 'ゴメンクダサイ', 'ゴメン クダサイ', ], # 点訳のてびき第3版 第3章 その1 4 No.84\r
218         #['おはようございます', 'オハヨーゴザイマス', 'オハヨー ゴザイマス', ], # 点訳のてびき第3版 第3章 その1 4 No.86\r
219 \r
220         # 点字表記辞典「あ」(1)\r
221         ['相対する', 'アイタイスル'],\r
222         ['相対的', 'ソータイテキ'], # regression test\r
223         ['相たずさえて', 'アイタズサエテ'],\r
224         ['相整う', 'アイトトノウ'],\r
225         ['同病相憐れむ', 'ドービョーアイアワレム', 'ドービョー/アイアワレム'],\r
226         ['木立の間から見える', 'コダチノアイダカラミエル'],\r
227         ['開いた口がふさがらぬ', 'アイタクチガフサガラヌ'],\r
228         ['相無く涙ぐみ足り', 'アイナクナミダグミタリ'],\r
229         ['お生憎様', 'オアイニクサマ'],\r
230         ['開かずの間', 'アカズノマ'],\r
231         ['不開の間', 'アカズノマ'],\r
232         ['山田県主', 'ヤマダノアガタヌシ'],\r
233         ['暁闇', 'アカツキヤミ'],\r
234         ['上がり降り', 'アガリオリ'],\r
235         ['河原町四条上ル', 'カワラマチシジョーアガル'],\r
236         ['秋津国', 'アキツクニ'],\r
237         ['現つ神', 'アキツカミ'],\r
238         ['阿Q正伝', 'アキューセイデン'],\r
239         ['悪源太', 'アクゲンタ'],\r
240         ['明くる朝', 'アクルアサ', 'アクル アサ'],\r
241         ['明くる年', 'アクルトシ', 'アクル トシ'],\r
242         ['明の星', 'アケノホシ', 'アケノ ホシ'],\r
243         ['麻布十番', 'アザブジューバン', 'アザブ ジューバン'],\r
244         ['男漁り', 'オトコアサリ', 'オトコ アサリ'],\r
245         ['古本漁り', 'フルホンアサリ', 'フルホン アサリ'],\r
246         ['足の甲', 'アシノコー', 'アシノ コー'],\r
247         ['日の足が伸びる', 'ヒノアシガノビル', 'ヒノアシ/ガ/ノビル'],\r
248         ['醤油味', 'ショーユアジ', 'ショーユ アジ'],\r
249         ['砂糖醤油', 'サトージョウユ'], # regression test\r
250 ]\r
251 \r
252 if __name__ == '__main__':\r
253         JT_DIR = os.path.normpath(os.path.join(os.getcwdu(), '..', '..', 'source', 'synthDrivers', 'jtalk'))\r
254         print JT_DIR\r
255         Mecab_initialize(__print, JT_DIR)\r
256         for item in tasks:\r
257                 buffer = ''\r
258                 result = get_reading(item[0])\r
259                 if item[1] is not None and result[0] != item[1]:\r
260                         __print('')\r
261                         __print('')\r
262                         __print(buffer)\r
263                         __print('input:    ' + item[0])\r
264                         __print('reading expected: ' + item[1])\r
265                         __print('reading result:   ' + result[0])\r
266                 if len(item) > 2 and result[1] != item[2]:\r
267                         __print('')\r
268                         __print('')\r
269                         __print(buffer)\r
270                         __print('input:            ' + item[0])\r
271                         __print('braille expected: ' + item[2])\r
272                         __print('braille result:   ' + result[1])\r
273 \r
274         \r