@doesenemo

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

conn = redis.Redis(host='localhost', port=6379, db=2, charset="utf-8", decode_responses=True)
TRIGGER = ['создать бота', 'нужен бот', 'сделать бота', 'сделать чат-бот', 'нужен кодер','нужен программист','нужен прогер','написать бот','кто делает бот','кто сделает бот','пишет бот','создаст бота']

@client.on(events.NewMessage) #апдейт на новые сообщения только из групп
async def hahdler_group(event):
    if event.is_group == True:
        r = re.compile("|".join(TRIGGER), flags=re.I)
        list_count = r.findall(event.raw_text)
        if len(list_count) >= 1:
            if conn.get(event.from_id.user_id) == None: #чтобы не было повторов от одного id в разных группых в течении 200 сек
                if not hashlib.md5(str(str(event.from_id.user_id)+event.raw_text).encode()).hexdigest() in hash_object: #проверяем дубилрование сообщений от одного юзера
                    out = ''.join(list_count)
                    await Bot.bot.send_message(id, "Триггер сработал на <b>"+str(list_count)+"</b>\nТекст сообщения: "+str(event.raw_text.replace(out,"<b>"+out+"</b>"))+"\nСсылка на сообщение: <i>t.me/c/"+str(event.peer_id.channel_id)+"/"+str(event.message.id)+"</i>", disable_web_page_preview=True)
                    conn.set(event.from_id.user_id, 1,ex = 200)
                    hash_object.append(hashlib.md5(str(str(event.from_id.user_id)+event.raw_text).encode()).hexdigest())


как реализовать что бы поиск тригер слов в сообщении срабатывал даже если они разделены

к примеру по таким тригерам

'создать бота', 'нужен бот', 'сделать бота', 'сделать чат-бот'

будут пролетать мимо сообщения вида

'создать кто может' 'сделать может кто бота?' 'чат-бот кто может сделать'

как реализовать поиск тригерслов в сообщении с условием что сообщение содержит оба тригер слова и между ними могут быть другие слова.
если прописать по отделььности каждое тригерслово слишком много ложных срабатываний
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
по простому - регексп и звездочку туда (*) - Х*ЯК
по взрослому - векторная близость предложений/словосочетаний
Ответ написан
Комментировать
aRegius
@aRegius
Python Enthusiast
all(word in message for word in trigger.split())
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы