我有以下字符串:
1679.2235398,-1555.40390834,-1140.07728186,-1999.85500108
我正在使用隐写技术将其存储在图像中。现在,当我从图像中取回它时,有时我会以完整的形式将其取回,我对此没有任何问题。在其他情况下,检索到的数据未被完全检索(由于图像上发生了修改/更改),因此结果如下所示:
1679.2235398,-1555.I8\xf3\x1cj~\x9bc\x13\xac\x9e8I>[a\xfdV#\x1c\xe1\xea\xa0\x8ah\x02\xed\xd1\x1c\x84\x96\xe2\xfbk*8'l
请注意,只有“1679.2235398,-1555”。正确检索,其余的是修改发生的地方。 现在,我如何计算(以百分比表示)我成功检索了多少? 由于长度不一样,我不能通过字符比较来做字符,似乎我需要将修改后的数据切片或转换成其他形式以匹配原始数据的长度。
任何提示?
答案 0 :(得分:0)
这很大程度上取决于你问题的背景,但你有很多选择。
如果您的结果总是如此,您可以找到longest common subsequence,然后除以原始字符串的长度百分比。
Levenshtein distance是比较字符串的常用方法,作为将一个字符串转换为另一个字符串所需的字符数。 This question有几个答案讨论如何将其转化为百分比。
如果您不希望字符串始终以相同的顺序出现,this answer建议使用一些用于DNA工作的算法。
答案 1 :(得分:0)
嗯,这真的取决于......我的解决方案是这样的:
我会从所有最长的字符串开始,并检查它们是否在新字符串中
if original_string in new_string:
'something happens here'.
这将是一个循环,它将减少原始字符串的大小,并使所有组合成为可能。因此,下一个将N-1
长并且有2种可能的组合(切断第一个数字或最后一个数字),依此类推,直到达到特定阈值或1
长串。
循环可以在if条件内的日志中存储您找到的最长字符串,然后您可以检查结果。希望有所帮助。