如何用rentrez提取PubMed摘要?解决XML解析报错问题
解决PubMed XML记录提取摘要的问题
报错原因
当你调用entrez_fetch时设置了parsed = TRUE,返回的record已经是XML外部指针对象(externalptr),不需要再用xmlParse()重复解析,这就是触发错误的直接原因。
正确提取摘要的两种方案
方案1:基于已解析的XML对象直接操作(推荐)
利用XML包的XPath查询定位标签,直接提取文本:
library(rentrez) library(XML) # 获取已解析的PubMed XML记录 record <- entrez_fetch(db = "pubmed", id = 37757828, rettype = "xml", parsed = TRUE) # 定位所有<AbstractText>标签并提取文本内容 abstract_segments <- xpathSApply(record, "//AbstractText", xmlValue) # 合并多段摘要为完整文本(部分文献摘要分多个段落) full_abstract <- paste(abstract_segments, collapse = " ") # 输出结果 print(full_abstract)
方案2:使用rentrez内置工具简化操作
rentrez自带的extract_from_xml()函数可以更简洁地完成提取:
library(rentrez) record <- entrez_fetch(db = "pubmed", id = 37757828, rettype = "xml", parsed = TRUE) # 直接提取<AbstractText>的文本内容 abstract_segments <- extract_from_xml(record, "//AbstractText", "text") full_abstract <- paste(abstract_segments, collapse = " ") print(full_abstract)
备选方案:先获取原始XML字符串再解析
如果坚持要用xmlParse(),可以在获取记录时关闭自动解析,先拿到原始XML字符串:
library(rentrez) library(XML) # 获取未解析的原始XML字符串 record_raw <- entrez_fetch(db = "pubmed", id = 37757828, rettype = "xml", parsed = FALSE) # 解析字符串为XML对象 record_xml <- xmlParse(record_raw) # 提取摘要文本 abstract_segments <- xpathSApply(record_xml, "//AbstractText", xmlValue) full_abstract <- paste(abstract_segments, collapse = " ") print(full_abstract)
内容的提问来源于stack exchange,提问作者Lisa W
相关产品推荐
相关产品推荐

