支持模糊字符串搜索的trie结构。
vtrie的Python项目详细描述
vtrie
TIE结构支持近似字符串匹配(仅替换) python(2.x和3.x)。
注意
只支持ascii字符串。因此,python 3用户应该使用 “b”前缀,用于将字符串插入trie。
安装
pip install vtrie
功能
- 它在一般用法中类似于dict(),并且支持大部分dict()
接口:
- _ len_uuu():trie中的项目数
- _包含()\u
- _ getitem()\u
- _ setitem()\u
- _ delitem()\uu
- _ size of():trie的大小(字节)
- _ repr():类似于dict的输出,显示trie的内容
- 有U键()
- setdefault()
- get()
- pop()
- popitem()
- 键()
- values()
- items()
- Iterkeys()
- itervalues()
- iteritems()
- trie特定方法:
- num_nodes():节点数
- 最长前缀(k):查找与k开头匹配的最长密钥, 以2元组形式返回(键、值)对。如果不匹配,则不返回。
- 后缀(k):作为2元组遍历所有(后缀,值)对,即 以k作为前缀。
- 邻居(key=k,maxhd=n):遍历所有 (hamming distance,key,value)三元组,如3元组,其中key和k 相差至少1,但最大N个字符。 注意,只能搜索存在的{EM1}$$的邻居“EEM>键”。
- 成对(keylen=l,maxhd=n):遍历all (hamming distance,key1,value1,key2,value2)5元组,其中key1和key2 相差至少1,但最大N个字符。注意,pairs()返回 脏迭代器,意味着trie中的节点在 迭代器正在运行。当与更多 比一个肮脏的迭代器。
- 酸洗
用法
创建trie:
>>> from vtrie import Trie >>> t = Trie()
向trie添加字符串。目前,仅支持ascii字符串:
>>> t[b"Hello"] = 123 >>> t[b"World"] = {"my": "dict"} >>> t[b"foo"] = None
检查trie中是否有“hello”:
>>> b"Hello" in t True
显示共享相同前缀的所有插入字符串:
>>> t[b"foo"] = 0 >>> t[b"foobar"] = 1 >>> t[b"fooo"] = 2 >>> t[b"hello"] = 3 >>> list(t.suffixes(b"fo")) [('o', 0), ('obar', 1), ('oo', 2)]
搜索差异小于给定替换数的键 提供的密钥。结果是具有第一个hamming距离的元组 在给定的密钥和找到的密钥之间,然后是找到的密钥及其值:
>>> t[b"hello world"] = 0 >>> t[b"*ello world"] = "a" >>> t[b"*ell* world"] = "b" >>> t[b"*ell* w*rld"] = "c" >>> t[b"hell* w*rl*"] = "d" >>> list(t.neighbors(b"hello world", maxhd = 1)) [(1, '*ello world', 'a')] >>> list(t.neighbors(b"hello world", maxhd = 2)) [(1, '*ello world', 'a'), (2, '*ell* world', 'b')] >>> print("\n".join(map(str,list(t.neighbors(b"hello world", 3))))) (3, 'hell* w*rl*', 'd') (1, '*ello world', 'a') (2, '*ell* world', 'b') (3, '*ell* w*rld', 'c')
搜索特定长度的所有键,这些键位于 彼此。结果是元组,首先是 找到键,然后是第一个键及其值,然后是第二个键和 其值:
>>> print("\n".join(map(str,list(t.pairs(keylen = 11, maxhd = 2))))) (1, 'hello world', 0, '*ello world', 'a') (2, 'hello world', 0, '*ell* world', 'b') (2, 'hell* w*rl*', 'd', '*ell* w*rld', 'c') (1, '*ello world', 'a', '*ell* world', 'b') (2, '*ello world', 'a', '*ell* w*rld', 'c') (1, '*ell* world', 'b', '*ell* w*rld', 'c')