python - Python:避免嵌套的 for-loop NLP 版本;任何库支持?
问题描述
我正在尝试进行基于用户查询的自动建议。我有一堆聚合查询,例如:
QUERY COUNT
"harry potter" 100
"iron man" 93
"harry pott" 32
"harr pott" 5
大约有 200.000 行。正如您所看到的,一些用户广泛使用前缀搜索,只输入单词的第一个字母。示例中的这些查询应与完整的“哈利波特”行聚合。
现在假设大多数用户使用完整的单词进行搜索,我认为我可以通过以下方式有效地进行聚合(避免整个索引上的嵌套 for 循环):
我按字母顺序对查询中的标记进行排序并生成一个映射“first_token”,例如:
"h" "harry potter"
"ha" "harry potter"
"har" "harry potter"
"harr" "harry potter"
"harry" "harry potter"
分别是“second_token”等等......
"p" "harry potter"
"po" "harry potter"
"pot" "harry potter"
"pott" "harry potter"
"potte" "harry potter"
"potter" "harry potter"
然后我从上到下迭代,对于像“harr pott”这样的每个元素,我检查“first_token”和“second_token”中是否有一个元素的值是相同的文档,例如“harry potter”并且该文档不是与原始(“harr pott”)相同并且得分更高,在这种情况下我将其汇总。它的运行时间应该是 O(index_size * max_number_of_tokens)。
现在我想知道是否有任何 Python 库可以让我更轻松地实现所有这些。来自 Java/JS 我对 Python 还不是很熟悉,我只知道它有很多用于 NLP 的工具。
NLTK 中的任何东西都可以帮助我吗?我认为至少应该有一个用于向量化字符串的工具。也许使用它您可以将“starts-with”操作作为简单的查找进行,而无需手动生成尝试映射?
解决方案
推荐阅读
- firebase - 按最近日期查询文档
- python - 如何按值删除列?
- html - Text starts at bottom of div
- amazon-web-services - aws外部ALB和privale Ip ec2实例之间的安全组规则?
- r - 通过重复的行名跨列合并值
- android - 带有 Autoupdate、copyFromRealm、RxJava 的领域
- react-native - 显示所选数据
- node.js - 启动快速应用程序时找不到模块'socket.io-client/dist/socket.io.js'
- sql - 不同的计数并查看另一个表中的值
- asp.net - 即使值在范围内,asp.net Rangevalidator 也会显示错误消息