英単語→発音記号の変換をプログラムで行う

面白かったので。


  • 2016/10/02 作成

概略

システム英単語 Ver.2 っぽい何か を作るときに発音記号を補完するためにちょっと調べ物をした記録。

発音記号のデータ

さすがに辞書サイトから1単語ずつhtmlとってきてスクレイピングなんてことはしたくない。APIもいい感じのものはあんまりない。で、検索したらこんなのが。

どうやらカーネギーメロン大学がまとまったデータを配布しているらしい。

データ本体は以下のページ内の「cmudict-0.7b」。

で、このデータは「Arpabet」という記法で発音記号を表記しているので、国際音声記号(IPA)をすぐに得られるというわけではない。

Arpabet → IPA の変換

さっきの「cmudict-0.7b」は以下のような形式でデータが入っている。

ABOUHALIMA  AA2 B UW0 HH AA0 L IY1 M AH0
ABOUHALIMA'S  AA2 B UW0 HH AA0 L IY1 M AH0 Z
ABOUND  AH0 B AW1 N D
ABOUNDED  AH0 B AW1 N D IH0 D
ABOUNDING  AH0 B AW1 N D IH0 NG
ABOUNDS  AH0 B AW1 N D Z
ABOUT  AH0 B AW1 T
ABOUT'S  AH0 B AW1 T S
ABOVE  AH0 B AH1 V
ABOVE'S  AH0 B AH1 V Z
ABOVEBOARD  AH0 B AH1 V B AO2 R D
ABPLANALP  AE1 B P L AH0 N AE0 L P
ABRA  AA1 B R AH0
ABRACADABRA  AE2 B R AH0 K AH0 D AE1 B R AH0
ABRAHAM  EY1 B R AH0 HH AE2 M

単語と発音との間は半角スペースが2つ入っているので、ここで分割してArpabetの変換をできれば完成、という感じにしたい。Arpabet⇔IPAの変換表はWikipediaに細かく書いてある。

でもこれは使いづらいので以下を加工する方がいいはず。

ただしこれにはアクセントが振られていないので、自分で付けないといけない。Arpabetはスペースで区切ると音素1つずつにすることができるが、このとき音素の末尾に付いている数字が1なら第1強勢、2なら第2強勢なので、これに従ってアクセント記号を付加すればよい。

で、完成したテーブルが以下。

AO	ɔ
AO0	ɔ
AO1	ɔ́
AO2	ɔ̀
AA	ɑ
AA0	ɑ
AA1	ɑ́
AA2	ɑ̀
IY	i
IY0	i
IY1	í
IY2	ì
UW	u
UW0	u
UW1	ú
UW2	ù
EH	e
EH0	e
EH1	é
EH2	è
IH	ɪ
IH0	ɪ
IH1	ɪ́
IH2	ɪ̀
UH	ʊ
UH0	ʊ
UH1	ʊ́
UH2	ʊ̀
AH	ʌ
AH0	ə
AH1	ʌ́
AH2	ʌ̀
AE	æ
AE0	æ
AE1	ǽ
AE2	æ̀
AX	ə
AX0	ə
AX1	ə́
AX2	ə̀
EY	eɪ
EY0	eɪ
EY1	éɪ
EY2	èɪ
AY	aɪ
AY0	aɪ
AY1	áɪ
AY2	àɪ
OW	oʊ
OW0	oʊ
OW1	óʊ
OW2	òʊ
AW	aʊ
AW0	aʊ
AW1	áʊ
AW2	àʊ
OY	ɔɪ
OY0	ɔɪ
OY1	ɔ́ɪ
OY2	ɔ̀ɪ
P	p
B	b
T	t
D	d
K	k
G	g
CH	tʃ
JH	dʒ
F	f
V	v
TH	θ
DH	ð
S	s
Z	z
SH	ʃ
ZH	ʒ
HH	h
M	m
N	n
NG	ŋ
L	l
R	r
ER	ɜr
ER0	ɜr
ER1	ɜ́r
ER2	ɜ̀r
AXR	ər
AXR0	ər
AXR1	ə́r
AXR2	ə̀r
W	w
Y	j

たぶんこれであってる。ハッシュテーブルにでも読み込めばいくらでも使えるのでどうぞ。