我有以下基因名称词典:

gene_dict = {"repA1":1, "leuB":1}
# the actual dictionary is longer, around ~30K entries.
# or in list format
# gene_list = ["repA1", "leuB"]

我想做的是给任何一个句子,我们搜索包含在上面字典中的词,然后给它们加上标签。
例如,给出这句话:
mytext = "xxxxx repA1 yyyy REPA1 zzz."

然后将标记为:
xxxxx <GENE>repA1</GENE> yyyy <GENE>REPA1</GENE> zzz.

有什么有效的方法可以做到吗?实际上,我们会处理数百万个句子。

最佳答案

如果“gene_list”在不太长的时间内,可以使用编译后的正则表达式,如

import re

gene_list = ["repA1", "leuB"]
regexp = re.compile('|'.join(gene_list), flags=re.IGNORECASE)
result = re.sub(regexp, r'<GENE>\g<0></GENE>', 'xxxxx repA1 yyyy REPA1 zzz.')

把你所有的句子都圈起来。我想这应该很快。

09-19 14:44