PubMed XML 在 rentrez 中使用 entrez_fetch 进行解析
PubMed XML parsing using entrez_fetch in rentrez
我正在为 PubMed 中的搜索词收集作者信息和文章信息。我正在使用 rentrez
包中的 entrez_fetch
成功获取作者姓名、出版年份和其他信息。以下是我的示例代码:
library(rentrez)
library(XML)
pubmedSearch <- entrez_search("pubmed", term = "flexible ureteroscope", retmax = 100)
SearchResults <- entrez_fetch(db="pubmed", pubmedSearch$ids, rettype="xml", parsed=TRUE)
First_Name <- xpathSApply(SearchResults, "//Author", function(x) {xmlValue(x[["ForeName"]])})
Last_Name <- xpathSApply(SearchResults, "//Author", function(x) {xmlValue(x[["LastName"]])})
PubYear <- xpathSApply(SearchResults, "//PubDate", function(x) {xmlValue(x[["Year"]])})
PMID <- xpathSApply(SearchResults, "//ArticleIdList", function(x) {xmlValue(x[["ArticleId"]])})
尽管获得了我需要的所有信息,但我在确定哪些作者是哪个 PMID 时遇到了问题。这是因为每个 PMID 的作者长度不同。例如,如果我在我的代码中解析了 100 篇文章的作者信息,我得到了 100 多个作者姓名,我无法将其与相应的 PMID 相关联。总的来说,我想要一个这样的输出数据框:
PMID First_Name Last_Name PubYear
28221147 Carlos Torrecilla Ortiz 2017
28221147 Sergi Colom Feixas 2017
28208536 Dean G Assimos 2017
28203551 Chad M Gridley 2017
28203551 Bodo E Knudsen 2017
这样一来,我就可以知道哪些作者与哪些 PMID 相关联,这对进一步分析很有用。
仅作说明,这是我的代码的一个小示例。我正在通过 rentrez
包中的 entrez_fetch
使用 XML
解析来收集更多信息。
这个问题确实困扰着我,非常感谢任何帮助或指导。感谢您的努力和提前帮助。
这确实是一个关于 xpath(用于在 XML 文件中指定这些节点的语言)的问题,我并不声称自己是这方面的专家。但我想在这种情况下我可以提供帮助。
您要确保一次为一条已发布的记录(PubmedArticle
条目)提取信息。您可以编写一个函数来处理一条记录
parse_paper <- function(paper){
last_names <- xpathSApply(paper, ".//Author/LastName", xmlValue)
first_names <- xpathSApply(paper, ".//Author/ForeName", xmlValue)
pmid <- xpathSApply(paper, ".//ArticleId[@IdType='pubmed']", xmlValue)
data.frame(pmid=pmid, last_names=last_names, first_names=first_names)
}
这应该为每位作者提供一行,每行中的 pmid 相同。我们现在可以通过在每篇文章上调用该函数来将其扩展到整篇文章。
parse_multiple_papers <- function(papers){
res <- xpathApply(papers, "/PubmedArticleSet/*", parse_paper)
do.call(rbind.data.frame, res)
}
head(parse_multiple_papers(SearchResults))
.
pmid last_names first_names
1 28221147 Torrecilla Ortiz Carlos
2 28221147 Colom Feixas Sergi
3 28208536 Assimos Dean G
4 28203551 Gridley Chad M
5 28203551 Knudsen Bodo E
6 28101159 Li Zhi-Gang
顺便说一句,我通常不搜索 Whosebug,但会回答在 github repo 上作为问题提交的有关 rentrez
的任何问题(他们不需要 "bugs" 去那里).
我正在为 PubMed 中的搜索词收集作者信息和文章信息。我正在使用 rentrez
包中的 entrez_fetch
成功获取作者姓名、出版年份和其他信息。以下是我的示例代码:
library(rentrez)
library(XML)
pubmedSearch <- entrez_search("pubmed", term = "flexible ureteroscope", retmax = 100)
SearchResults <- entrez_fetch(db="pubmed", pubmedSearch$ids, rettype="xml", parsed=TRUE)
First_Name <- xpathSApply(SearchResults, "//Author", function(x) {xmlValue(x[["ForeName"]])})
Last_Name <- xpathSApply(SearchResults, "//Author", function(x) {xmlValue(x[["LastName"]])})
PubYear <- xpathSApply(SearchResults, "//PubDate", function(x) {xmlValue(x[["Year"]])})
PMID <- xpathSApply(SearchResults, "//ArticleIdList", function(x) {xmlValue(x[["ArticleId"]])})
尽管获得了我需要的所有信息,但我在确定哪些作者是哪个 PMID 时遇到了问题。这是因为每个 PMID 的作者长度不同。例如,如果我在我的代码中解析了 100 篇文章的作者信息,我得到了 100 多个作者姓名,我无法将其与相应的 PMID 相关联。总的来说,我想要一个这样的输出数据框:
PMID First_Name Last_Name PubYear
28221147 Carlos Torrecilla Ortiz 2017
28221147 Sergi Colom Feixas 2017
28208536 Dean G Assimos 2017
28203551 Chad M Gridley 2017
28203551 Bodo E Knudsen 2017
这样一来,我就可以知道哪些作者与哪些 PMID 相关联,这对进一步分析很有用。
仅作说明,这是我的代码的一个小示例。我正在通过 rentrez
包中的 entrez_fetch
使用 XML
解析来收集更多信息。
这个问题确实困扰着我,非常感谢任何帮助或指导。感谢您的努力和提前帮助。
这确实是一个关于 xpath(用于在 XML 文件中指定这些节点的语言)的问题,我并不声称自己是这方面的专家。但我想在这种情况下我可以提供帮助。
您要确保一次为一条已发布的记录(PubmedArticle
条目)提取信息。您可以编写一个函数来处理一条记录
parse_paper <- function(paper){
last_names <- xpathSApply(paper, ".//Author/LastName", xmlValue)
first_names <- xpathSApply(paper, ".//Author/ForeName", xmlValue)
pmid <- xpathSApply(paper, ".//ArticleId[@IdType='pubmed']", xmlValue)
data.frame(pmid=pmid, last_names=last_names, first_names=first_names)
}
这应该为每位作者提供一行,每行中的 pmid 相同。我们现在可以通过在每篇文章上调用该函数来将其扩展到整篇文章。
parse_multiple_papers <- function(papers){
res <- xpathApply(papers, "/PubmedArticleSet/*", parse_paper)
do.call(rbind.data.frame, res)
}
head(parse_multiple_papers(SearchResults))
.
pmid last_names first_names
1 28221147 Torrecilla Ortiz Carlos
2 28221147 Colom Feixas Sergi
3 28208536 Assimos Dean G
4 28203551 Gridley Chad M
5 28203551 Knudsen Bodo E
6 28101159 Li Zhi-Gang
顺便说一句,我通常不搜索 Whosebug,但会回答在 github repo 上作为问题提交的有关 rentrez
的任何问题(他们不需要 "bugs" 去那里).