2017-02-24 84 views
1

我正在收集PubMed中搜索術語的作者信息和文章信息。我在rentrez包中使用entrez_fetch成功獲得作者姓名,出版年份和其他信息。以下是我的示例代碼:PubMed使用entrez_fetch進行XML解析rentrez

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並作進一步的分析是有用的。

只是爲了說明,這是我的代碼的一個小例子。我正在收集更多信息,使用XML解析通過entrez_fetchrentrez包中。

這個問題真的讓我感到困擾,我非常感謝任何幫助或指導。感謝您提前做出的努力和幫助。

回答

2

這實際上是一個關於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 

BTW,我通常不搜索計算器,但會回答有關rentrez提交截至github repo問題的任何問題(他們不一定是「錯誤」去那裏)。