CMUの発音記号辞書を加工して使う(IPA風に変換する)
スポンサーリンク
少しは暑さも和らいだ(?)ような感じなのでどうにか怠け癖に決別を。耳の状態の良いうちにリハビリを兼ねてプログラミングネタ。
フリーの発音記号辞書が存在するというのは地味に凄いことではないでしょうか。
内容は見出し語と対応する発音のみですが、約13万項目なので一般的な単語はカバーしているはず。
やりたいこと
アメリカのカーネギーメロン大学がPublic DomainBSDライセンス*1で公開している英語の発音辞書を活用したい。
The CMU Pronouncing Dictionary
英語版Wikipedia CMU Pronouncing Dictionary - Wikipedia, the free encyclopedia
"Arpabet"という形式になっているので、まずはIPA発音記号*2にしたい。とりあえずはJSONにしておいて、用途に応じて再度加工すればよさそう。
"Arpabet"は下記のようにアスキー文字だけで発音記号を表記する形式。音声認識関係では使われているらしく、機械に優しい形式のようです。
hello HH AH0 L OW1
ちなみに、日本の一般的な辞書や英単語帳の発音記号表記はジョーンズ(Jones)式。
データの取得と変換
リポジトリ: GitHub - cmusphinx/cmudict: CMU US English Dictionary
猫も杓子もGithubですかそうですか。
SF.net(以下参照)からも取得できるようだが中身が微妙に違う。GitHubの方が新しいのか、記号類が別ファイルになっている。
p/cmusphinx/code - Revision 13228: /trunk/cmudict
準備
$ git clone https://github.com/cmusphinx/cmudict.git $ cd cmudict
githubからgit clone
。
ざっくりファイルを確認すると、
cmudict.dict : 辞書ファイル本体 cmudict.phones : それぞれの発音について、破裂音とか摩擦音などの分類表(39行) cmudict.symbols : アクセントの有無を含めた`Arpabet` のリスト(84行) cmudict.vp : 記号と読み方(記号1文字に続いて英語読み、その後ろにスペース区切りで発音が記載)
辞書ファイル本体とcmudict.symbols
があればまずは十分。
方針の検討
まずはcmudict.symbols
と、アクセント記号つきのIPAフォントの対応リストを作る。cmudict.vp
は今回はスルーする。
Wikipedia にIPA発音記号とのマッピングが記載されているのでこれに従えばよさそう。
アクセント位置がAH1
のように数字で記載されている点を考慮する必要がある。
0 アクセントなし(No stress) 1 第一アクセント(Primary stress) 2 第二アクセント(Secondary stress)
一般的な表記と同じように第一アクセントをアキュート・アクセント 、第二アクセントをグレイヴ・アクセントつきの文字に割り当てる。
それぞれ、U+0301
、U+0300
をを使ってユニコードの合成文字で表現する。
厳密にIPAに合わせるなら、アクセント位置の音節の前にˈ
(U+02C8)とˌ
(U+02CC)で第一アクセントと第二アクセントを表す必要がある。
また、対応表には存在しないが、長音を示すコロン(三角形のコロン([ː] U+02D0
))をオンラインの辞書で使用されている表記に合わせるために追加。
例えばAA
を[ɑː]
にする方が自然*3。
同じ要領でER
: 長音を示す[:]を間に挟む([ɜːr])。
注意点など
- 一部の単語には末尾にコメント('abbrev'や
foreign french
など)が記載されているので#
以降を無視する必要がある - アクセントがつく可能性のあるものは、
AA0
、AA1
、AA2
のようなパターンで、必ず数字がつく。逆に言うとAA
という形では登場していない - 長音を示すコロンに三角形のコロン([ː]
U+02D0
)より普通のコロン([:]U+003A
)の方がいい? AH
(AH0、AH1、AH2)について: Wikipediaの対応表では[ʌ]
と[ə]
の2パターン。いわゆる曖昧母音にはアクセントはこないはずなので、AH0
を[ə]
に割り当てる- 二重母音で対応する1文字のフォントがない場合、アクセントは最初の文字でいい?
- 二重母音は対応する1文字のフォントより2文字で表現した方が見栄えはいいかも
暫定仕様ということで。
参考にしたページ
変換
作成したマッピングテーブルはこんな感じ(タブ区切りテキスト)。発音記号を表す英数字とユニコードエスケープをタブ区切りで表記してあります。
このファイルと上記のcmudict.dict
を読み込んで逐次置き換えるスクリプトを作成。
Ruby のハッシュを活用して適当に……。発音のバリエーションはキーを見出し語に、IPA形式の発音記号を配列の要素とする。ファイルに書き出すときは適当な区切り文字入れればいい。
To convert the cmudict from arpabet format to IPA ...
cmudict
とGistのTSVファイルと上記スクリプトを用意してやればoutput.json
が作成される。読み込むファイルのパスは決め打ちなので適宜修正のこと。
関連URL
[2016/10/12 追記]
同じようなことをやっている方がいるので参考までにURLを記載しておきます。arpabet-to-ipa
というPHPのライブラリで変換表を作成しているのかな。
- 英単語→発音記号の変換をプログラムで行う
- GitHub - wwesantos/arpabet-to-ipa: Convert Arpabet to IPA. Arpabet is the set of phonemes used by the CMU Pronouncing Dictionary. IPA is the International Phonetic Alphabet.
- arpabet-to-ipa/App.php at master · wwesantos/arpabet-to-ipa · GitHub
まとめ
しょぼいスクリプトですがご参考まで。もちろん自己責任で。
あとは用途に応じてRedisに突っ込む、RealmとかCore Data でもなんでもあり。 問題点を挙げるとすれば、品詞によって発音が変化するようなものは対応不能です*4。
ついでに紹介しておくと、発音の勉強には以下の本がおすすめです。発音記号は日本式です。
- 作者: 鷲見由理
- 出版社/メーカー: ナツメ社
- 発売日: 2008/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 64人 クリック: 1,019回
- この商品を含むブログ (38件) を見る