Сегодня покажу регулярное выражения на примере задачи: как отфильтровать датасет по ключевым словам. Такое очень часто встречается в работе.
📌 Задача
Допустим, у нас есть таблица с какими-то названиями клиентов или там, новостей, или ссылок. Нужно выбрать только те, где упоминается что-то связанное с искусственным интеллектом (или его синонимами).
🔧 Решение через регулярки
🎲 Создаём мини-датасет для примера
import pandas as pd
data = {
'title': [
'Новости про ИИ',
'Котики в тренде',
'Машинное обучение и нейросети',
'Что такое Artificial intelligence?',
'Погода на завтра'],
'domain': ['tech.ru', 'cats.com', 'ai-news.org', 'science.com', 'weather.net']
}
df = pd.DataFrame(data)
🔍 Задаём паттерн для поиска
pattern = r'\b(?:ИИ|искусственный интеллект|AI|Artificial intelligence|нейросет|машинное обучение)\b'
🎯 Фильтруем записи, где есть совпадения в title или domain
df_final = df[
df['title'].str.contains(pattern, case=False, regex=True, na=False) |
df['domain'].str.contains(pattern, case=False, regex=True, na=False)
]
💡 Ключевые параметры:
1️⃣ pattern — что ищем (текст или регулярка).
Что внутри него: raw-строки
➡️r' ' - это raw-строки, в них экранирование не происходит. Если объяснить проще, то вот например
print(r'1\t2') Выведет: 1\t2
print('1\t2') Выведет: 1 2 (табуляция или длинный пробел)
То есть r' ' — это как видишь, так и получаешь
Границы слов (\b):
➡️ Гарантирует, что ищется целое слово, а не часть слова
➡️ Например, найдет "ИИ" в "развитие ИИ", но не найдет в каком-то слове с ошибкой типа "фииалка")
Незахватывающая группа (?:...):
➡️Группирует альтернативы, но не запоминает совпадение для последующего использования
➡️Более эффективна, чем обычная группа (...), когда не нужно извлекать совпавший текст
Альтернатива
➡️| - логический оператор "ИЛИ", разделяющий слова, которые мы ищем
2️⃣case=False — игнорировать регистр (ИИ = ии = Ии).
3️⃣regex=True (по умолчанию True) — считать паттерн регулярным выражением. Если False, ищет точное совпадение строки еще и с учетом регистра.
4️⃣na=False — пропускать NaN (возвращать False вместо ошибки).
Ну и потом фильтруем
🚀 Так можно анализировать какие-то большие текстовые данные, для парсинга новостей можно использовать, ну или в
фильтрации сообщений в чат-ботах.
