スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【同じタグを付けた記事の一覧】

MeCab と KanateaTalk で漢字かな交じり文の読み上げ

2012年05月20日(日)20時34分

出力フォーマット

前回「MeCab と NAIST-jdic を Windows で使う」の続きですので、前回の作業が済んでいることが前提となります。
また今回も、話を簡単にするため、「D:\MeCab」フォルダに MeCab 環境を構築した、という想定で書いています。
前回は「MeCab を使って文章を形態素解析する」ところまでを書きましたが、今回は「分かち書き(品詞ごとにスペースで分割)」や、「カナ変換」をします。
ついでで、以前「カナ読み上げツール KanateaTalk」で作ったツールと組み合わせて使い、「漢字かな交じり文を(簡易的に)読み上げる」ということもしてみます。

「わかち書き」と「ヨミ付与」

「分かち書き」は、MeCab 本体にその機能が組み込まれているため、非常に簡単です。
前回の「MeCab.bat」に、以下のように「-Owakati」を付け加えれば、例えば「今日はあいにく雨でしたが、明日は晴れるそうです。」が「 今日 は あいにく 雨 でし た が 、 明日 は 晴れる そう です 。 」のようにスペースで分割されます。

".\bin\mecab.exe" "SORC.txt" -r ".\bin\mecabrc" -d ".\dic" -Owakati -o "DEST.txt"

「カナ変換(ヨミ付与)」に関しても、これは MeCab 組み込みでこそありませんが、辞書フォルダ「D:\MeCab\dic」にある「dicrc」であらかじめ定義してあるため、同様に「-Oyomi」を付け加えれば、「キョウハアイニクアメデシタガ、アシタハハレルソウデス。」のようにカナに変換されます。

".\bin\mecab.exe" "SORC.txt" -r ".\bin\mecabrc" -d ".\dic" -Oyomi -o "DEST.txt"

「発音変換」

NAIST-jdic が持つカナ情報には「読み」と「発音」があり、上記「-Oyomi」で取得できるのは「読み」の方です。
具体的には、「今日は、」というフレーズに対し、「キョウハ、」となるのが「読み」、「キョーワ、」となるのが「発音」で、音声合成に使用する場合、「発音」の方が必要になります。
しかし、「-Ohatuon」というオプションはありませんので、まずこれを自分で定義し、それを呼び出すようにします。
独自の定義は「mecabrc」に書きます。
これは、前回の作業でいうと「D:\MeCab\bin\mecabrc」になり、このファイルに「D:\MeCab\dic\dicrc」の「-Oyomi」用定義を参考に、以下の三行を追加します。

node-format-hatuon = %pS%f[8]
unk-format-hatuon = %M
eos-format-hatuon  = \n

この「mecabrc」の文字コードに関しては、SHIFT-JIS でも UTF-8 でも(多分 EUC でも)良いようで、「メモ帳」で書き換えても特に問題は出ませんでした。
もっとも、英数記号しか使わなければ、文字コードの違いはあまり関係ない、ということもあるかと思いますが。
その後、「MeCab.bat」を以下のようにすれば、「キョーワアイニクアメデシタガ、アシタワハレルソーデス。」のように発音に変換されます。

".\bin\mecab.exe" "SORC.txt" -r ".\bin\mecabrc" -d ".\dic" -Ohatuon -o "DEST.txt"

「発音わかち書き」

次は、KanateaTalk で読み上げさせるための準備として、「発音変換」した上で「分かち書き」出力ができるようにします。
もっとも、自力でアクセントをつける予定がなければ、「発音変換」だけでも読めはするのですが。
まずは「mecabrc」に以下の三行を追加します。

node-format-talk = %pS%f[8]\s
unk-format-talk = %M
eos-format-talk  = \n

そして「MeCab.bat」を以下にすることで、「キョー ワ アイニク アメ デシ タ ガ 、 アシタ ワ ハレル ソー デス 。 」が得られます。

".\bin\mecab.exe" "SORC.txt" -r ".\bin\mecabrc" -d ".\dic" -Otalk -o "DEST.txt"

KanateaTalk で読み上げ

生成した「発音わかち書き」を読み上げるため、KanateaTalk を用意します。
といっても、「http://www.vector.co.jp/soft/winnt/art/se495518.html」からダウンロードし、「speakers」フォルダと「KanateaTalk.exe」を「D:\MeCab\bin」フォルダにコピーするだけです。
その後、「D:\MeCab」フォルダに以下二行の TEXT ファイルを作り、「KanateaTalk.bat」にリネームして実行すると、「D:\MeCab\SORC.txt」の内容を読み上げるようになります(「SORC.txt」は BOM 有りの UTF-8 で保存してください)。

".\bin\mecab.exe" "SORC.txt" -r ".\bin\mecabrc" -d ".\dic" -Otalk -o "DEST.txt"
".\bin\KanateaTalk.exe" "DEST.txt"

読み上げの制限

MeCab + NAIST-jdic」の出力内容と KanateaTalk の仕様上の齟齬などもあり、あくまでも「簡易的な」読み上げになります。
まず、原文にアルファベットや辞書にない漢字(特に Unicode な文字等)が存在すると、KanateaTalk がエラーを出します。
また、数字は「桁読み」や「助数詞による変化」はしません。
そして、アクセント情報はありませんので、当然「棒読み」です。

UTF-8 と BOM

