2

そのため、2 つのランダム ワード ジェネレーターを作成しています。1 つはバイグラムに基づいており、もう 1 つはトライグラムに基づいています。いずれの場合も、辞書を設定しました (2 つのネストされた辞書を持つバイグラム、または 3 つのネストされた辞書を持つトリグラムと呼ばれます)...他にも多くのコードがありますが、次の行で問題が発生します。トライグラムジェネレーター:

 #generates random phonemes
 def generate_trigramphoneme(phoneme1, phoneme2):
    rand = random.uniform(0,1)

    **for phoneme3 in trigrams[phoneme1][phoneme2]:**
        rand -= trigrams[phoneme1][phoneme2][phoneme3]

        if rand < 0.0: return phoneme3
    return phoneme3

ここで、変数「phoneme3」はローカルの非境界エラーを生成します。

ただし、ここでは、バイグラム ジェネレーター (動作します) では、変数 "Following" は問題なく、エラーは発生しません。

def generate_bigramphoneme(phoneme):
    rand = random.uniform(0,1)
    for following in bigrams[phoneme]:
        rand -= bigrams[phoneme][following]
        if rand < 0.0: return following
    return following

エラーを理解するのに役立ちましたが、エラーを取り除く方法、またはバイグラムコードがエラーを生成しない理由はまだわかりません...

4

1 に答える 1

3

trigramsどこかに定義があると仮定すると、引数を使用するtrigrams[phoneme1][phoneme2]と、空の反復可能である可能性があります。したがって、ループは実行phoneme3されず、バインドされません。

于 2012-10-12T21:32:33.827 に答える