PageRenderTime 56ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/include/jtalk/mecabRunner.py

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