すでに書いた通り、KanateaTalk で読み上げさせる場合、「SORC.txt」は「BOM 有り」の UTF-8 で保存する必要があります。
これは KanateaTalk が、BOM の有無で SIFT-JIS と UTF-8 の判別を行っているためです。
では、MeCab の方は入力ファイルの形式で出力ファイルの BOM が決定されているのか?というと、そういうわけではなく、基本的には「BOM 無し」で出力されているようです。
仕様やソースにあたったわけではありませんので、推測でしかないのですが、「mecabrc」で定義した「unk-format-talk = %M」が重要で、この行を削ると、ソースの形式にかかわらず「BOM 無し」で出力されてしまいます(結果的に KanateaTalk で読み上げできません)。
この行は「unk-format」、つまり辞書にない「未定義」な語の扱いを定義するもので、「%M」というのは、「文字でも記号でも何でも、ともかく不明なものはそのまま出力する」という意味のようです。
こういう定義がされているため、BOM が存在すると、BOM は文字ではないため辞書にはありませんので、「未定義」と判定され、出力ファイルにそのまま BOM として書き込まれているのではないかと思われます。

関連記事

【同じタグを付けた記事の一覧】
音声技術 GalateaProject 音声合成 GalateaTalk

スポンサーサイト

コメントの投稿

非公開コメント

また、2ちゃん

こんばんは。

久しぶりに2chを覘いてみたら、面白い話題をやってました。この記事関連ですね。

説明が大変なので、読んで貰えればと。
http://potato.2ch.net/test/read.cgi/software/1404552808/561-567

Re: また、2ちゃん

こんばんは、aさん。

YahooのWEBサービスの話ですね。
サービス開始の頃に少し調べたことがあるのですが、
開発者登録をしてIDを発行してもらい、
そのIDをリクエストに埋め込まねばならず、
またIDごとにリクエスト上限が制限される仕様だった記憶があります。
それで、もしこれで何かを作って公開する場合、
それに自分のIDを埋め込むと、みんなで一つのIDを使うことになるため
利用者数によっては上限にすぐ達してしまうのではないか?
というようなことを考えていました。

また、自分が取得したIDを公開せざるを得ないことになると
セキュリティ的にどうなのだろう、とか、
では利用者にそれぞれ開発者登録をしてもらってIDを入力してもらうのも
利便性を考えるとどうなのかな、ということもあって
それ以上深く追うことはなかったのです。

紹介されたスクリプトを読んだ限りでは
IDはそのまま埋め込まれているようですので
別にそういうことは特に懸念する必要はなかったのかな、という感じですね。

あとはAquesTalkやKanateaTalkでは、できれば「読み(今日は=キョウハ)」ではなく
「発音(今日は=キョーワ)」が欲しいところですので、
そのあたりの機能があるのか?というところでしょうか。

そういえば今回の話で思い出しましたが、
以前にMSSPのHarukaで2パスエンコードして読み上げ精度を上げる、
という構想を立てたことがあります。
つまりSAPI系は読み上げた結果のフリガナが取得できますので、
一度カラ読み上げ(内部で音声データの生成だけをして音を出さない)をして
そのフリガナを取得し、
Harukaより精度の高い形態解析機で取得したフリガナと比較して、
間違った部分だけを仮名に開いて再度読み上げさせるという方式です。
これによって全てを仮名にして読み上げるのに比べれば
ある程度の自然なアクセントを残しつつ読み間違いを減らせるという算段です。
ところがMSSPのHarukaは何故かフリガナが全て母音変換される
(例えば「おはよう」からは「オアオウ」が取得される)
という謎の実装がされていたため断念したのですが。
最新記事
最新コメント
Amazonおまかせリンク
カテゴリ
タグクラウド
Amazonお買い得ウィジェット
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
プロフィール

電脳太助

Author:電脳太助
Website:電脳スピーチ web

RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

サイト内検索
Ads by Google
FC2アクセスランキング
Ads by Google
FC2拍手ランキング
ユーザータグ

音楽管理(66)
ポータブル(57)
ソフト紹介(44)
プログラミング(42)
音声技術(41)
自作ソフト(35)
サイト運営(32)
FC2(31)
ブログ(30)
iTunes(27)
Windows(25)
LISMO(24)
音声合成(23)
音声認識(22)
x-アプリ(22)
電子ブック(22)
eラーニング(20)
バックアップ(19)
語学学習(19)
foobar2000(18)
ソースコード(18)
WindowsLiveWriter(15)
画像管理(15)
C++(14)
アフィリエイト(10)
DnspTools(10)
fi-6130(9)
FLAC(9)
JavaScript(9)
ウォークマン(9)
英語音読学習計画(8)
Gracenote(8)
Prolog(8)
ベクター(8)
雑記(8)
CodeBlocks(7)
SyntaxHighlighter(7)
TraConv(7)
spcbght(7)
wxWidgets(7)
VirtualBox(6)
W63CA(6)
DCP-J552N(6)
WinRT(6)
WindowsLiveMesh(6)
iGoinLM(6)
英語発音矯正実験(6)
ExactAudioCopy(6)
MP3Gain(6)
LAME(5)
音楽技術(5)
Mery(5)
楽器演奏(5)
GalateaTalk(4)
nLite(4)
WindowsLiveSkyDrive(4)
ホームページ(4)
GalateaProject(4)
MIDI(4)
LLVM(4)
PC-98(3)
カウンター(3)
AACGain(3)
iTCDini(3)
OverCutChecker(3)
拍手(3)
PK-513L(3)
UniversalExtractor(3)
アクセスランキング(3)
ImageCompositeEditor(2)
アクセス解析(2)
OCR(2)
qtaacenc(2)
資格試験(1)
AquesTalk(1)
AquesCmdDl(1)

FC2アクセスランキング
最新トラックバック
アクセスランキング
[ジャンルランキング]
コンピュータ
126位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
14位
アクセスランキングを見る>>
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。