gpt4 book ai didi

python 运算符 'in' 与正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:17 26 4
gpt4 key购买 nike

我正在研究医学术语数据库(mesh 和 uniprot),并且正在解析大量医学论文(pubmed),搜索论文中术语的匹配项。这两个数字都是惊人的(约 30 万个术语和约 650 万篇论文),因此匹配算法必须尽可能高效。

目前我正在做这样的事情:

foo = "some long and boring medical paper [...] that I'm searching"
bar = [["array of medical terms matched with an unique code",1],
["also they are sorted by length",2]]
for term in bar:
if term[0] in foo:
repetitions = foo.count(term[0])
array_to_be_inserted_in_database.append(term[1],repetitions)

注意:foo 来自 NLTK 语料库生成器(为了保持示例简单而省略),array_to_be_inserted_in_database 正如其名称所示;当我完成 bar 检查时,我将所有内容保存在 MongoDB 中,然后继续下一篇论文。

问题:

我不太习惯正则表达式,就速度而言值得吗?此外,化合物和医学术语中充满了转义字符(例如:(1-5)-methylbuthyl*-ethyl-something),如何“中和”它们,以便它们不会干扰重新?

编辑: self 回答经过一些研究和测试,in 比 RE 更快

t= timeit.Timer(
're.subn(regex,"",frase)',
setup = 'import re; frase = "el gato gordo de la abuela"; palabra = "gordo"; regex = re.compile(palabra)'


)
ordenes = """\
if palabra in frase:
numero = frase.count(palabra)
frase.replace(palabra,"")
"""
y= timeit.Timer(stmt= ordenes,setup = 'frase = "el gato gordo de la abuela"; palabra = "gordo"'
)

print t.timeit(number = 1000)
print y.timeit(number = 1000)

最佳答案

如果您只处理逐字字符串(而不是模式),并且您不介意像 gut 这样的术语是否也会匹配像 gutter 这样的较长单词 code>,那么 in 可能会更快。

另一方面,您可以使用 re.findall() 一次完成所有匹配并获取结果列表的长度,因此您不必遍历字符串两次(一次用于查找,一次用于计数)。中和特殊字符很容易 - 只需在字符串上调用 re.escape() ,它将确保文本按原样匹配。

最后,唯一可以肯定的方法是根据现实世界的数据测试这两种解决方案。

关于python 运算符 'in' 与正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47074214/

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