Как удалить лишнее из команды?

Рейтинг: 0Ответов: 1Опубликовано: 13.04.2023

В общем есть такой код бота:

import speech_recognition

recognizer = speech_recognition.Recognizer()
microphone = speech_recognition.Microphone()
BOT_NAME="рекса"
play_commands = ['включи','запусти','сыграй']

def record_and_recognize_audio(*args: tuple):
    with microphone:
        recognized_data = ""

        # регулирование уровня окружающего шума
        recognizer.adjust_for_ambient_noise(microphone, duration=2)

        try:
            print("Listening...")
            audio = recognizer.listen(microphone, 5, 5)

        except speech_recognition.WaitTimeoutError:
            return

        # использование online-распознавания через Google 
        try:
            print("Started recognition...")
            recognized_data = recognizer.recognize_google(audio, language="ru").lower()

        except speech_recognition.UnknownValueError:
            pass

        except speech_recognition.RequestError:
            print("Check your Internet Connection, please")

        return recognized_data


def bot_command(command : str):
    if not command.startswith(BOT_NAME):
        return
    command=command[6:]
    if command in play_commands:
        play()
        return
while True:
    voice_input = record_and_recognize_audio()
    print(voice_input)
    bot_command(voice_input)

В моменте

if command in play_commands:
play(command)

мне нужно обрезать всё лишнее у переменной command, то есть, если строка была "Включи песни", должен запускаться метод с включением музыки и слово "Включи" должно обрезаться, как мне это сделать?

Ответы

▲ 0Принят

Для удаления лишних слов из строки в Python можно использовать метод split(), который разделяет строку на слова и возвращает их в виде списка. Затем можно обрезать первое слово (которое в данном случае является командой) с помощью среза, и объединить оставшиеся слова обратно в строку, используя метод join().

В вашем случае можно заменить строку command=command[6:] на следующий код:

words = command.split()
if words[0] in play_commands:
    play()
    command = ' '.join(words[1:])

Здесь мы разбиваем строку command на список слов words, проверяем, является ли первое слово командой для воспроизведения, и если это так, то вызываем функцию play() и обрезаем первое слово с помощью среза words[1:]. Затем мы объединяем оставшиеся слова обратно в строку с помощью метода join() и записываем результат обратно в переменную command.