比较数千个文本文件内容的更有效方法

2024-04-20 11:19:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有大约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)

我知道,由于递归的性质,目前这将在进程结束时运行到一个无休止的循环中,但我离这座桥还很远。你知道吗


Tags: text内容dataiftimecountfilesfind
1条回答
网友
1楼 · 发布于 2024-04-20 11:19:14

至少不需要这行字。查找相似的文本(文本文件,计数),生成itertools.组合(文本文件,2):一个变量,更新它并用于循环。你知道吗

相关问题 更多 >