相关疑难解决方法(0)

模糊正则表达式

在我的工作中,我得到了很好的结果,使用了近似字符串匹配算法,如Damerau-Levenshtein距离,使我的代码不易受到拼写错误的影响.

现在我需要将字符串与简单的正则表达式匹配TV Schedule for \d\d (Jan|Feb|Mar|...).这意味着字符串TV Schedule for 10 Jan应返回0,同时T Schedule for 10. Jan应返回2.

这可以通过在正则表达式中生成所有字符串(在这种情况下为100x12)并找到最佳匹配来完成,但这并不实用.

您有任何想法如何有效地做到这一点?

regex string fuzzy-search fuzzy-comparison tre-library

47
推荐指数
2
解决办法
2万
查看次数

在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万
查看次数

最佳模糊匹配算法?

什么是最好的模糊匹配算法(模糊逻辑,N-Gram,Levenstein,Soundex ....,)能够在更短的时间内处理超过100000条记录?

fuzzy-search

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