【发布时间】:2021-07-08 08:24:53
【问题描述】:
尝试尽可能高效地将包含复杂正则表达式(大量前瞻和后瞻)的大型表(1,500 个表达式)与包含文本数据的大型 pandas 数据框(10 亿行)进行匹配,并返回匹配的正则表达式的 ID .
示例正则表达式:
regex = pd.DataFrame({'matchregex' : ['(^(?!.*?(external|internal)).*?(test string))',
'(^(?!.*?(big|small)).*?(testing string))',
'(^(?=.*?(automatic|internal)).*(string (one|two)))'],
'id' : [1,2,3]})
样本数据:
data = pd.DataFrame({'ID' : [1,2,3,4],
'TextString' : ['External Test String','123 Test String','Automatic String One','String two']})
所需的输出是一个新的数据帧,其中包含 ID、TextString 和来自正则表达式数据帧的匹配 ID。
我已经尝试过这种方法 - https://toltman.medium.com/matching-multiple-regex-patterns-in-pandas-121d6127dd47
但是,它会提取匹配组,并且由于每个表达式中都有匹配组,它往往会抛出错误的东西。它也非常慢。
理想情况下,我会避免在表之间进行笛卡尔连接,然后将字符串与每个表达式进行比较,因为临时数据将超过 1 tn 记录。最好的情况是,一旦订单中的第一个表达式与字符串匹配,它将忽略该记录的剩余表达式。
【问题讨论】:
-
如果你能分享一下你到目前为止所尝试的,那就更好了。
-
谢谢@PoojaSonkar - 我已经在上面添加了一个链接到所尝试的内容。我也尝试过使用 sql 环境进行匹配,但还没有找到一种方法来避免将所有字符串与所有表达式进行比较。由于复杂的正则表达式,我的选择似乎有限。