我有比较两个文件的问题.基本上,我想要做的是两个文件之间类似于UNIX的差异,例如:
$ diff -u左文件右文件
但是我的两个文件包含浮点数; 并且因为这些文件是在不同的体系结构上生成的(但是计算相同的东西),浮动值并不完全相同(它们可能因1e-10而不同).但我通过'差异'文件寻找的是找到我认为是显着差异的东西(例如差异大于1e-4); 使用UNIX命令diff时,几乎所有包含浮动值的行都不同!这是我的问题:我如何得到像'diff -u'提供的结果差异,但对浮点数比较的限制较少?
我以为我会写一个Python的脚本来做到这一点,并找到了模块difflib,它提供了类似diff的比较.但是我发现的文档解释了如何按原样使用它(通过单一方法),并解释了内部对象,但我找不到任何关于如何自定义difflib对象以满足我的需求(比如仅重写比较方法或...)我想解决方案可能是检索统一的差异,然后"手动"解析它以消除我的"错误"差异,这不是优雅的; 我更愿意使用现有的框架.
那么,有没有人知道如何自定义这个lib,以便我可以做我想要的东西?或者至少指出我正确的方向......如果不是在Python中,也许shell脚本可以完成工作?
任何帮助将不胜感激!提前感谢您的回答!
我需要比较大量类似于50358c591cef4d76的字符串.我有一个汉明距离函数(使用pHash)我可以使用.我该如何有效地做到这一点?我的伪代码是:
For each string
currentstring= string
For each string other than currentstring
Calculate Hamming distance
Run Code Online (Sandbox Code Playgroud)
我想将结果输出为矩阵并能够检索值.我也想通过Hadoop Streaming运行它!
感激地收到任何指针.
这是我尝试过的但是很慢:
import glob
path = lotsdir + '*.*'
files = glob.glob(path)
files.sort()
setOfFiles = set(files)
print len(setOfFiles)
i=0
j=0
for fname in files:
print 'fname',fname, 'setOfFiles', len(setOfFiles)
oneLessSetOfFiles=setOfFiles
oneLessSetOfFiles.remove(fname)
i+=1
for compareFile in oneLessSetOfFiles:
j+=1
hash1 = pHash.imagehash( fname )
hash2 = pHash.imagehash( compareFile)
print ...
Run Code Online (Sandbox Code Playgroud) 我试图找出一种基于相似性得分找到重复地址的方法.考虑这些重复的地址:
addr_1 = '# 3 FAIRMONT LINK SOUTH'
addr_2 = '3 FAIRMONT LINK S'
addr_3 = '5703 - 48TH AVE'
adrr_4 = '5703- 48 AVENUE'
Run Code Online (Sandbox Code Playgroud)
我正计划应用一些字符串转换来缩写长字,例如NORTH - > N,删除所有空格,逗号和短划线以及磅符号.现在,有了这个输出,我如何将addr_3与其余地址进行比较并检测类似的?相似度的百分比是安全的吗?你能为此提供一个简单的python代码吗?
addr_1 = '3FAIRMONTLINKS'
addr_2 = '3FAIRMONTLINKS'
addr_3 = '570348THAV'
adrr_4 = '570348AV'
Run Code Online (Sandbox Code Playgroud)
感恩,
爱德华多
我必须编写一个函数,它接受一个字符串作为参数,并将该字符串与另外两个字符串进行比较,并返回最相似的字符串和差异数.
def func("LUMB"):
lst=["JIBM", "NUNE", "NUMB"]
should return:
("NUMB",1)
Run Code Online (Sandbox Code Playgroud)
我试过了:
def f(word):
lst=["JIBM", "NUNE", "NUMB"]
for i in lst:
d=k(word, lst)
return differences
for n in d:
print min(sum(n))
Run Code Online (Sandbox Code Playgroud)
哪里:
def k(word1, word2):
L=[]
for w in range(len(word1)):
if word1[w] != word2[w]:
L.append(1)
else:
L.append(0)
return L
Run Code Online (Sandbox Code Playgroud)
所以我得到一个例如[1,0,0,0]如果word1 ="NUMB"和word2 ="LUMB"的列表
我试图比较两个数据列表,其中有一些自由文本表示相同的对象.例
List 1 ['abc LLC','xyz, LLC']
List 2 ['abc , LLC','xyz LLC']
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子,但问题是可能有许多变化,如大小写的变化或添加一些"." 之间.是否有任何python包可以进行比较并给出相似度量?
我希望有这样的功能:
def findSimilar(string, options):
....
return aString
Run Code Online (Sandbox Code Playgroud)
哪里aString
类似于传递的字符串但存在于options
.我正在使用此功能来规范我正在处理的玩具应用程序的用户输入.我读到了使用levenshtein距离,但我决定在这里问,因为我希望Python标准库中有一个简单的解决方案.
我有一个字符串列表作为查询和一些其他字符串列表的hundrends.我想将查询与其他列表进行比较,并提取它们之间的相似性分数.
例:
query = ["football", "basketball", "martial arts", "baseball"]
list1 = ["apple", "football", "basketball court"]
list2 = ["ball"]
list3 = ["martial-arts", "baseball", "banana", "food", "doctor"]
Run Code Online (Sandbox Code Playgroud)
我现在在做什么,我对结果不满意是对它们的绝对比较.
score = 0
for i in query:
if i in list1:
score += 1
score_of_list1 = score*100//len(list1)
Run Code Online (Sandbox Code Playgroud)
我找到了一个可以帮助我模糊的图书馆,但我在想,如果你还有其他方法可以提出建议.
python comparison similarity string-comparison fuzzy-comparison
我一直在尝试使用表格方法来简化python中的布尔表达式.为此,我需要检查两个给定的字符串是否仅在一个索引上有所不同,例如,该函数应该为以下示例返回以下内容:
0011
并且0111
- 因为两者仅在第1位有所不同0-001
并且0-101
- 仅在2时有所不同0-011
和0-101
- 假如2,3不同现在我正在使用以下功能:
def match(s1,s2):
l=[False,-1]##returns false when they cant be combined
for i in range(len(s1)):
if s1[:i]==s2[:i] and s1[i]!=s2[i] and s1[i+1:]==s2[i+1:]:
l= [True,i]
break
return l
Run Code Online (Sandbox Code Playgroud)
我想以非常快的方式实现它(低复杂性).有没有办法在python中这样做?
我不知道如何做一个程序,它给出了相同长度的两个字符串的相似程度.
例如,对于abcd
和abce
它应该给75%.
订单很重要,我不希望它给我这个abcd
并且dcab
有100%.
我知道Levenshtein模块可以做到这一点,但我想要一个能够实现它的程序.
python ×10
string ×3
comparison ×2
similarity ×2
duplicates ×1
mailing ×1
performance ×1
python-2.7 ×1