[英]Is regex in Python too slow?
我在文件中有一组句子(例如500
)。 我试图找出在任何句子中是否存在一对单词(比如word1
和word2
)。 我有58000
这样的单词。
例如,让句子集为:
I am a good boy. He is a bad boy. I am a very good boy.
要搜索的词对:
am
good
因此,这应该返回第一句和最后一句作为输出。
我正在使用以下正则表达式:
for match in re.finditer(r'([ A-Za-z0-9]*)\b{string1}\b([^\.!?]*)\b{string2}\b([^\.!?]*[\.!?])'.format(string1=word1, string2=word2), sentence_set.lower(), re.S):
这条陈述正在进行工作,但需要大量时间 ; 超过8分钟。
然后,我删除了正则表达式部分,并使用了多个循环并拆分了每个句子,然后检查了两个单词是否存在。 这花费了更少的时间,不到2分钟 。
因此,我觉得有时regex非常慢。 真的吗 ? 有什么办法可以提高速度?
您说您有500个句子和58000个单词对,这意味着您打算创建58000个不同的正则表达式来针对这些句子运行,并且大多数搜索都将不匹配任何内容。
到目前为止,更好的方法是创建一个dict
,将出现在单词对中的每个单词映射到它可以与之配对的所有其他单词的set
。
然后,对于每个单词依次轮流使用,将其拆分为单词,依次测试每个单词的字典隶属关系,如果找到了该单词,则获取句子中其他单词与您创建的与之配对的单词集的交集它。
您必须记住,做某事的更好方法是使用正确的工具。 正则表达式非常适合(复杂)模式匹配,在这种情况下,您不能word1 in sentence
使用像word1 in sentence
这样的方法word1 in sentence
因为您要查找的是模式而不是有限的字符串。
有些人会说正则表达式更快 ,而另一些人会说字符串操作更快 。 他们俩是正确和错误的 。
这是一个支持字符串操作的图形:
这是一个赞成正则表达式的问题: 哪个更快? 正则表达式还是EndsWith?
您正在尝试在句子中找到一个单词,不要过于复杂(即使您发现正则表达式很性感),也可以in
使用。 请记住KISS原则, 如果您以爬树的能力来判断一条鱼,那么它会终生相信它是愚蠢的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.