Поиск ключевых слов в строке

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

Есть массив с ключевыми словами :

hello = ["привет", "ку", "здраствуйте", "здравия", "салют",
         "hello", "hi", "good morning", "good day", "good evening"
         ]

И строка в переменной с названием q

Как проверить, есть ли одно из ключевых слов (которые в массиве) в строке?

Ответы

▲ 2
hello = ["привет", "ку", "здраствуйте", "здравия", "салют",
         "hello", "hi", "good morning", "good day", "good evening"
         ]
string = 'Say hello'
print(
    any(map(lambda x: x in string, hello))
)
▲ 2

При поиске сочетаний из списка, кроме буквального совпадения, нужно учитывать 'ложные' совпадения - например, 'ку' является частью слова 'кукуруза', но это не приветствие. Также целесообразно учитывать регистры символов и возможность наличия нескольких пробелов между словами. Такой поиск сочетаний из списка можно реализовать через регулярные выражения.

import re

hello = ["привет", "ку", "здравствуйте", "здравия", "салют",
         "hello", "hi", "good morning", "good day", "good evening"]
r = '|'.join(rf'\b{x}\b' for x in hello).replace(' ', r'\s+')

for text in 'кукуруза', 'скажем ку', 'Hi, peoples', 'high voltage', 'good       morning!', 'good    day, привет, КУпите слона':
    res = re.findall(r, text, re.IGNORECASE)
    if res:
        print(f'Словосочетания из списка найдены в тексте `{text}`: `{res}`')
    else:
        print(f'Словосочетания из списка НЕ найдены в тексте `{text}`')
Словосочетания из списка НЕ найдены в тексте `кукуруза`
Словосочетания из списка найдены в тексте `скажем ку`: `['ку']`
Словосочетания из списка найдены в тексте `Hi, peoples`: `['Hi']`
Словосочетания из списка НЕ найдены в тексте `high voltage`
Словосочетания из списка найдены в тексте `good       morning!`: `['good       morning']`
Словосочетания из списка найдены в тексте `good    day, привет, КУпите слона`: `['good    day', 'привет']`