gpt4 book ai didi

python - 从大型存储库到文件的关键字匹配

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:29 24 4
gpt4 key购买 nike

我有一组 400K 关键字,需要与 100K 输入文件匹配。

我目前实现此目的的方法如下。

代码:

import glob
with open("keyword.txt") as inp:
keyword_set=set([lin.strip().lower() for lin in inp])
for fil in glob.glob("file/path/*.txt"):
with open(fil) as inp, open("output.txt","w") as out:
file_txt = inp.read().lower()
for val in keyword_set:
if val in file_txt:
out.write("{}\t{}".format(fil, val))

Keyword_Sample:

BUENOS AIRES
Argentina

由于我要循环访问一个大型存储库,因此需要花费大量时间(文件的时间从秒到分钟不等)。有什么方法可以增加吞吐量并减少所花费的时间。

最佳答案

看看你的代码:

    file_txt = inp.read().lower()
for val in keyword_set:
if val in file_txt:
out.write("{}\t{}".format(fil, val))

声明

        if val in file_txt:

在文本中查找字符串(子字符串查找,平均情况下时间复杂度不小于 O(n * C))。如果您的文本由单词组成(如您的示例),您可以使用更合适的表示形式。

例如,将 file_txt 中的所有单词表示为 set() (就像您的第二组)。当然,如果可能的话,您可以通过分隔符分割文件中的文本。如果关键字可以由 2 个或更多单词组成,则必须添加到您的集合中的连续对(二元组)和三元组(三元组)。之后就可以在集合中搜索关键字了,该语句的时间复杂度一般情况下等于O(1)。

import glob
with open("keyword.txt") as inp:
keyword_set=set([lin.strip().lower() for lin in inp])
for fil in glob.glob("file/path/*.txt"):
with open(fil) as inp, open("output.txt","w") as out:
file_txt = inp.read().lower()
file_set = set(file_txt.split('Your delimiter'))
# [ adding bigrams (or trigrams) to the set ]
for val in keyword_set:
if val in file_set:
out.write("{}\t{}".format(fil, val))

# [You can use set intersection operation here instead of cycle]

如果您想考虑发生次数,则必须使用collections.Counter而不是set

关于python - 从大型存储库到文件的关键字匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41546685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com