Сравнение строк не дает желаемого результата с распознанными речевыми данными

#python #speech-recognition

#python #распознавание речи

Вопрос:

хорошо, итак, у меня был этот код для запуска распознавания речи и сбора высказывания. затем захотелось проверить это со словом, которое уже сохранено в базе данных.

 def recog():
    r = sr.Recognizer()
    print("Speak Now:")
    with sr.Microphone() as source:
        audio_data = r.listen(source)
        try:
            print("recognizing")
            recog.result = str(r.recognize_wit(audio_data, key="XDAYDVOGVTRP652K6TAWOWQR73WHJY6S"))
            print(recog.result)
            return recog.result
        except sr.UnknownValueError:
            print('Recognition error')
  

Я использовал этот сегмент кода ниже, чтобы получить слово, с которым нужно сравнивать.

 conn = sqlite3.connect('VIT.db')
c = conn.cursor()
post_ac = "select ans from ansc where id="   str(i)
c.execute(post_ac)
conn.commit()
records = c.fetchone()
print(records)
print_c = '' str(records)
conn.close()
  

Затем я использовал оператор if, чтобы проверить, совпадают ли они

 if print_c == recog():
    print("Correct")
else:
    print("Incorrect")
  

но этот код всегда дает мне «правильный» ответ. Что я сделал не так и как я могу улучшить свой код? Я довольно новичок в python и tkinter, поэтому прошу прощения за мои ошибки.
p.s: к вашему сведению, данные успешно и корректно извлекаются из базы данных, а также из распознавания. У меня возникли проблемы со сравнением, вот и все.

Комментарии:

1. Каково значение print_c и значение recog() ?

2. Зачем перебирать, records хотя record это всего лишь одно значение

3. @AaronKeesing print_c извлекается из базы данных, там хранится несколько слов. Что касается recog() , то оно возвращает распознанные речевые данные.

4. @CoolCloud Извините, если это неправильно, но я думаю, что мне пришлось сделать это, чтобы получить его в виде строки, чтобы я мог сравнивать

5. Я имел в виду, каковы фактические значения print_c и recog() , потому что это поможет указать, почему сравнение строк завершается неудачей.

Ответ №1:

Ваши print утверждения задом наперед, поэтому на самом деле оно сообщало вам «неверно» для всего. Вы также только слабо сравниваете 2.

 # '==' instead of 'in'
if print_c == recog(): # consider 'home' is IN 'homestead', but they aren't the same
    print("Incorrect") # shouldn't this be 'Correct'
else:
    print("Correct")   # ..and this 'Incorrect'?
  

Ни один из ваших вопросов не имеет ничего общего с tkinter . Вы можете удалить этот тег.

Комментарии:

1. хорошо, я изменил код, но он по-прежнему дает мне один и тот же ответ для каждого сравнения. Но на этот раз оно «неверно» для всех.

2. @Naveedh ~ верно, это именно то, что я сказал. Я понятия не имею, почему ваши строки не сравниваются, но, по крайней мере, теперь, когда вы заставите это работать, строки будут абсолютно равны, и ваша печать не будет лгать вам.

Ответ №2:

через некоторое время я вроде как понял, что не так, и я изменил код. Все это время он сравнивал

‘строка’

вместо

строка

 conn = sqlite3.connect('VIT.db')
c = conn.cursor()    
post_ac = "select ans from ansc where id="   str(i)
c.execute(post_ac)
records = c.fetchone()
print_c = str(records[0])
print(print_c)
  

итак, все, что мне нужно было сделать, это изменить print_c = '' str(records) на print_c = str(records[0]) , чтобы он правильно сравнивался в операторе if. Спасибо, что кто-либо пытался ответить, и надеюсь, что это поможет всем, кто нуждается.