我正在尝试基于用户查询的自动建议。我有一堆汇总查询,例如:
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”,以及该文档与原始文档(“ hart pott”)不同,并且得分更高,在这种情况下,我将其汇总。该运行时应为O(index_size * max_number_of_tokens)。
现在,我想知道是否有Python的库可以使我更轻松地实现所有这些功能。来自Java / JS,我还不太熟悉Python,我只知道它有很多NLP工具。
NLTK中有什么可以帮助我吗?我认为至少应该有一个向量化字符串的工具。也许您可以使用它作为简单的查找来执行“ starts-with”操作,而无需手动生成trys-map?