[英]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.