我正在尝试使用biopython
搜索标题中包含特定单词的论文。更准确地说,是2010年至2015年期间发表的论文中包含的单词viral或virus。以下是我的代码:
import re
from Bio import Medline
handle = Entrez.esearch(db="pubmed", # database to search
term="2010[Date - Publication]:2015[Date - Publication]"
)
record = Entrez.read(handle)
handle.close()
pmid_list = record["IdList"] #list of records
handle = Entrez.efetch(db="pubmed", id=pmid_list, rettype="medline", retmode="text")
records = Medline.parse(handle)
titles = [] # start with empty list of titles
for record in records:
ti_list = record['TI'] #titles
for title in ti_list:
if title == "virus" and title not in titles: #searching viral/virus
titles.append(title)
print('Publications with viral or virus in the title:')
for record in records:
print(" ", title)
字符串
如果我只是打印(record ['TI '],那么我会得到一个包含搜索查询中所有标题的列表。但是,我无法搜索到特定的词。我认为我的错误可能在于“if title ==“virus”(因为显然没有一篇论文的标题会单独使用该词)。
我被卡住了。有没有更好的方法在我查询过的论文标题中搜索这个词?
谢谢.
编辑:用re.search
更新了代码(但仍然没有成功)
r = re.compile(r"\bvir(al|us)\b")
titles = set() # start with empty list of titles
for record in records:
ti_list = record['TI'] # titles
for title in ti_list:
if r.search(title): #
titles.add(title)
print('Publications with viral or virus in the title:')
for record in records:
print(" ", title)
型
新代码:
import re
from Bio import Medline
handle = Entrez.efetch(db="pubmed", id=pmid_list, rettype="medline", retmode="text",
term="2010[Date - Publication]:2015[Date - Publication]")
titles = []
for record in Medline.parse(handle):
for title in record['TI']:
titles.append(title)
handle.close()
for title in titles:
print(title)
型
1条答案
按热度按时间0md85ypi1#
如果你想匹配子字符串,使用 in 来查看标题中是否包含任何单词:
字符串
但你似乎想过滤记录,获得任何包含病毒或病毒的记录标题:
型
如果你想匹配子字符串并使用一个模式,那么你实际上需要把它变成一个正则表达式,
"vir(al|us)"
只是你代码中的一个字符串:型
你自己的循环中的正则表达式会去你的if所在的地方:
型
如果你不想病毒等匹配,那么为你的正则表达式使用一个词边界:
型
你还应该把标题设置为一个不能有重复的集合,一个使用你自己代码的工作示例:
型
它可以成为一个集合的理解:
型
因为
record['TI']
返回的是字符串而不是列表:型
对set comp或任何其他示例执行相同的操作。