我有大约10000个文本文件,其中相当多的内容非常相似。我试图摆脱的文件是非常相似的彼此,以便我留下了一个更小,更独特的集。文本文件的内容可以长达几页,仅供参考。你知道吗
我试图通过测量内容的字符串距离来解决这个问题。我尝试了一些减少比较次数的方法,比如只在大小和文本长度相似的文件上运行比较,只是为了快速获得一些好处。你知道吗
text_files = {}
for item in os.listdir(text_directory):
text_files.update({item : os.path.getsize(text_directory+item)})
count = 0
def Find_Similar_Text(text_files, count):
count = count
tic = time.process_time()
for a, b in itertools.combinations(text_files, 2):
if text_files[a] - 50 < text_files[b] < text_files[a] + 50:
file1 = open(text_directory + a, 'rb')
file1_data = file1.read()
file1.close()
file2 = open(text_directory + b, 'rb')
file2_data = file2.read()
file2.close()
if (-100 < len(file1_data) - len(file2_data) < 100):
ratio = fuzz.ratio(file1_data, file2_data)
if ratio > 70:
count+=1
print(count, 'Ratio:', ratio, a, text_files[a], 'kb', b, text_files[b], 'kb')
shutil.move(text_directory + a, text_directory + '//SimilarFiles//')
text_files.pop(a)
toc = time.process_time()
print('Elapsed time:', toc - tic)
Find_Similar_Text(text_files, count)
Find_Similar_Text(text_files, count)
我知道,由于递归的性质,目前这将在进程结束时运行到一个无休止的循环中,但我离这座桥还很远。你知道吗
至少不需要这行字。查找相似的文本(文本文件,计数),生成itertools.组合(文本文件,2):一个变量,更新它并用于循环。你知道吗
相关问题 更多 >
编程相关推荐