0

現時点での私の完全なプロジェクトである以下のソースを含めました。私がこれまで取り組んできたのは、フレーズを入力し、(AIML データベースから) 応答を受け取り、各文字を受け取り、その文字の .mp3 サウンドを 1 つずつ再生して BASIC トランスレータを作成するターミナル インターフェイスです。 (ここではR2D2)。いくつかの問題があります。1 つ目は、初めてフレーズを入力したときは (出力が完全に変換されるという点で) 正常に機能しますが、その後、インデックス エラーが発生し、ターミナルが閉じます。(図 1 を参照) 何が問題なのかはわかりませんが、while ループに問題がある可能性があります。

私が抱えているもう1つの問題は、これを音声インターフェイスで使用する予定であるため、何かを言うと、STTエンジンを介して実行され、私が言ったことを文字列として出力します。その文字列を PyAIML への入力として指定し、応答を取得して、このプログラムのように翻訳したいと考えています。私が抱えている問題は、PyAIML への入力として使用できる変数を作成する方法です。これを行う方法はありますか?

import aiml
import os
import time

def translate():
    if char == 'a':
        os.system("start a.mp3")
    elif char == 'b':
        os.system("start b.mp3")
    #This continues for all the letters of the alphabet - you get the idea
    else:
        time.sleep(0.1),


k = aiml.Kernel()
k.learn("std-startup.xml")
k.respond("load aiml b")
while True: 
    string = k.respond(raw_input("> "))
    input = string.lower()
    numChar = len(input)
    n = 0
    m = 0
    char = input[n]
    while m < numChar:
        translate()
        time.sleep(0.25),
        n = n + 1
        char = input[n]
        m = m + 1

図1 注: 応答機能します。出力が翻訳された、このエラーが発生します。

4

2 に答える 2

1

の長さよりも大きいため、n前に確認してくださいchar = input[n]ninput

--

または変更

n = n + 1
char = input[n]

の中へ

char = input[n]
n = n + 1

編集:

あなたが何をしようとしているのかわかりませんが、これは

numChar = len(input)
n = 0
m = 0
char = input[n]
while m < numChar:
    translate()
    time.sleep(0.25),
    n = n + 1
    char = input[n]
    m = m + 1

この方法で行うことができます

for char in input:
    translate()
    time.sleep(0.25)

しかし、私はこれをします

def translate(letter):
    if letter == 'a':
        os.system("start a.mp3")
    if letter == 'b':
        os.system("start b.mp3")
    # rest of code
    else:
        time.sleep(0.1)

for char in input:
    translate(char)
    time.sleep(0.25)

またはこれさえ

def translate(letter):
    if letter in 'abcde': # all accepted letters
        os.system("start "+letter+".mp3")
    else:
        time.sleep(0.1)
于 2014-06-29T04:22:41.993 に答える