You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用R提取PubMed XML数据:解决重复行与Mesh Terms混排问题

修复PubMed XML提取数据的重复与Mesh术语混淆问题

问题概述

使用R的rentrez包获取2条PubMed记录,尝试提取PMID、索引方法(IndexingMethod)、最后更新日期(DateRevised)及合并后的Mesh术语到DataFrame并导出CSV时,出现以下问题:

  • 生成4行结果(应为2行),PMID重复
  • 每行Mesh术语包含所有记录的术语,未按单条记录区分

错误原因

  1. 提取函数extract_info中所有XPath查询均基于整个XML文档(testa_rec),而非传入的单条MedlineCitation节点,导致每次调用函数都会提取所有记录的信息,生成两行数据;再经过lapply遍历2个节点,最终合并为4行。
  2. Mesh术语的提取未限定在当前MedlineCitation节点范围内,导致合并了所有记录的Mesh术语。

修复后的代码

library(xml2) 
library(XML)
library(data.table)
library(rentrez)
library(dplyr) 

# 获取XML数据(2条测试文章)
testa <- entrez_search(db="pubmed", term="38863400 OR 32029379", use_history=TRUE)
testa_rec <- entrez_fetch(db="pubmed", id=testa$ids, rettype="xml", parsed=TRUE)

# 提取单条记录信息的函数(修改为处理单个MedlineCitation节点)
extract_info <- function(medline_node) { 
  # 基于当前节点提取信息,使用相对XPath路径
  indexing <- xmlGetAttr(medline_node, "IndexingMethod")
  date <- xmlValue(xpathSApply(medline_node, "./DateRevised", xmlRoot)[[1]])
  pmid <- xmlValue(xpathSApply(medline_node, "./PMID", xmlRoot)[[1]])
  
  # 提取当前节点下的所有Mesh术语并合并
  mesh_terms <- xpathSApply(medline_node, "./MeshHeadingList/MeshHeading", xmlValue)
  mesh_str <- if(length(mesh_terms) > 0) paste(mesh_terms, collapse = ";") else NA
  
  # 返回单行tibble
  tibble(
    pmid = pmid, 
    indexing = indexing,
    date = date, 
    mesh = mesh_str
  )
}

# 获取所有MedlineCitation节点
articles_nodes <- getNodeSet(testa_rec, "//MedlineCitation")

# 对每个节点应用提取函数
results_list <- lapply(articles_nodes, extract_info)

# 合并为单个DataFrame
final_results <- bind_rows(results_list)

# 导出为CSV
fwrite(final_results, file ="myDT.csv")

关键修改说明

  • 函数参数改为单个MedlineCitation节点,所有XPath查询基于该节点使用相对路径(./开头),确保只提取当前记录的信息
  • Mesh术语提取限定在当前节点的MeshHeadingList/MeshHeading下,仅收集当前记录的术语
  • 每个函数调用返回单行数据,避免重复生成多条记录

正确输出示例

pmid,indexing,date,mesh
38863400,Automated,20240615,"Humans;Ethiopiaepidemiology;Female;Adult;Adolescent;Obesityepidemiology;Middle Aged;Overweightepidemiology;Young Adult;Prevalence;Health Surveys;Socioeconomic Factors;Risk Factors;Age Factors"
32029379,Curated,20200306,"Abortion, Inducedmethodstrends;Female;Gestational Age;Humans;Pregnancy;Women's Health"

内容的提问来源于stack exchange,提问作者Hope Lappen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:55:58