使用Prosody.lab并获取HTK ERROR [+1452]关于字典中的单词乱序

时间:2015-12-01 01:36:03

标签: python sorting htk

我正在使用prosody.lab使用HTK来构建语言模型。我正在尝试训练这个新模型,但我收到以下EH EH0 ENSKA UH0 S K AH0 É'THO T OW0 HAO' HH AW0 OW0 Q HENH HH AH0 KAHNAWAKE G AH0 N AH0 G EY0 KAHYÁ:TON' G AH0 Y AH0 D UH0 Q 错误

Unix sort doesn't seem to match the sort HTK is looking for. Python's sort function seems to work. Numbers are sorted with '.' before 0, shorter before longer (1 < 1.0 < 10 < 100).

以下是我的字典订购方式

sort

所以做了一些研究我遇到了一个website,说这个错误产生的原因是:

unsorted_list = ["EH", "ENSKA", "É'THO", "HAO'", "HENH", "KAHNAWAKE", "KAHYÁ:TON'"]
sorted(unsorted_list)

我认为排序受到我在字典中有特殊字符这一事实的影响。从网站开始,我将这些单词放入一个列表中,并使用python unsorted_dict.txt函数对其进行排序,以对这些单词进行排序。

sort

但是上面的代码会产生一个与我的字典顺序相同的列表。

然后我尝试将我的字典放入另一个文件($sort unsorted_dict.txt )并使用unix命令EH ENSKA É'THO HAO' HENH KAHNAWAKE KAHYÁ:TON' 对其进行排序:

HAO'

但这也产生了相同的顺序和我的字典。

HENH

我也尝试在我的字典文件中切换EH ENSKA É'THO HENH HAO' KAHNAWAKE KAHYÁ:TON' ERROR [+1452] ReadDictProns: word HENH out of order in dict dictionary.dict ,并提供以下顺序:

for j in range(len(items)):
    print("%d. %s" % (j+1, items[j]))

但是这个命令会产生以下错误:

{{1}}

2 个答案:

答案 0 :(得分:0)

很可能,HTK期望的排序顺序非常幼稚,并且基于用于字符的字节序列。在这种情况下,É将在所有没有重音的字符之后出现。所以这个顺序是正确的:

EH
ENSKA
HENH
HAO'
KAHNAWAKE
KAHYÁ:TON'
É'THO

有关按字节序列排序的字符,请参阅http://www.tamasoft.co.jp/en/general-info/unicode.html

答案 1 :(得分:0)

错误[+1452] ReadDictProns:字HAO&#39;在dict dictionary.dict中无序。

  
    

这个问题出现在&#34; HAO&#39;&#34;输入字典中不存在单词。     你必须在字典中添加该单词及其cmu转换。

  

任何一个训练数据句子都包含该单词。

如果它包含在你的字典中,那么错误是由于你的yaml文件配置,有一组发音列表,你必须在那里添加任何单词的任何新转换。

注意:如果您没有对字典进行排序,请先使用此命令对其进行排序 - &#34; ./ sort.py lang.dict&#34;或&#34; ./ sort.py&lt; lang.dict&gt; new_lang.dict&#34;

请参阅此链接以获取更多信息 - https://github.com/prosodylab/Prosodylab-Aligner