Python Arpabet语音转录

时间:2012-08-11 01:05:47

标签: python

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

4 个答案:

答案 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