And*_*lke 12 python patricia-trie
我有大约10,000个单词用作一组反向索引到大约500,000个文档.两者都被规范化,因此索引是整数(单词id)到一组整数(包含单词的文档的id)的映射.
我的原型使用Python的集合作为明显的数据类型.
当我搜索文档时,我找到了N个搜索词及其相应的N组的列表.我想在这N组的交集中返回一组文档.
Python的"交叉"方法实现为成对缩减.我想我可以通过并行搜索排序集来做得更好,只要该库提供了一种快速的方法来获取i之后的下一个条目.
我一直在寻找类似的东西.几年前我写过PyJudy,但我不再保留它了,我知道要把它带到一个我再次感到舒服的阶段需要做多少工作.我宁愿使用别人经过良好测试的代码,我想要一个支持快速序列化/反序列化的代码.
我找不到任何,或者至少没有任何Python绑定.有一个avltree可以做我想要的,但是因为即使是成对的集合合并需要比我想要的更长的时间,我怀疑我想要用C/C++完成所有的操作.
你知道编写为Python的C/C++扩展的任何radix/patricia/critbit树库吗?
如果不这样,我应该包装哪个最合适的库?在朱迪矩阵网站还没有6年被更新,并且在2007年5月发布的1.0.5(虽然它打造干净所以也许它只是工作.)
(编辑:为了澄清我在API中寻找的东西,我想要的是:
def merge(document_sets):
probe_i = 0
probe_set = document_sets[probe_i]
document_id = GET_FIRST(probe_set)
while IS_VALID(document_id):
# See if the document is present in all sets
for i in range(1, len(document_sets)):
# dynamically adapt to favor the least matching set
target_i = (i + probe_i) % len(document_sets)
target = document_sets[target_i]
if document_id not in target_set:
probe_i = target_id
probe_set = document_sets[probe_i]
document_id = GET_NEXT(probe_set, document_id)
break
else:
yield document_id
Run Code Online (Sandbox Code Playgroud)
我正在寻找实现GET_NEXT()的东西来返回在给定条目之后发生的下一个条目.这对应于Judy1N和其他Judy阵列的类似条目.
是的,有一些,虽然我不确定它们是否适合您的用例:但似乎它们都不是您要求的.
BioPython在C中实现了Trie实现.
啊,这是一个很好的讨论,包括基准测试:http://bugs.python.org/issue9520
其他(一些非常陈旧的)实现:
http://pypi.python.org/pypi/radix
py-radix是用于存储和检索IPv4和IPv6网络前缀的基数树数据结构的实现.
https://bitbucket.org/markon/patricia-tree/src
patricia-tree的Python实现
http://pypi.python.org/pypi/trie
前缀树(trie)实现.
http://pypi.python.org/pypi/logilab-common/0.50.3
patricia.py:PATRICIA trie的Python实现(用于检索以字母数字编码的信息的实用算法).