Эффективный способ проверить, существует ли большой список слов в миллионах поисковых запросов - PullRequest
4 голосов
/ 21 апреля 2019
  1. У меня есть список строк, содержащий 50 миллионов поисковых запросов.[1-500 + слов в каждом запросе].
  2. У меня также есть список строк, содержащий 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
]

1 Ответ

0 голосов
/ 21 апреля 2019

Я бы предложил FlashText , который был разработан, чтобы быть очень эффективным именно для такого рода задач.Он будет работать до тех пор, пока искомые ключевые слова являются простыми строками (в отличие от сложных регулярных выражений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...