我正在尝试使用Pubmed IDs (我有一个名为‘ids’的列表)为Pubmed中存放的一些文章提取标题。大约有650K的Pubmed ID。代码看起来运行得很好,没有抛出任何错误。但是代码只提取了一小部分文章的标题,而不是全部。
代码如下:
Entrez.email = "xyz@enginebio.com"
for i in range(0,len(ids),10000):
if i%10000 == 0: # for me to track the progress of the script
print (i)
idlist=ids[i:i+10000]
handle = Entrez.efetch(db="pubmed", id=idlist, retmode="xml")
try:
record = Entrez.read(handle)
except:
continue
title={}
for j in range(len(record["PubmedArticle"])):
pmid=record["PubmedArticle"][j]['MedlineCitation']['PMID'][:]
if "Abstract" in record["PubmedArticle"][j]['MedlineCitation']['Article'].keys():
title[pmid]=record["PubmedArticle"][j]['MedlineCitation']['Article']['ArticleTitle'].encode('ascii', 'ignore').decode('ascii')
# save article titles
subfile='article_titles_'+str(i)+'.txt'
ar = pd.DataFrame.from_dict(title, orient="index")
ar.to_csv(subfile,sep="\t",header=None)任何建议都会很有用。谢谢
发布于 2019-12-10 18:10:18
我无法复制您的示例,因为我没有您的Pubmed ID列表。知道你恢复了大约650K的It中有多少也是很有趣的,如果你正在恢复639K的标题(可能你的一些it只是丢失了),或者10K,那就不一样了。我自己试过一个小例子,它确实检索到了标题。我想可能有一些身份证是无效的。您可以尝试执行较小的批次,也可以:
except: continue将隐藏可能由空句柄引起的任何问题(如果查询结果为空)。如果len(record["PubmedArticle"])小于您的批处理大小,我会尝试检查exceptions.Abstract字段,你只是将标题添加到你的title字典中。您确定所有记录都是这样的吗?我尝试过的案例确实适用,但可能并不是所有条目都有这一点。https://stackoverflow.com/questions/59243700
复制相似问题