sayコマンドで日本語を読み上げる
Macのsayコマンドはローマ字しか読めないので、
MeCabで漢字をカタカナにして、カタカナを全角半角,ひらがなカタカナの変換 - ロバの耳でひらがなに変換、さらにromkanでひらがなをローマ字に変換して
ようやくsayに読ませると日本語を読み上げれる。
……発音微妙だったけど
MeCabは入ってるからいいとして、romkanのインストール
http://0xcc.net/ruby-romkan/ から
wget http://0xcc.net/ruby-romkan/ruby-romkan-0.4.tar.gz tar -zxvf ruby-romkan-0.4.tar.gz
中身からromkan.en.rd romkan.ja.rd romkan.rbをコピーして使う。
同じディレクトリにプログラムを書く
kana-say.rb
#!/usr/bin/env ruby require 'rubygems' require 'jcode' require 'MeCab' require 'romkan' require 'kconv' mecab = MeCab::Tagger.new('-Ochasen') ARGV.each{ |arg| $KCODE = 'u' kana = '' parsed = mecab.parse(arg) parsed.each{|ps| w = ps.split(/\t/)[1] # 読み仮名だけ抜き出す kana += ' ' + w if w != nil } puts '読み:' + kana hiragana = kana.tr('a-zA-Zァ-ン0-9', 'a-zA-Zぁ-ん0-9') # ひらがなに変換 puts 'ひらがな:' + hiragana $KCODE = 'e' roma = '' hiragana.toeuc.to_roma.split('').each{|c| # ローマ字に変換 roma += c if c =~ /[\w\s]/ # 記号を消す } puts 'say:' + roma.toutf8 `say #{roma.toutf8}` # 読み上げ }
途中で文字コードを変えまくっているのは、MeCabの辞書はutf8なのにromkanの辞書はeuc-jpだから。
使ってみる
% ruby kana-say.rb 地元でお天気母さんと呼ばれている女性です 読み: ジモト デ オ テンキ カアサン ト ヨバ レ テ イル ジョセイ デス ひらがな: じもと で お てんき かあさん と よば れ て いる じょせい です say: jimoto de o tenki kaasan to yoba re te iru josei desu % ruby kana-say.rb この日、田んぼにお天気母さんこと鈴木文子の姿がありました 読み: コノ ヒ 、 タンボ ニ オ テンキ カアサン コト スズキ アヤコ ノ スガタ ガ アリ マシ タ ひらがな: この ひ 、 たんぼ に お てんき かあさん こと すずき あやこ の すがた が あり まし た say: kono hi 、 tanbo ni o tenki kaasan koto suzuki ayako no sugata ga ari mashi ta % ruby kana-say.rb 今日は2008年12月30日です 読み: コンニチ ハ 2008 ネン 12 ガツ 30 ニチ デス ひらがな: こんにち は 2008 ねん 12 がつ 30 にち です say: konnichi ha 2008 nen 12 gatsu 30 nichi desu
スペースを空けているのは、開けないと数字が混ざっている時に読みがおかしくなる為。
数字だけ英語読みになってかっこいい。駄目だこれは