我有2个.csv文件。其中一个有新数据的行有大约100行,另一个有大约4万行的参考书。
我想将第一个文件中的所有字符串(逐个)与第二个文件中的所有字符串进行比较,并将Levenshtein距离计算为最相似的字符串。
之后,我需要创建一个包含结果的第三个文件。 (包含第一个文件中的所有数据,最大Levenshtein距离和第二个文件中的字符串)
例如:
垃圾邮件
富
Bar 1 0
Spamm 2 1
Spann 3 0
Booo 1 0
Fooo 2 2
Bo 3 3
...
Spam n Spamm
Foo n Fooo
现在我的代码是:
def calculate_Leven(source, ref, result_file):
with open(source, 'r') as input1:
with open(ref, 'r') as input2:
with open(result_file, 'w') as csvoutput:
reader1 = csv.reader(input1)
reader2 = list(csv.reader(input2))
writer = csv.writer(csvoutput)
result = []
headers = next(reader1)
result.append(headers)
for row1 in reader1:
print "First row"
max = 0
while max < 1
for row2 in reader2:
a = distance(row1[0],row2[0])
b = 1 - a/len(row1[0])
if b > max:
max = b
SKU = row2[0]
row1.append(max)
row1.append(SKU)
result.append(row1)
writer.writerows(result)
距离是计算Levensthein距离的函数。
此代码有效但速度极慢。有没有更好的方法来构建它,或者更有效的替代路径?我每天有大约100个新文件来检查参考书,所以低速是一个瓶颈。
答案 0 :(得分:0)
与您的算法无关,但如果您每天运行100个文件且参考文件不会更改,则创建使用所有已计算值索引的主文件(或数据库)可能很有用。如果文件很大且存在大量冗余数据,这可能会显着提高您的性能。
答案 1 :(得分:0)
如果你有可能在其中一个文件中有重复的条目,你可以在处理之前对它们进行排序