saykanjiコマンドを定義して漢字仮名混じり文を読み上げる
saykanaコマンドという素晴らしいコマンドが紹介されていた。コマンドに続けて入力した、ひらがな・かたかな・英数字を日本語で読み上げてくれるのだ。こういうのを見つけると、とりあえず試してみたくなる。
$ saykana にほんごをはなそう $ saykana 123 $ saykana ABC
- 調子良く読み上げてくれた!面白い!
- ところが、意地悪く漢字混じりの文章を試すと...
$ saykana 日本語を話そう ERR:(105) invalid kana string. 日本語を話そう
- コマンド名が sayかな なのだから当然の仕様だ。
mecabの利用
- ところで、自分のMacBookでは以前、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
Quicksilverからの利用
自分の場合、スクリプトは最終的にQuicksilverに登録して、ショートカット一発で実行してしまう。(command-option-control-Y を割り当ててみた。)
- Quicksilverでは、操作対象のアプリを最前面に設定するスクリプトが邪魔になるので、コメントアウトした。
(*
--操作対象のアプリを最前面に設定する(スクリプトメニューから実行する場合必要) 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コマンドで引数も利用できるらしい、ので。
参考ページ
素晴らしいコマンドに感謝です!
素晴らしい情報に感謝です!
とても参考になりました。感謝です!
- Applied Mathematics -- 第 4 回 (2005.05.13) -- 標準入出力 および シェル環境のカスタマイズ
- プログラマメモ2: aliasの中に引数を入れれるか?
- 関数の使用方法 - UNIX & Linux コマンド・シェルスクリプト リファレンス
素晴らしいプラグインが公開されていました!