检查数百万个搜索查询中是否存在大量单词的有效方法

时间:2019-04-21 15:04:46

标签: python regex nlp

  1. 我有一个包含5000万个搜索查询的字符串列表。 [每个查询中1-500个单词以上]。
  2. 我还有一个包含500个单词和短语的字符串列表 我需要返回包含任何单词或短语(2)的搜索查询(1)的索引。

目标是仅保留与某个主题(电影)相关的查询,然后使用NLP对这些过滤的查询进行聚类(提取-> 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 :(得分:0)

我建议使用FlashText,它被开发出来对于这种任务非常有效。只要您要搜索的关键字是纯字符串(而不是复杂的正则表达式),它就会起作用。