#python #speech-recognition #python-os
#python #распознавание речи #python-os
Вопрос:
Я пытаюсь создать скрипт, который использует модуль распознавания речи для прослушивания вашего голоса и, соответственно, того, что он услышал, используя это в качестве имени файла, если оно находится в определенной папке (указав путь к нему), откройте файл… Однако я застрял, потому что я не могу заставить работать последний цикл for (тот, который прямо сейчас должен просто напечатать имя файла, если оно находится в папке).
import speech_recognition as sr
import os
search_path = 'C:/Users/andre/Desktop/foto_coso_python'
result = []
recognizer_instance = sr.Recognizer()
with sr.Microphone() as source:
recognizer_instance.adjust_for_ambient_noise(source)
print("I'm listening...")
print()
audio = recognizer_instance.listen(source)
#print('Printing what I heard...')
try:
text = recognizer_instance.recognize_google(audio, language='it-IT').upper()
print(text)
except Exception as e:
print(e)
list_text = text.split(' ') #splits the text in single words
#print(list_text)
for root, dir, files in os.walk(search_path):
for word in list_text:
if word in files:
result.append(os.path.join(root, word))
print(result)
Редактировать
Благодаря @loa_in_ я разобрался с этим циклом
for word in list_text:
for root, dir, files in os.walk(search_path):
for filename in files:
if word.lower() in filename.lower():
result.append(filename)
Теперь результатом кода является имя файла (если он находится в папке).
Комментарии:
1. Вы пошагово выполняли свой цикл построчно с помощью отладчика? Какое значение
word
иfiles
вif word in files:
?
Ответ №1:
Если вы используете Windows (я предполагаю, что это так из ваших путей), то вам не следует сравнивать имена word in files
файлов, поскольку это делает точное совпадение с учетом регистра:
- «файл» и «Файл» не совпадают
- «файл» и «File.txt » не будет соответствовать
- «файл» и «file.txt » не будет соответствовать
- «file» и «this_file_here» не будут совпадать
- будут совпадать только «файл» и «файл»
Чтобы выполнить поиск слова в files
массиве менее строгим образом, вы должны выполнить цикл: for filename in files
и проверить, filename.lower()
содержит word.lower()
ли он — другими словами: проверить наличие подстроки после преобразования обеих строк в один и тот же регистр (будь то нижний или верхний регистр).
Комментарии:
1. Тай, я попробую 🙂