【发布时间】:2021-11-01 23:03:56
【问题描述】:
我有一个包含正则表达式值作为键和一个数值作为值的大型字典,并给出了一个语料库(分解为单个单词标记的列表)我想找到最符合我的正则表达式值word 来获取其各自的值。
字典包含许多模棱两可的正则表达式值,从某种意义上说,一个单词可能有多个正则表达式匹配,因此您可能希望找到最长的正则表达式或“最佳匹配”(例如:字典包含 effect+,以及影响了感情)
我的问题是,当通过字典运行大型文本样本并查找每个单词标记的正则表达式匹配时,需要很长时间(每个单词 0.1 秒),这显然会增加 1000 多个单词。这是因为它每次都会遍历整个字典以找到“最佳匹配”。
有没有更快的方法来实现这一点?请在下面查看我的代码有问题的部分。
for word in textTokens:
for reg,value in dictionary.items():
if(re.match(reg, word)):
matchedWords.append(reg)
【问题讨论】:
-
这些正则表达式有一个特殊的结构,还是所有有效的正则表达式都可能?
-
在整个字典中只使用了一种正则表达式,它是一个单词后的“+”量词(fault+、go+等)。
-
Sooooo 你说的是python的
re模块根本不适合这个任务,因为那些基本上不是正则表达式。 -
当我读到你的问题时,首先想到的是prefix tree,你可以使用它来查找与单词匹配的最长前缀。
-
嗨,史蒂夫。我知道这已经很晚了,但这是一个简短的说明,我终于能够实现您推荐的 Trie 结构并且它工作得很好!非常感谢您的帮助。我在下面链接了我的解决方案,请随时查看
标签: python regex algorithm dictionary