python中是否有可以将单词(主要是名称)转换为Arpabet语音转录的库?
BARBELS - > B AA1 R B AH0 L Z
BARBEQUE - > B AA1 R B IH0 K Y UW2
BARBEQUED - > B AA1 R B IH0 K Y UW2 D
BARBEQUEING - > B AA1 R B IH0 K Y UW2 IH0 NG
BARBEQUES - > B AA1 R B IH0 K Y UW2 Z
答案 0 :(得分:13)
在安装了cmudict
语料库的情况下使用nltk:
arpabet = nltk.corpus.cmudict.dict()
for word in ('barbels', 'barbeque', 'barbequed', 'barbequeing', 'barbeques'):
print(arpabet[word])
产量
[['B', 'AA1', 'R', 'B', 'AH0', 'L', 'Z']]
[['B', 'AA1', 'R', 'B', 'IH0', 'K', 'Y', 'UW2']]
[['B', 'AA1', 'R', 'B', 'IH0', 'K', 'Y', 'UW2', 'D']]
[['B', 'AA1', 'R', 'B', 'IH0', 'K', 'Y', 'UW2', 'IH0', 'NG']]
[['B', 'AA1', 'R', 'B', 'IH0', 'K', 'Y', 'UW2', 'Z']]
在python解释器类型中安装cmudict
语料库:
>>> import nltk
>>> nltk.download()
Use GUI to install
corpora>cmudict
答案 1 :(得分:13)
你想要的是各种称为“来信声”或“字母到音素”的引擎。有几个,包括每个文本到语音系统中的一个。
我通常会处理非美国口音,我使用espeak。它不直接输出arpabet(无论如何都限制为美国声音),但你可以哄它尝试美国口音,然后从IPA转换为arpabet。
>>> from subprocess import check_output
>>> print check_output(["espeak", "-q", "--ipa",
'-v', 'en-us',
'hello world']).decode('utf-8')
həlˈoʊ wˈɜːld
您可以使用-x
而不是--ipa
来表示espeak自己的电话代码(它是ascii):
>>> check_output(["espeak", "-q", "-x", '-v', 'en-us', 'hello world'])
h@l'oU w'3:ld
转换为arpabet并不像角色查找那么简单;例如,“tʃ”应该转换为“CH”,而不是贪婪的转换会给你的“T SH”(除了,在奇怪的情况下,例如“血汗工厂”的“swɛtʃɑːp”)。
答案 2 :(得分:6)
获取cmu pronouncing dictionary,然后您可以使用nltk获取相关的
arpabet语音转录来自该词典的任何单词本身
>>> entries = nltk.corpus.cmudict.entries()
>>> len(entries)
127012
>>> for entry in entries[39943:39951]:
... print entry
...
('fir', ['F', 'ER1'])
('fire', ['F', 'AY1', 'ER0'])
('fire', ['F', 'AY1', 'R'])
('firearm', ['F', 'AY1', 'ER0', 'AA2', 'R', 'M'])
('firearm', ['F', 'AY1', 'R', 'AA2', 'R', 'M'])
('firearms', ['F', 'AY1', 'ER0', 'AA2', 'R', 'M', 'Z'])
('firearms', ['F', 'AY1', 'R', 'AA2', 'R', 'M', 'Z'])
('fireball', ['F', 'AY1', 'ER0', 'B', 'AO2', 'L'])
答案 3 :(得分:4)
您可以使用我的侦听器项目中的一个小实用程序来执行此操作。它使用espeak(生成IPA),然后使用从CMU字典中提取的映射来生成可以匹配生成的IPA的ARPABet映射集,例如:
$ listener-arpa
we are testing
we
W IY
are
ER
AA
testing
T EH S T IH NG
大约45%的时间在CMU词典上产生精确匹配(我使用CMU / Wikipedia中记录的对应关系获得了大约36%),同时每个词产生约3个匹配(平均)。也就是说,我们在99%的时间内看到了“紧密匹配”,也就是说,虽然我们每次都可能无法精确匹配手写标记的单词,但我们通常只有几个音素。
$ sudo apt-get install espeak
$ pip install -e git+https://github.com/mcfletch/listener.git#egg=listener