我正在python3清理数据。我有大量使用beautiful soup. 许多文件可能是重复的音乐作品。我可以更改 midis 的键,使它们相同并将乐器更改为钢琴(它们是单音文件)。
因此,应该可以检查歌曲内容(根据 midi 编码)是否相似。它特别紧迫,因为某些文件上只有数字作为名称。因此,需要明确的是,我必须检查文件的内容是否重复。另外,我不是在寻找精确匹配,我只是在寻找相似度百分比。
我目前的方法是使用 Difflib 中的 SequenceMatcher。我正在检查每个单独文件上的 600 缓冲区是否具有 >.9 的 SequenceMatcher 比率然后,我正在标记它们,以便我可以通过聆听它们来比较重复项。
这种方法适用于带有 MIDI 格式歌曲的测试场景。但是,它非常缓慢。所以,我想知道是否有人以前遇到过这个问题。任何人都可以提供有关优化此算法以比较文件或并行代码以提高速度或除散列之外的任何其他方法的任何见解(我不是在寻找精确的文件匹配)。任何帮助,将不胜感激。
这是我的代码:
import sys
import os
import hashlib
from difflib import SequenceMatcher
def similar(a, b):
return SequenceMatcher(None, a, b).ratio()
count=0
for dirName, subdirs, fileList in os.walk('path to my directory of files'):
print('Scanning %s...' % dirName)
for filename in fileList:
path = os.path.join(dirName, filename)
in_file = open(path, 'rb') # Provide a path to disk or ISO image
data = in_file.read(600)
in_file.close()
for filename2 in fileList:
path = os.path.join(dirName, filename2)
in_file2 = open(path, 'rb')
data2 = in_file2.read(600)
in_file2.close()
if filename==filename2:
pass
else:
s=similar(data,data2)
if s>0.9:
print(filename +filename2+" "+str(s))
`