我正在寻找一个简单的程序来从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
但它没有任何回报...... 感谢您对此事的任何帮助。
答案 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