支持模糊字符串搜索的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')

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java运行时异常:com。安卓建设者德兴。DexArchiveMergerException:无法合并dex   java UDP如何获取传入数据报的目标地址   java如何将一些内容保存到列中并将其读回对象   属性类Java   java如何将二进制数据附加到HSQL(2.3.2)blob中?   试图在Maven项目中使用OpenJPA连接到Derby数据库,但出现“java.sql.SQLException”错误。   java(JavaFX)如何将类的实例传递给FXML控制器而不知道该控制器的名称?   sql为什么单线程使我的Java程序更快?   在单独的窗口上显示控制台输出[java]   java在Hadoop集群之外从Eclipse访问HDFS   java在我的类中初始化以下实例的最佳方法是什么?   java类单例或组件。它必须从不同的地方调用   java如何将配置文件自动下载到项目的根目录?