- У меня есть список строк, содержащий 50 миллионов поисковых запросов.[1-500 + слов в каждом запросе].
- У меня также есть список строк, содержащий 500 слов и фраз, которые мне нужны для возврата индексов поисковых запросов (1), которые содержат любое слово или фразу (2).
Цель состоит в том, чтобы сохранить только запросы, относящиеся к определенной теме (фильмы), а затем использовать NLP для кластеризации этих отфильтрованных запросов (stemming -> tf_idf -> pca -> kmeans).
Я пытался отфильтровать запросы, используя вложенные циклы, но это заняло бы более 10 часов.
filtered = []
with open('search_logs.txt', 'r', encoding='utf-8') as f:
for i, line in enumerate(f):
query, timestamp = line.strip().split('\t')
for word in key_words:
if word in query:
filtered.append(i)
Я искал решения, использующие регулярное выражение (word1 | word2 | ... | wordN), но проблема в том, что я не могу объединить запросы в большую строку, поскольку мне нужно отфильтровать несущественные запросы.
ОБНОВЛЕНИЕ: примеры журналов и ключевых слов
search_logs.txt
'query timestamp\n'
'the dark knight 2019-02-17 19:05:12\n'
'how to do a barrel roll 2019-02-17 19:05:13\n'
'watch movies 2019-02-17 19:05:13\n'
'porn 2019-02-17 19:05:13\n'
'news 2019-02-17 19:05:14\n'
'rami malek 2019-02-17 19:05:14\n'
'Traceback (most recent call last): File "t.py" 2019-02-17 19:05:15\n'
.......... # millions of other search queries
key_words = [
'movie',
'movies',
'cinema',
'oscar',
'oscars',
'george lucas',
'ben affleck',
'netflix',
.... # hundreds of other words and phrases
]