是否有一个python函数来获取;独特的;某种相似性度量意义上的字符串? 我有一组字符串(在我的例子中,它是一个熊猫数据文件的一个列,但是考虑其他数据结构作为列表/数组……是可以的),并且我想从那个集合获得所有“唯一”的值,其中唯一的不是精确匹配,而是基于一些相似性度量的模糊匹配。 举个例子,假设我有一组字符串: 错误字符串 源和目标校验和不匹配213423!=647687传输失败 源和目标校验和不匹配654766!=987821传输失败 尝试1次后的SSL握手 尝试1次后的SSL握手\t 尝试1次后进行SSL握手。\n 无法连接到IP:端口/路径{1}用户超时超过* 无法连接到IP:端口/路径{2}用户超时超过*
我相信有更好的方法,但是使用是否有一个python函数来获取;独特的;某种相似性度量意义上的字符串? 我有一组字符串(在我的例子中,它是一个熊猫数据文件的一个列,但是考虑其他数据结构作为列表/数组……是可以的),并且我想从那个集合获得所有“唯一”的值,其中唯一的不是精确匹配,而是基于一些相似性度量的模糊匹配。 举个例子,假设我有一组字符串: 错误字符串 源和目标校验和不匹配213423!=647687传输失败 源和目标校验和不匹配654766!=987821传输失败 尝试1次后的SSL握手 尝试1次后的SSL握手\t 尝试1次后进行SSL握手。\n 无法连接到IP:端口/路径{1}用户超时超过* 无法连接到IP:端口/路径{2}用户超时超过*,python,string,fuzzy-comparison,Python,String,Fuzzy Comparison,我相信有更好的方法,但是使用Levenshtein并且一次只能比较两个字符串,我得出以下结论: import Levenshtein as lev RATIO_LIMIT = 0.7 strings = ( "Source and destination checksums do not match 213423 != 647687 transfer-failed", "Source and destination checksums do n
Levenshtein
并且一次只能比较两个字符串,我得出以下结论:
import Levenshtein as lev
RATIO_LIMIT = 0.7
strings = (
"Source and destination checksums do not match 213423 != 647687 transfer-failed",
"Source and destination checksums do not match 654766 != 987821 transfer-failed",
"SSL handshake after 1 attempts",
"SSL handshake after 1 attempts\t",
"SSL handshake after 1 attempts.\n",
"Impossible to connect to IP:PORT/PATH{1} User timeout over*",
"Impossible to connect to IP:PORT/PATH{2} User timeout over*",
)
uniques = []
for string in strings:
if not uniques:
uniques.append(string)
for unique in uniques:
if lev.ratio(unique.lower().strip(), string.lower().strip()) > RATIO_LIMIT:
break
else:
uniques.append(string)
print(uniques)
现在,我确信你可以随意改变
比率限制
以获得更好的结果。我只是选择了一个随机数作为相似度,但这是否适用于路径、IP和端口的不同值,因为我想如果它们太长,这种方法将不起作用请你的问题澄清你到底需要什么。“独特的模糊性”不是一个明确的要求,可以用无数种方式来解释。您的数据是否包含模糊的“组”,并且您只想存储每个组的一个代表?您的数据是否包含连续的模糊相等字符串,并且需要对其进行分区以保留一些初始特征?你能提供一些示例输入和预期输出吗?我编辑了这个问题,希望它现在更清楚:)谢谢@rolv,我正致力于这样的工作,我确认你的代码做到了这一点。然而,我最初的应用程序涉及数十万个字符串,循环使用它们效率很低,所以我想知道是否已经有现成的东西可以在不考虑性能细节和特殊情况的情况下使用,例如只指定比率阈值。啊,我明白了,我只知道祝你好运对不起我帮不了你什么忙