saykanjiコマンドを定義して漢字仮名混じり文を読み上げる

saykanaコマンドという素晴らしいコマンドが紹介されていた。コマンドに続けて入力した、ひらがな・かたかな・英数字を日本語で読み上げてくれるのだ。こういうのを見つけると、とりあえず試してみたくなる。

$ saykana にほんごをはなそう
$ saykana 123
$ saykana ABC
  • 調子良く読み上げてくれた!面白い!
  • ところが、意地悪く漢字混じりの文章を試すと...
$ saykana 日本語を話そう
ERR:(105) invalid kana string. 日本語を話そう
  • コマンド名が sayかな なのだから当然の仕様だ。

環境

mecabの利用

  • mecabコマンドは日本語の達人で、以下のような形態素解析をしてくれる。
$ echo 日本語を解析する|mecab >&1;
日本語	名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
解析	名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ
する	動詞,自立,*,*,サ変・スル,基本形,する,スル,スル
EOS
  • オプションを指定することで、以下のような出力も可能。
$ echo 日本語を解析する|mecab -O wakati >&1;
日本語 を 解析 する 
$ echo 日本語を解析する|mecab -O yomi >&1;
ニホンゴヲカイセキスル
  • -O yomiオプション、素晴らしい!
  • この結果をsaykanaに渡せば、saykanji(say漢字)になるはず。
$ echo 日本語を解析する|mecab -O yomi|saykana
  • 大成功!!

saykanjiコマンド

  • ワンライナーと言えども、毎回入力するのは面倒だし、多分、そのうち忘れてしまう...。
  • そうだ!saykanjiコマンドを定義しよう!
$ cd /usr/local/bin
$ vi saykanji.sh
  • エディタでsaykanji.shを以下のように編集してみた。
saykanji()
{
  echo $1|/usr/local/bin/mecab -O yomi|/usr/local/bin/saykana;
}
vi ~/.bash_profile
  • saykanji関数定義を有効にするため、~/.bash_profile(最終の行)に以下のコマンドを追記した。
. /usr/local/bin/saykanji.sh
  • 新しいターミナルウィンドウを開いて試してみた。
$ saykanji 日本語を話そう
  • 「にほんごをはなそう」と読んでくれた!
  • saykanjiコマンド出来上がり。

AppleScriptからの利用

  • AppleScriptからは以下のようにすると利用できた。


do shell script ". /usr/local/bin/saykanji.sh;saykanji '日本語を話そう'"

  • もうちょっと頑張って、以下のようにしてみると...


--操作対象のアプリを最前面に設定する(スクリプトメニューから実行する場合必要)
set current_app to short name of (info for (path to frontmost application))
activate application current_app --tell application "System Events"ブロック内ではエラーになる

tell application "System Events"
delay 0.5
keystroke "c" using command down
delay 0.5
do shell script ". /usr/local/bin/saykanji.sh;saykanji " & "'" & (the clipboard as string) & "'"
end tell

  • このスクリプトをSayKANJI.scptとして、ユーザースクリプトフォルダに保存した。
  • これでテキストを選択して、スクリプトメニューから SayKANJI を実行すると、日本語で読み上げてくれた!

Quicksilverからの利用

自分の場合、スクリプトは最終的にQuicksilverに登録して、ショートカット一発で実行してしまう。(command-option-control-Y を割り当ててみた。)


(*
--操作対象のアプリを最前面に設定する(スクリプトメニューから実行する場合必要) set current_app to short name of (info for (path to frontmost application)) activate application current_app --tell application "System Events"ブロック内ではエラーになる *)

tell application "System Events"
delay 0.5
keystroke "c" using command down
delay 0.5
do shell script ". /usr/local/bin/saykanji.sh;saykanji " & "'" & (the clipboard as string) & "'"
end tell


これでテキストを選択して、command-option-control-Yで日本語の音読が始まるようになった!

諸々

  • 選択したテキストの中に「'」が含まれていると正常に実行できない...。
    • AppleScriptでコマンドを生成する時、「'」を利用しているため。
  • 表計算ソフトで数字の読み合わせをする時、かなり便利かもしれない!
    • セル選択すると、左から右へ、上から下にの順で読み上げてくれた。
    • カンマはひと呼吸置いてくれる。
    • セルを移動する時にもひと呼吸置いてくれるように工夫すれば、かなり聞き取り易くなりそう。
  • saykanaの定義方法については、他にもっと素晴らしいやり方があるかもしれない。
    • cシェル系ならaliasコマンドで引数も利用できるらしい、ので。