Найти тему

Фильтр ключевых слов по вхождению с помощью Python

Оглавление

Написал код для быстрой фильтрации списка фраз прямо из буфера обмена.

В процессе создания списка ключевых фраз под рекламные кампании в Директ или Google Ads периодически требуется фильтровать группы слов для дальнейшей группировки под отдельные кампании. С изучением языка Python я придумал как ускорить работу.

Для собственной реализации я написал скрипт с использованием библиотеки pyperclip, позволяющей тянуть информацию прямо из памяти компьютера.

А больше полезных материалов можно найти в моём блоге. В нём я регулярно делюсь бесплатными шаблонами и инструкциями, которые существенно облегчают жизнь маркетолога.

Ещё больше полезного в Телеграм канале. Подписывайтесь!

Схема работы фильтрации ключевых слов

Схема работы следующая:
1) Я работаю с ключевыми словами. Возникает потребность найти в общем количестве запросы с определенным вхождением фразы. Например «производство».

Исходный список фраз
Исходный список фраз

2) Я копирую список фраз и через командную строку запускаю программу. Она считывает из памяти список, уменьшает все символы и запрашивает искомое слово. По нему происходит фильтрация на поиск совпадений и выдается результат с количеством и самим списком. Специально вывожу фразы не в [списке], для более удобного копирования.

Результат выполнения программы
Результат выполнения программы

3) После этого я просто копирую список и использую его по назначению.

Код программы

import pyperclip
s = pyperclip.paste().split('\r\n')
# при копировании из notepad разделять нужно только по \r
s = pyperclip.paste().split('\r')
result = []
for row in s:
row = row.lower()
result.append(row)
word = input('Напишите искомое слово: ')
print('------------------------------')
result2 = []
for row2 in result:
if word in row2:
result2.append(row2)
print(row2)
print('------------------------------')
print('Количество совпадений: ' + str(len(result2)))

В дальнейшем я планирую улучшить код для фильтрации с помощью нескольких выражений.

Новые правки

В процессе работы с программой так и пришлось дорабатывать код для фильтра по нескольким запросам. Для этого добавил ввод пользователем неограниченного количества выражений для фильтрации и запись их в список. В последствии по которому идёт отбор фраз.

Результат получается следующим:

Фильтр по нескольким вхождениям
Фильтр по нескольким вхождениям

import pyperclip
s = pyperclip.paste().split('\r\n')
# при копировании из notepad разделять нужно только по \r
s = pyperclip.paste().split('\r')
result = []
for row in s:
row = row.lower()
result.append(row)
word = input('Напишите искомые слова через запятую: ')
word_list = word.split(',')
print('Вы ищете совпадения по этим словам: ' + str(word_list))
print('------------------------------')
result2 = []
for row2 in result:
for row3 in word_list:
if row3 in row2:
result2.append(row2)
print(row2)
print('------------------------------')
print('Количество совпадений: ' + str(len(result2)))

Минусы

К сожалению код нужно доделывать и ещё раз доделывать. Из очевидного:
— в результат попадают дубли при фильтре по разным вхождениям. Надо убирать их.
В поздних правках решил эту проблему с помощью перевода списка в словарь — он автоматом удаляет дубликаты, а потом возвратом в список и построчным выводом.

Перевод в словарь
Перевод в словарь

— нет нормализации запросов, приходится вручную вводить все формы слов для фильтрации. Это долго и неправильно.

Общий код:

import pyperclip
s = pyperclip.paste().split('\r\n')
# при копировании из notepad разделять нужно только по \r
s = pyperclip.paste().split('\r')
result = []
for row in s:
row = row.lower()
result.append(row)
word = input('Напишите искомые слова через запятую: ')
word_list = word.split(',')
print('Вы ищете совпадения по этим словам: ' + str(word_list))
print('------------------------------')
result2 = []
for row2 in result:
for row3 in word_list:
if row3 in row2:
result2.append(row2)
print(row2)
# Для удаления дубликатов преобразую список в словарь, он автоматом их
# удаляет и снова преобразую словарь в список для вывода. Вывожу по элементам
# для удобного копирования
mylist = list(dict.fromkeys(result2))
for x in mylist:
print(x)
print('------------------------------')
print('Количество совпадений: ' + str(len(mylist)))

Заключение

А больше полезных материалов можно найти в моём блоге. В нём я регулярно делюсь бесплатными шаблонами и инструкциями, которые существенно облегчают жизнь маркетолога.

Ещё больше полезного в Телеграм канале. Подписывайтесь!