Ubuntu Weekly Recipe

第251回 Ubuntuに日本語を話してもらおう(後編)

この記事を読むのに必要な時間:およそ 6 分

MeCabのPythonバインディングのインストール

先週扱ったMeCabのPythonバインディングですが,⁠python-mecab」パッケージとして提供されています。Ubuntuソフトウェアセンターを使いインストールしてください。

図1 Ubuntuソフトウェアセンターでpython-mecabを検索

図1 Ubuntuソフトウェアセンターでpython-mecabを検索

この「python-mecab」パッケージはPython2用のモジュールを提供します。Ubuntuの開発方針として「すぐにでもPython3をデフォルトとしよう」というものがありますが,今回はこのモジュールの制約を受けて,Python2用のスクリプトを作りました。

AlternativesシステムでMeCabのデフォルト辞書を変更する

MeCabから取得できる形態素情報は使う辞書によって異なります。今回はnaist-jdicの使用を前提とします。もし複数の辞書をインストールしている場合は,DebianのAlternativesシステムを使って切り替えておきます。

Alternativeシステムとは,類似の機能を持つプログラムやバージョンが異なるプログラムを共存させるための仕組みです。例えば「システムにemacs23がインストールされているけど,emacs24も使いたい」というとき,インストールしたemacs24をAlternativesシステムの「emacs」に登録します。以降はAlternativesシステム上で「emacs」に対して「emacs23」「emacs24」のどちらかを選択できるようになり,選択したものを「emacs」というコマンドで実行することができるようになります。

他の例も挙げてみましょう。何らかのソフトウェアをビルドする際にその過程で,あるコマンドが実行されるとします。そのコマンドには複数の実装があり,デフォルトでインストールされている実装ではソフトウェアのビルドに失敗するとします。適した実装をインストールして使わなければならないわけですが,余計なトラブルを防ぐために,なるべくデフォルトのものには手をつけたくありません。

このようなトラブルの解決するのがAlternativesシステムです。Alternativesシステムは実はシンボリックリンクを管理しています。先ほどの「emacs」は実行バイナリへのシンボリックリンクになっていて,Alternativesシステムはこのシンボリックを設定に応じて「張り替え」ることで,切り替えを柔軟にしています。ソフトウェアをビルドする際は一時的にコマンドがbetuna 実装を指すようにし,ビルドが無事に終了したら元に戻します。

さてMeCabのデフォルト辞書もまた,このAlternativesによって管理されています。確実にnaist-jdicをデフォルトにするために,次のように入力して再設定を行います。

$ sudo update-alternatives --config mecab-dictionary

alternative mecab-dictionary (/var/lib/mecab/dic/debian を提供) には 6 個の選択肢があります。

  選択肢    パス                               優先度  状態
------------------------------------------------------------
  0            /var/lib/mecab/dic/naist-jdic         100       自動モード
  1            /var/lib/mecab/dic/ipadic             70        手動モード
  2            /var/lib/mecab/dic/ipadic-utf8        80        手動モード
  3            /var/lib/mecab/dic/juman              30        手動モード
  4            /var/lib/mecab/dic/juman-utf8         40        手動モード
* 5            /var/lib/mecab/dic/naist-jdic         100       手動モード
  6            /var/lib/mecab/dic/naist-jdic-eucjp   90        手動モード

現在の選択 [*] を保持するには Enter,さもなければ選択肢の番号のキーを押してください:

この例では,5を選択することになります。

スクリプトの概要

今回作成したスクリプトは,次からダウンロードできます。

このスクリプトは,PythonのMeCabモジュールとnaist-jdicを利用して入力文字列を分かち書きし,その結果得られたの読みや品詞の情報を利用してmbrola用の一時ファイルを作成します。その後,スクリプトはmbrolaを実行して音声を合成します。合成した音声をシェルのパイプ機能を用いてaplayerに標準入力し,aplayerはPulseAudioとALSAサウンドサブシステムを用いてシステム音声を出力します。

mbrolaデータベースとしてjp1を用います。スクリプト内にデータベースへの相対パス「./jp1/jp1」が記述してありますので,jp1データベースの配置先に注意してください。

スクリプトを実行するには,端末で次のように実行します。なお,この例ではスクリプトのファイル名を「mecabrola.py」としています。

$ python2 ./mecabrola.py
何を喋りたい?:

実行すると入力待ちとなりますので,喋らせたい文を入力してエンターを押してください。

$ python2 ./mecabrola.py
何を喋りたい?: あらゆる現実をすべて自分の方へねじ曲げたのだ。
再生中 Sparc オーディオ 'stdin' : Signed 16 bit Big Endian, レート 22050 Hz, モノラル

スクリプトの制約として,naist-jdic辞書にない単語,あるいは辞書から読みを取得できない単語は発音できず,無音となります。この制約により,次の例では「ぴゅんとつばを」が無音となります。

$ python2 ./mecabrola.py
何を喋りたい?: アフリカ人は,実に巧みにぴゅんとつばを吐く。
再生中 Sparc オーディオ 'stdin' : Signed 16 bit Big Endian, レート 22050 Hz, モノラル
$ echo "アフリカ人は,実に巧みにぴゅんとつばを吐く。" | mecab
アフリカ    名詞,固有名詞,地域,一般,*,*,アフリカ,アフリカ,アフリカ,,
人      名詞,接尾,一般,*,*,*,人,ジン,ジン,,
は      助詞,係助詞,*,*,*,*,は,ハ,ワ,,
,      記号,読点,*,*,*,*,,,,,,,,
実に    副詞,一般,*,*,*,*,実に,ジツニ,ジツニ,,
巧み    名詞,形容動詞語幹,*,*,*,*,巧み,タクミ,タクミ,,
に      助詞,副詞化,*,*,*,*,に,ニ,ニ,,
ぴゅんとつばを    名詞,一般,*,*,*,*,*
吐く    動詞,自立,*,*,五段・カ行イ音便,基本形,吐く,ハク,ハク,,
。      記号,句点,*,*,*,*,。,。,。,,
EOS

さらに,促音や拗音から始まるような単語は処理のロジックから外れるため,まるまる無音としました。英数字は辞書にあるもののみ発音できます。例えば「C言語」が辞書に収録されています。

著者プロフィール

坂本貴史(さかもとたかし)

Ubuntuのマルチメディア編集環境であるUbuntu Studioのユーザ。主にUbuntu日本コミュニティとUbuntu Studioコミュニティで活動。いつかユーザ同士で合作するのが夢。

コメント

コメントの記入