ESP-WROOM-02 で AquesTalk pico LSI を喋らせてみた (3)
ESP-WROOM-02 で AquesTalk pico LSI を喋らせてみた (2) のあと、少しずつ、喋るプログラムを改良しているところ。最終的にアルファベットの音声記号にしてやらなければならないが、まずは、正しい読みを得るところが問題。読みを作るのに Mecab を使うことにしたが、辞書はどうするか。未知語がたくさんあるとよろしくないので、新語・固有表現に強い「mecab-ipadic-NEologd」の効果を調べてみた を読む。mecab-ipadic-NEologd は形態素解析エンジン MeCab と共に使う単語分かち書き辞書で、週2回以上更新更新され、新語・固有表現に強く、語彙数が多く、しかもオープンソース・ソフトウェアである という特徴があります。ニュースヘッダの読み上げをするときには、こういう辞書を使った方が気持ち良い読み上げをしてくれそう。mecab-ipadic-NEologd には以下のような4つの特徴があります。IPADIC では複数の形態素に分割されてしまう固有表現を採録毎週 2 回以上更新Web上の言語資源を活用して更新時に新しい固有表現を随時追加ライセンスが Apache License, Version 2.0素晴らしい。LINEのエンジニアの佐藤敏紀さん(@overlast、)。推奨空きメモリ領域が、標準インストール時(オプション未指定の場合) 必須: 空き 1.5GByte、推奨: 空き 5GByte、標準インストール時のバイナリファイルのサイズは約850MByte ということで、それなりにリソースを食うのは、今時なので仕方ないとしよう。得られるものの方が大きいものね。PC で動かすので、HDD とかあまり気にならないし。形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介、mecab-ipadic-NEologd の効果的な使い方 も読んでみる。さらに NEologd Casual Talks #neologd 参加レポート も読んでみる。テキスト前処理用Pythonモジュールneologdnの紹介 by @_yukinoi も読んでみた。いいかもしれない。解析前に行うことが望ましい文字列の正規化処理 をやってくれるわけね。pip install neologdn でインストールできるし、benchmark では公式のものより 2倍程度速い。import neologdns = neologdn.normalize("正規化したい文字列0-90-9A-ZA-Za-za-zドドーーーーン")print(s) を実行すると、「正規化したい文字列0-90-9A-ZA-Za-za-zドドーン」となる。よさそうなので、使ってみることにした。次に問題になるのは、カタカナの読みをローマ字に変換するところ。MeCab の辞書構造と汎用テキスト変換ツールとしての利用 を使ってやるのもありかなと思ったが、とりあえず、Pythonでひらがな/カタカナとローマ字を相互に変換するAdd Starhayashihs-yata でやってみる。python3 だとエラーになるので 2to3 - Python 2 から 3 への自動コード変換 を使ったら簡単に Python3 で動くようになった。2to3 -w 変換するファイル.py で、オリジナルは .bak をつけて、書き換えてくれる。import amasakasufrom amasakasu import kana2romajis = "コレヲローマジニヘンカンシテネ"s = kana2romaji(s)print(s) koreworomajinihenkanshitene となる。MeCab 使ってやってもいいんだろうけど、とりあえず、これでいく。これで、漢字かな混じりの日本語から発音記号に変換するベースが整った。実際には、変換したままだと、制限字数を超えてしまうし、区切りも、アクセントも、数字の扱いも入れる必要があるので、今、そのあたりまでのベースを作ったところ。単純に単語単位で区切り文字を入れて、喋らせるだけだと、かなり聞きづらい。うまい具合に書き換えを入れたり、区切り記号を入れたり、アクセントをつけるところは、意外と難しい。ある程度はルールベースで入れて、個別にルールを追加しながら試しているところ。