如何将cmudict-0.7b或cmudict-0.7b.dict转换为FST格式,以便与phonetisaurus一起使用?

时间:2015-11-14 07:47:35

标签: cmusphinx pocketsphinx

我正在寻找一个简单的程序来从cmudict-0.7b或cmudict-0.7b.dict生成FST(有限状态传感器),它将与phonetisaurus一起使用。

我尝试了一组命令(phonetisaurus Aligner,Google NGramLibrary和phonetisaurus arpa2wfst)并且能够生成FST但它没有工作。我不确定我在哪里犯了错误或错过任何一步。我猜第一个命令即phonetisaurus-align,是不正确的。

phonetisaurus-align --input=cmudict.dict --ofile=cmudict/cmudict.corpus --seq1_del=false

ngramsymbols < cmudict/cmudict.corpus > cmudict/cmudict.syms

/usr/local/bin/farcompilestrings --symbols=cmudict/cmudict.syms --keep_symbols=1 cmudict/cmudict.corpus > cmudict/cmudict.far

ngramcount --order=8 cmudict/cmudict.far > cmudict/cmudict.cnts

ngrammake --v=2 --bins=3 --method=kneser_ney cmudict/cmudict.cnts > cmudict/cmudict.mod

ngramprint --ARPA cmudict/cmudict.mod > cmudict/cmudict.arpa

phonetisaurus-arpa2wfst-omega --lm=cmudict/cmudict.arpa > cmudict/cmudict.fst

我用phonetisaurus-g2p尝试了fst如下:

phonetisaurus-g2p --model=cmudict/cmudict.fst --nbest=3 --input=HELLO --words

但它没有任何回报...... 感谢您对此事的任何帮助。

1 个答案:

答案 0 :(得分:2)

将字典保持在正确的格式非常重要。 Phonetisaurus对此非常敏感,它需要将单词和音素分隔开,空格不起作用。它也不允许CMUSphinx使用的发音变量号如(2)或(3)。你需要用简单的python脚本清理字典,例如在将它输入phonetisaurus之前。这是我使用的那个:

#!/usr/bin/python

import sys

if len(sys.argv) != 3:
    print "Split the list on train and test sets"
    print
    print "Usage: traintest.py file split_count"
    exit()

infile = open(sys.argv[1], "r")
outtrain = open(sys.argv[1] + ".train", "w")
outtest = open(sys.argv[1] + ".test", "w")

cnt = 0
split_count = int(sys.argv[2])

for line in infile:
    items = line.split()
    if items[0][-1] == ')':
        items[0] = items[0][:-3]
    if items[0].find("_") > 0:
        continue
    line = items[0] + '\t' + " ".join(items[1:]) + '\n'
    if cnt % split_count == 3:
        outtest.write(line)
    else:
        outtrain.write(line)
    cnt = cnt + 1