相关疑难解决方法(0)

在Python中检查存在于较长字符串中的模糊/近似子字符串?

使用像leveinstein(leveinstein或difflib)这样的算法,很容易找到近似匹配.

>>> import difflib
>>> difflib.SequenceMatcher(None,"amazing","amaging").ratio()
0.8571428571428571
Run Code Online (Sandbox Code Playgroud)

可以通过根据需要确定阈值来检测模糊匹配.

当前要求:根据较大字符串中的阈值查找模糊子字符串.

例如.

large_string = "thelargemanhatanproject is a great project in themanhattincity"
query_string = "manhattan"
#result = "manhatan","manhattin" and their indexes in large_string
Run Code Online (Sandbox Code Playgroud)

一个强力解决方案是生成长度为N-1到N + 1(或其他匹配长度)的所有子串,其中N是query_string的长度,并且逐个使用levenstein并查看阈值.

python中是否有更好的解决方案,最好是python 2.7中包含的模块,或外部可用的模块.

更新:Python正则表达式模块工作得很好,虽然它比re模糊子字符串情况的内置模块慢一点,由于额外的操作,这是一个明显的结果.期望的输出是良好的,并且可以容易地定义对模糊度的控制.

>>> import regex
>>> input = "Monalisa was painted by Leonrdo da Vinchi"
>>> regex.search(r'\b(leonardo){e<3}\s+(da)\s+(vinci){e<2}\b',input,flags=regex.IGNORECASE)
<regex.Match object; span=(23, 41), match=' Leonrdo da Vinchi', fuzzy_counts=(0, 2, 1)>
Run Code Online (Sandbox Code Playgroud)

python fuzzy-search python-2.7

40
推荐指数
5
解决办法
1万
查看次数

标签 统计

fuzzy-search ×1

python ×1

python-2.7 ×1