999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于NCBI開放接口的檢索和下載文獻題錄信息功能的實現

2017-03-21 10:50:08
中華醫學圖書情報雜志 2017年3期
關鍵詞:數據庫信息

NCBI(National Center for Biotechnology Information)是美國國立生物技術信息中心,它提供了龐大的生物醫學信息資源和強大可靠的檢索工具,被生物醫學研究人員廣泛使用。

NCBI網站(http://www.ncbi.nlm.nih.gov/)將所有數據庫的檢索和使用集成在一個界面上,并為開發人員提供了幾個開放的API編程接口,便于在他們的應用程序中獲取和操作NCBI的數據。E-utilities(Entrez Programming Utilities)是NCBI Entrez檢索系統的開放API編程接口,可以訪問所有的Entrez數據庫,包括PubMed、PMC、Gene、 Nuccore and Protein等。

利用NCBI數據進行文本挖掘和信息分析是目前醫學信息研究領域的一個熱點,而獲取文本數據是這些研究的基礎性工作。有介紹NCBI開放編程接口的文獻[1-2],也有介紹如何開發基于NCBI開放編程接口各種具體應用的文獻[3-10]。但是,有的文獻沒有詳細的接口調用的實例,而有接口調用實例的文獻由于“從2015年7月1日后不再提供E-utilities SOAP Web Service 服務[11]”已經不再適用了。現有的文獻管理軟件如Endnote、NoteExpress等雖然可以提供題錄下載,但是卻并不包括對于后續文本挖掘和信息分析至關重要引用數據、PMID、Mesh等字段。

本文詳細描述了利用標準的URL接口實現檢索和批量自動下載PubMed中的文獻題錄信息的具體過程。該方法可方便獲取NCBI論文數據并存入SQL數據庫,為后續深度開發文本挖掘和信息分析等功能構建了數據基礎。

1 功能目標

根據用戶輸入的檢索式,自動從PubMed數據庫中檢索出所有相關的文獻信息,將其下載后,再從中提取出需要的題錄信息,最后存入本地SQL數據庫。用于存放題錄信息的數據庫主要字段見表1。

表1 PubMed 主要字段類型

2 基礎架構

E-utilities由9個服務器程序組成,借助E-utilities,可以設置一套標準參數進行搜索、鏈接和下載數據(表2)[12-14]。本實例在微軟的Microsoft Visual Studio 2010平臺上,采用C#語言進行開發。操作系統選用Windows Server 2008 Enterprise Edition Service Pack 2 (64bit ),Web服務器選用IIS 7.0,數據庫選用Microsoft SQL Server 2008 R2。E-utilities程序開發接口主要選用ESearch,EFetch,發送請求和接收數據選用System.Net.WebClient組件,解析XML數據選用System.Xml組件。

表2 E-utilities API接口及其功能

3 實現流程和關鍵代碼

下載題錄信息實現流程見圖1。

3.1 檢索詞規范化

要把用戶輸入的檢索詞規范化,以便使它符合E-utilities程序開發接口的要求。例如,要把用戶輸入的簡單檢索式“liver cancer AND AFP”,轉換成“liver+cancer+AND+AFP”格式。

3.2 下載數據并存入本地數據庫

下載數據時,先用EFetch的批量下載方式批量下載。如果有失敗的部分,再通過EFetch的單個PMID值下載方式逐條下載。

實現代碼如下:

public static bool FetchDataToDB(string query, int searchLogID)

{

//通過ESearch獲取參數“WebEnv”,“QueryKey”,“Count”的值

Dictionary parameters = GetParametersByEsearch(query);

if (parameters == null)

{

return false;

}

int count = int.Parse(parameters[“Count”]);

List urlList = new List();

//編譯EFetch的URL列表

urlList = GetBatchPMIDUrls(query, count,searchLogID, parameters);

//下載題錄數據并存入本地數據庫

if (DownloadDataToDBRepeatedly(urlList, searchLogID) == false)

{

return false;

}

//如果有部分下載失敗,則通過單個失敗的PMID的URL重新下載。

if(DBManager.IsFailurePMID(count,searchLogID))

{

//編譯失敗部分的單個PMID的EFetch的URL列表

urlList = GetFailedPMIDUrls(query,count,searchLogID);

//下載題錄數據并存入本地數據庫

if (DownloadDataToDBRepeatedly(urlList, searchLogID) == false)

{

return false;

}

}

return true;

}

圖1 下載題錄信息流程

3.2.1 EFetch批量下載方式

第一步,通過ESearch獲取參數“WebEnv”“QueryKey”“Count”的值。

首先,編譯ESearch的URL。例如,根據檢索詞“liver+cancer+AND+AFP”,形成URL:http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=liver+cancer+AND+AFP&usehistory=y

其次,根據ESearch的URL,引用System.Net.WebClient組件下載xml數據。實現下載功能的具體代碼如下:

using System.Net;

using System.Text;

private static string DownloadDataFromSite(string url)

{

string xmlPage =null;

try

{

WebClient MyWebClient = new WebClient();

MyWebClient.Credentials = CredentialCache.DefaultCredentials;

//從網上下載數據

Byte[]pageData = MyWebClient.DownloadData(url);

xmlPage = Encoding.UTF8.GetString(pageData);

}

catch (WebException webEx)

{

LogManager.InsertError(webEx);

}

return xmlPage;

}

最后,引用System.Xml組件解析并提取xml數據中的參數“WebEnv”,“QueryKey”,“Count”的值。

第二步,通過EFetch 的批量下載方式獲取文獻題錄信息。圖2是代碼實現的詳細流程,首先,根據參數“WebEnv”,“QueryKey”,“Count”的值,編譯EFetch的URL列表。其中,retmax參數需要根據實際的運行情況并經過多次測試結果而設定。單個EFetch的URL的格式如下:

http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&rettype=abstract&retmode=xml&WebEnv=NCID_1_7740069_130.14.22.215_9001_1454423068_1167148892_0MetA0_S_MegaStore_F_1&query_key=1&retstart=0&retmax=500

其次,根據EFetch的URL列表,利用System.Net.WebClient組件下載xml數據。

再次,利用System.Xml組件解析并提取xml數據中題錄信息。

最后,把提取的題錄信息存入本地數據庫。

部分實現代碼如下:

Private static bool DownloadDataToDBRepeatedly(List urlList, int searchLogID)

{

//有時候某些URL下載不成功,需要多次重復下載,這里根據實際情況定了10次

int circleNum = 0;

do

{

urlList = DownloadDataToDB(urlList, searchLogID);

if (urlList == null)

{

return false;

}

circleNum++;

} while (urlList.Count >= 1 && circleNum <= 10);

if (circleNum > 10 && urlList.Count > 0) //如果 urlList.Count==0,表示成功的下載并存入本地數據庫。

{

foreach (string url in urlList)

{

PubmedLogger.Log(url + "/r" + "After download it" + circleNum + "times, it is failure! ", LogCategory.Failure);

}

return false;

}

return true;

}

private static List DownloadDataToDB(List urlList, int searchLogID)

{

List

articleList;

bool isSuccessful;

List FailedUrlList = new List();

foreach (string url in urlList)

{

//從網站下載數據

string xmlPage = DownloadDataFromSite(url);

if (xmlPage == null)

{

FailedUrlList.Add(url);

PubmedLogger.Log(url + "/r" + "There is not the downloaded data. ", LogCategory.Warning); continue;

}

//從xml格式的數據里提取所需的題錄信息

articleList = ExtractDataFromXmlPage(xmlPage, searchLogID, url);

if (articleList == null) { FailedUrlList.Add(url); continue; }

//把提取的題錄信息存入本地數據庫

isSuccessful = PutDataToDB(articleList);

if (isSuccessful == false){ return null;}

}

return FailedUrlList;

}

圖 2 EFetch下載題錄信息詳細流程

3.2.2 EFetch單個PMID值單條下載方式

如果EFetch批量下載方式下載過程中有失敗的部分,則通過EFetch單個PMID值單條下載方式逐條下載題錄信息并存入本地數據庫。

第一步,需要通過ESearch下載xml數據并提取所有相關的PMID值,再跟數據庫中成功的部分比較,得到前面批量下載過程中所有失敗的PMID值。需要注意的是需下載所有的PMID值,ESearch的URL中需要設置“RetMax”參數值。ESearch的URL格式如下:http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=liver+cancer+AND+AFP&usehistory=y&RetMax=4206

第二步,通過EFetch單個PMID值單條下載方式,逐條下載題錄信息并存入本地數據庫。下載和保存的實現代碼與EFetch批量下載方式中的第二步一樣,區別在于EFetch單個PMID值單條下載方式的URL的格式不一樣。

http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&rettype=abstract&retmode=xml&id=26815502

4 測試結果

測試主要是比對手工檢索結果頁面顯示的總的記錄項數目和本地數據庫中的記錄項數目是否相等,以及比對手工下載的結果文件中的部分內容和本地數據庫中由程序代碼下載的內容是否相同。由于PubMed數據每天更新,所以測試時要保證手工檢索和下載結果文件的時間與通過程序代碼下載的時間不能相隔太久。在不同時間段,用不同檢索詞,進行了多次的測試,得到的結果都是相同的。

5 結語

本文利用NCBI的E-utilities中的ESearch和EFetch兩個標準的URL接口,實現了對PubMed數據庫的檢索和批量自動下載檢索結果中的文獻題錄信息。給出的實現流程和關鍵代碼為進一步文本挖掘和信息分析提供數據基礎。

猜你喜歡
數據庫信息
數據庫
財經(2017年15期)2017-07-03 22:40:49
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
數據庫
財經(2010年20期)2010-10-19 01:48:32
信息
建筑創作(2001年3期)2001-08-22 18:48:14
健康信息
祝您健康(1987年3期)1987-12-30 09:52:32
主站蜘蛛池模板: 久久久久亚洲精品成人网| 亚洲人成成无码网WWW| 欧美性天天| 亚洲一区黄色| 亚洲美女久久| 欧美福利在线观看| 中文字幕人成人乱码亚洲电影| 欧美综合区自拍亚洲综合天堂| 亚洲欧美在线综合图区| 久久国产精品嫖妓| 高h视频在线| 国产91视频观看| a级毛片免费看| 青青草一区二区免费精品| 天天综合网在线| 久久精品国产精品青草app| 天天躁日日躁狠狠躁中文字幕| 欧美另类视频一区二区三区| 九九九久久国产精品| 久久精品视频一| 伦伦影院精品一区| 国产精品成人一区二区| 亚洲swag精品自拍一区| 美女无遮挡被啪啪到高潮免费| 欧美性久久久久| 亚洲色图欧美一区| 色综合久久88色综合天天提莫 | 网友自拍视频精品区| 久久综合丝袜长腿丝袜| 国产毛片高清一级国语| 欧美色综合网站| 久久久久国产精品免费免费不卡| 亚洲视频免费播放| 72种姿势欧美久久久大黄蕉| 久久精品无码中文字幕| 一本大道AV人久久综合| 中文精品久久久久国产网址 | 国产清纯在线一区二区WWW| 超碰精品无码一区二区| 成人国产精品一级毛片天堂| 性网站在线观看| 性做久久久久久久免费看| 在线视频亚洲色图| 精品国产自在现线看久久| 亚洲熟妇AV日韩熟妇在线| 国产好痛疼轻点好爽的视频| 国产成人福利在线视老湿机| 日韩毛片免费视频| 波多野结衣久久精品| 2022国产无码在线| 91九色国产在线| 国产丝袜啪啪| 伊人久久久久久久久久| av在线手机播放| 国产成人精品18| 国产成人免费| 99久久精品视香蕉蕉| 二级毛片免费观看全程| 国产成人一区| 伊人色婷婷| 99久久精品视香蕉蕉| 国产99免费视频| 在线亚洲精品自拍| 久久亚洲AⅤ无码精品午夜麻豆| 欧美日韩高清| 国产91麻豆免费观看| 国产成人艳妇AA视频在线| 亚洲日韩精品伊甸| 2021最新国产精品网站| 国产一级做美女做受视频| 欧美高清三区| 国产三级国产精品国产普男人| 扒开粉嫩的小缝隙喷白浆视频| 99在线视频精品| 国产va在线观看免费| 亚洲一欧洲中文字幕在线| 女人18毛片水真多国产| 青青操视频在线| 国产亚洲精品在天天在线麻豆| 黄色网址手机国内免费在线观看 | 91最新精品视频发布页| 呦视频在线一区二区三区|