python - 给定一长串单词和列表句子,找到包含至少一个单词的句子的最优化方法是什么
问题描述
我在这里遇到了一个非常简单的匹配问题。
我有一个非常大的单词列表(~100k 个单词)和一个更大的句子列表(~200M),每个平均有 5-7 个单词。我想找到至少包含这些单词之一的句子。(我在这里查看了类似的问题)
这里有些例子:
字:
姓名
城市
海洋
店铺
比萨
男人
句子
住着一个男人
有人买了一本书
上帝保佑世界
爱你我的孩子
海洋被污染
火柴:
住着一个男人
海洋被污染了。
下面的代码是一个 O(N2) 的解决方案。
required_subset=[]
for word in words:
for sentence in sentences:
if word in sentence:
required_subset.append(sentence)
然而,这太可怕了。所以,我遵循了以下方法。
- 从句子的所有单词创建一个倒排索引。
- 在 inv 中的单词之间查找匹配项。索引和单词列表。
- 整理索引中的所有句子。
这也不是很快。
我能想到的让它更快的是做多处理,在更大的计算机上运行它!
但是,我正在阅读有关lru_cache
无法将此问题与应用程序联系起来的信息。
解决方案
推荐阅读
- python - 如何将父级发送到新的 ApplicationWindow
- swift - NETunnelProviderManager loadAllFromPreferences 零管理器返回
- java - 如何通过递归方法计算任意数的阶乘
- compiler-errors - 在 Rust 中,我可以从我的模块中公开一组函数吗?
- python - 如何找到任何给定树(不一定是二叉树)中每个节点的直接父节点?
- php - 如何修复laravel收集块循环一次?
- android - setValue()在firebase实时数据库中不起作用
- azure-sql-database - java.sql.SQLException:连接到 Azure 数据库时,找不到适用于 jdbc:sqlserver 的驱动程序
- kotlin - 如何降级 kotlin 版本
- javascript - 未捕获的类型错误:$(...).sidenav 不是函数