Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Выходит ошибка в голосовом помощнике

Luke Art Ученик (51), на голосовании 3 дня назад
код:

 # Импорт всех необходимых модулей 
тут импорт

# Словарь со всеми настройками
main = {
"name": ('джарвис', 'джа', 'джурв', 'джис'),
"remove": ('скажи', 'расскажи', 'покажи', 'сколько', 'произнеси'),
"cmds": {
"time": ('текущее время', 'сколько времени', 'который час', 'сколько время', 'время подскажи', 'время')
}
}
# Глобальные переменные
r = sr.Recognizer()
engine = pyttsx3.init()
text = ''


# Функции


def talk(speech):
# Вывод сказанного текста на экран и озвучивание
print(speech)
engine.say(speech)
engine.runAndWait()


def listen(): # Функция прослушивания микрофона и обработки запроса
global text
text = ''
with sr.Microphone() as source:
print("Скажите что-нибудь...")
r.adjust_for_ambient_noise(source) # Этот метод нужен для автоматического понижения уровня шума
audio = r.listen(source)
try:
text = r.recognize_google(audio, language="ru-RU").lower()
if text.startswith(main["name"]): # Проверка начинается ли фраза с имени Ассистента
cmd = text

for x in main['name']: # Вырезание имя Ассистента с запроса
cmd = cmd.replace(x, '').strip()

for x in main["remove"]: # Вырезание слов с ячейки remove
cmd = cmd.replace(x, '').strip()

# Распознаём и выполняем команду
print(text)
cmd = fuzzy_recognizer(cmd)
func_cmds(cmd['cmd'])
except sr.UnknownValueError:
pass
return text


def fuzzy_recognizer(cmd): # Функция нечёткого распознавания речи
fr = {'cmd': '', 'percent': 50}
for c, v in main["cmds"].items():
for x in v:
vrt = fuzz.ratio(cmd, x)
if vrt > fr['percent']:
fr['cmd'] = c
fr['percent'] = vrt
func_cmds(fr)
return fr


def wed_search(search):
words = (
'найти', 'найди', 'ищи', 'поищи', 'загляни в браузер и найди', 'загляника в баузер и найди', 'загляни в браузер и поищи', 'загляни в браузер и ищи', 'загляни в браузер и найти', 'загляника в баузер и поищи', 'загляника в баузер и ищи', 'загляника в баузер и найти', 'что такое', 'кто такой', 'кто такая', 'что такое'
)
remove = ['пожалуйста', 'дажно', 'давай', 'сейчас']
if text.startswith(words):
for i in words:
search = search.replace(i, '').strip
for j in remove:
search = search.replace(j, '').strip()
print(search)
webbrowser.open(f'https://yandex.ru/search/?{search}={search}&clid=2261451&banerid=2664004164%3A657c66cc2881d7e7a3edd5cf&win=576&lr=21666')


while True:
web_search(listen())


def func_cmds(cmd): # Функция со всеми имеющимися командами
if cmd == "time":
now = datetime.datetime.now()
talk("Сейчас " + str(now.hour) + ":" + str(now.minute))


def main_func(): # Главная функция
listen()


while True: # Бесконечный цикл
main_func() # Вызов функции main_func()
сама ошибка:

 warnings.warn('Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning') 
Traceback (most recent call last):
File "C:\Users\timek\PycharmProjects\pythonProject1\main.py", line 86, in
web_search(listen())
^^^^^^^^^^
NameError: name 'web_search' is not defined. Did you mean: 'wed_search'?
Голосование за лучший ответ
Chudo_Chudnoe Мастер (1959) 1 месяц назад
Функция, которую ты пытаетешься вызвать, называется wed_search, но в основном цикле программы ты вызываешь функцию web_search, которая не определена.
Тебе нужно исправить имя на wed_search.

Вызов web_search(listen()) находится вне функции main_func и выполняется до того, как функция listen определена. Это вызовет ошибку, поскольку listen еще не существует в момент выполнения этого вызова.

В функции wed_search, когда ты очищаешь строку search, ты используете strip без круглых скобок, что означает, что код ссылается на сам метод, а не вызываете его.

Для начала вызови

 import urllib.parse 
 def wed_search(search):  
words = (
'найти', 'найди', 'ищи', 'поищи', 'загляни в браузер и найди', 'загляника в баузер и найди', 'загляни в браузер и поищи', 'загляни в браузер и ищи', 'загляни в браузер и найти', 'загляника в баузер и поищи', 'загляника в баузер и ищи', 'загляника в баузер и найти', 'что такое', 'кто такой', 'кто такая', 'что такое'
)
remove = ['пожалуйста', 'дажно', 'давай', 'сейчас']
if text.startswith(words):
for i in words:
search = search.replace(i, '').strip() # Исправил тут
for j in remove:
search = search.replace(j, '').strip() # Исправил тут
print(search)
# Исправил urlencode для правильной передачи параметров поиска
webbrowser.open(f'https://yandex.ru/search/?text={urllib.parse.quote(search)}')
 while True:   
text = listen()
if text:
wed_search(text) # Исправил имя функции здесь
Chudo_ChudnoeМастер (1959) 1 месяц назад
Кроме того, убедись, что у тебя установлен модуль Levenshtein, так как предупреждение говорит о том, что используется медленная реализация SequenceMatcher из библиотеки fuzzywuzzy.
Установка python-Levenshtein, он ускорит сравнение строк)

 pip install python-Levenshtein 
Похожие вопросы