首页 > 解决方案 > 给定一长串单词和列表句子,找到包含至少一个单词的句子的最优化方法是什么

问题描述

我在这里遇到了一个非常简单的匹配问题。

我有一个非常大的单词列表(~100k 个单词)和一个更大的句子列表(~200M),每个平均有 5-7 个单词。我想找到至少包含这些单词之一的句子。(我在这里查看了类似的问题)

这里有些例子:

字:

姓名

城市

海洋

店铺

比萨

男人

句子

住着一个男人

有人买了一本书

上帝保佑世界

爱你我的孩子

海洋被污染

火柴:

住着一个男人

海洋被污染了。

下面的代码是一个 O(N2) 的解决方案。

 required_subset=[]
  for word in words:
       for sentence in sentences:
               if word in sentence:
                  required_subset.append(sentence)

然而,这太可怕了。所以,我遵循了以下方法。

  1. 从句子的所有单词创建一个倒排索引。
  2. 在 inv 中的单词之间查找匹配项。索引和单词列表。
  3. 整理索引中的所有句子。

这也不是很快。

我能想到的让它更快的是做多处理,在更大的计算机上运行它!

但是,我正在阅读有关lru_cache无法将此问题与应用程序联系起来的信息。

标签: pythonlookup-tables

解决方案


推荐阅读