支持模糊字符串搜索的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第三方库


热门话题
maven字段#getGenericType()抛出java。lang.TypeNotPresentException   用java绘制三角形的几何图形   java无法下载主题和发件人地址(rediff)   java如何使代码线程安全   java在尝试转换FileInputStream中的文件时,我遇到了一个FileNotFound异常   java Moxy和Jackson如何将Json映射到Pojo   在foreach循环中使用BufferedWriter生成新行的java问题   java为什么我的测试在单次执行中运行时间小于1秒,而在maven构建中运行时间大于20秒?   java如何显示下载附件的进度条   了解java rmi的良好实践   .net可以将Java portlet嵌入ASP。网页?   循环如何多次执行Java方法?   java如何确保用户输入在给定的有效范围内?   java单元测试定理   java如何在IntelliJ上运行外部构建项目?   JAVA:试图编写一个检查字符串是否为数字的方法。总是返回错误   javahadoop将特定键的所有map方法生成的所有值都发送到一个reduce方法,对吗?   在java中读取和使用文件