【发布时间】:2017-11-02 11:29:42
【问题描述】:
我正在研究医学术语数据库(mesh 和 uniprot),并且我正在解析大量医学论文(已发布),以搜索论文中的术语匹配。这两个数字都非常惊人(约 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),您如何“中和”它们,以免它们干扰 RE?
编辑:自我回答
经过一些研究和测试,in 比 REs 快
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)
【问题讨论】:
标签: python regex python-2.7