gpt4 book ai didi

python - 正则表达式耗时太长(大数据集)

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:31 38 4
gpt4 key购买 nike

我有以下问题 - 数据来自数据库(oracle),但我希望用 python(使用正则表达式)解决它。但是,我担心这个过程不会在合理的时间内完成,所以我可以使用一些建议。将数据从数据库中提取到 python 列表中,我有以下内容:关键字,一个包含 5000 个字符串的列表,每个字符串的长度 <=40search_phrases,1/3 百万个字符串的列表,每个字符串的长度在 50 到 150 之间found_phrasess,30 000 个字符串的列表,每个字符串的长度在 20 到 50 之间

我想通过 search_words 搜索形式的模式pattern1 = 数字关键字pattern2 = number keyword1 任意 number keyword2

将这些模式收集到一个列表中,然后删除那些已经在 found_phrases 中的模式。

首先,我在 python 中尝试了以下操作:

found = []
p1 = r'[0-9.]+[/\s-]*'
pattern1 = re.compile(r'|'.join([p1 + word for word in keywords])
for phrase in search_phrases:
found.extend(re.findall(pattern1, phrase))
return set(found).difference(found_phrases)

由于正则表达式中的 OverflowError,这不起作用。所以我做了一个双 for 循环:

for phrase in search_phrases:
for word in keywords:
found.extend(re.findall(p1 + word, phrase))

但这花费的时间太长了(即,还没有完成)。

如果您对此有任何建议,无论是如何在 python 中更快地完成它,还是留在数据库中的建议(列表只是来自两个不同表的不同列条目)并学习如何在那里做正则表达式,请让我知道。谢谢。

更新 1:

现在我只搜索 pattern1(时间限制),并将 for 循环的顺序切换为

for word in keywords:
for phrase in search_phrases:
found.extend(re.findall(p1+word, phrase))

使用此顺序,它在大约 90 秒内运行示例 search_phrase 列表(30 000 个元素)。

如果 if if grep -f keywords search_phrases,生成的文件只缩短了大约 5%(大多数 search_phrases 将匹配)。

示例关键字:“g”、“gr”、“G”、“gram”、“grams”、“mg”、“milli gram”、“Milli-gram”……可以想到测量质量)示例 search_phrases: '

最佳答案

您可以使用 http://htql.net 中的 htql.RegEx .它可以很好地处理大型列表。这是其网站上的示例:

import htql; 
address = '88-21 64th st , Rego Park , New York 11374'
states=['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut',
'Delaware', 'District Of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana',
'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan',
'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire',
'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma',
'Oregon', 'PALAU', 'Pennsylvania', 'PUERTO RICO', 'Rhode Island', 'South Carolina', 'South Dakota',
'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin',
'Wyoming'];

a=htql.RegEx();
a.setNameSet('states', states);

state_zip1=a.reSearchStr(address, "&[s:states][,\s]+\d{5}", case=False)[0];
# state_zip1 = 'New York 11374'

关于python - 正则表达式耗时太长(大数据集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19145043/

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