• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于NCBI開(kāi)放接口的檢索和下載文獻(xiàn)題錄信息功能的實(shí)現(xiàn)

      2017-03-21 10:50:08,
      關(guān)鍵詞:題錄批量代碼

      ,

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

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

      利用NCBI數(shù)據(jù)進(jìn)行文本挖掘和信息分析是目前醫(yī)學(xué)信息研究領(lǐng)域的一個(gè)熱點(diǎn),而獲取文本數(shù)據(jù)是這些研究的基礎(chǔ)性工作。有介紹NCBI開(kāi)放編程接口的文獻(xiàn)[1-2],也有介紹如何開(kāi)發(fā)基于NCBI開(kāi)放編程接口各種具體應(yīng)用的文獻(xiàn)[3-10]。但是,有的文獻(xiàn)沒(méi)有詳細(xì)的接口調(diào)用的實(shí)例,而有接口調(diào)用實(shí)例的文獻(xiàn)由于“從2015年7月1日后不再提供E-utilities SOAP Web Service 服務(wù)[11]”已經(jīng)不再適用了?,F(xiàn)有的文獻(xiàn)管理軟件如Endnote、NoteExpress等雖然可以提供題錄下載,但是卻并不包括對(duì)于后續(xù)文本挖掘和信息分析至關(guān)重要引用數(shù)據(jù)、PMID、Mesh等字段。

      本文詳細(xì)描述了利用標(biāo)準(zhǔn)的URL接口實(shí)現(xiàn)檢索和批量自動(dòng)下載PubMed中的文獻(xiàn)題錄信息的具體過(guò)程。該方法可方便獲取NCBI論文數(shù)據(jù)并存入SQL數(shù)據(jù)庫(kù),為后續(xù)深度開(kāi)發(fā)文本挖掘和信息分析等功能構(gòu)建了數(shù)據(jù)基礎(chǔ)。

      1 功能目標(biāo)

      根據(jù)用戶輸入的檢索式,自動(dòng)從PubMed數(shù)據(jù)庫(kù)中檢索出所有相關(guān)的文獻(xiàn)信息,將其下載后,再?gòu)闹刑崛〕鲂枰念}錄信息,最后存入本地SQL數(shù)據(jù)庫(kù)。用于存放題錄信息的數(shù)據(jù)庫(kù)主要字段見(jiàn)表1。

      表1 PubMed 主要字段類型

      2 基礎(chǔ)架構(gòu)

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

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

      3 實(shí)現(xiàn)流程和關(guān)鍵代碼

      下載題錄信息實(shí)現(xiàn)流程見(jiàn)圖1。

      3.1 檢索詞規(guī)范化

      要把用戶輸入的檢索詞規(guī)范化,以便使它符合E-utilities程序開(kāi)發(fā)接口的要求。例如,要把用戶輸入的簡(jiǎn)單檢索式“l(fā)iver cancer AND AFP”,轉(zhuǎn)換成“l(fā)iver+cancer+AND+AFP”格式。

      3.2 下載數(shù)據(jù)并存入本地?cái)?shù)據(jù)庫(kù)

      下載數(shù)據(jù)時(shí),先用EFetch的批量下載方式批量下載。如果有失敗的部分,再通過(guò)EFetch的單個(gè)PMID值下載方式逐條下載。

      實(shí)現(xiàn)代碼如下:

      public static bool FetchDataToDB(string query, int searchLogID)

      {

      //通過(guò)ESearch獲取參數(shù)“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);

      //下載題錄數(shù)據(jù)并存入本地?cái)?shù)據(jù)庫(kù)

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

      {

      return false;

      }

      //如果有部分下載失敗,則通過(guò)單個(gè)失敗的PMID的URL重新下載。

      if(DBManager.IsFailurePMID(count,searchLogID))

      {

      //編譯失敗部分的單個(gè)PMID的EFetch的URL列表

      urlList = GetFailedPMIDUrls(query,count,searchLogID);

      //下載題錄數(shù)據(jù)并存入本地?cái)?shù)據(jù)庫(kù)

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

      {

      return false;

      }

      }

      return true;

      }

      圖1 下載題錄信息流程

      3.2.1 EFetch批量下載方式

      第一步,通過(guò)ESearch獲取參數(shù)“WebEnv”“QueryKey”“Count”的值。

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

      其次,根據(jù)ESearch的URL,引用System.Net.WebClient組件下載xml數(shù)據(jù)。實(shí)現(xiàn)下載功能的具體代碼如下:

      using System.Net;

      using System.Text;

      private static string DownloadDataFromSite(string url)

      {

      string xmlPage =null;

      try

      {

      WebClient MyWebClient = new WebClient();

      MyWebClient.Credentials = CredentialCache.DefaultCredentials;

      //從網(wǎng)上下載數(shù)據(jù)

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

      xmlPage = Encoding.UTF8.GetString(pageData);

      }

      catch (WebException webEx)

      {

      LogManager.InsertError(webEx);

      }

      return xmlPage;

      }

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

      第二步,通過(guò)EFetch 的批量下載方式獲取文獻(xiàn)題錄信息。圖2是代碼實(shí)現(xiàn)的詳細(xì)流程,首先,根據(jù)參數(shù)“WebEnv”,“QueryKey”,“Count”的值,編譯EFetch的URL列表。其中,retmax參數(shù)需要根據(jù)實(shí)際的運(yùn)行情況并經(jīng)過(guò)多次測(cè)試結(jié)果而設(shè)定。單個(gè)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

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

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

      最后,把提取的題錄信息存入本地?cái)?shù)據(jù)庫(kù)。

      部分實(shí)現(xiàn)代碼如下:

      Private static bool DownloadDataToDBRepeatedly(List urlList, int searchLogID)

      {

      //有時(shí)候某些URL下載不成功,需要多次重復(fù)下載,這里根據(jù)實(shí)際情況定了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,表示成功的下載并存入本地?cái)?shù)據(jù)庫(kù)。

      {

      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)

      {

      //從網(wǎng)站下載數(shù)據(jù)

      string xmlPage = DownloadDataFromSite(url);

      if (xmlPage == null)

      {

      FailedUrlList.Add(url);

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

      }

      //從xml格式的數(shù)據(jù)里提取所需的題錄信息

      articleList = ExtractDataFromXmlPage(xmlPage, searchLogID, url);

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

      //把提取的題錄信息存入本地?cái)?shù)據(jù)庫(kù)

      isSuccessful = PutDataToDB(articleList);

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

      }

      return FailedUrlList;

      }

      圖 2 EFetch下載題錄信息詳細(xì)流程

      3.2.2 EFetch單個(gè)PMID值單條下載方式

      如果EFetch批量下載方式下載過(guò)程中有失敗的部分,則通過(guò)EFetch單個(gè)PMID值單條下載方式逐條下載題錄信息并存入本地?cái)?shù)據(jù)庫(kù)。

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

      第二步,通過(guò)EFetch單個(gè)PMID值單條下載方式,逐條下載題錄信息并存入本地?cái)?shù)據(jù)庫(kù)。下載和保存的實(shí)現(xiàn)代碼與EFetch批量下載方式中的第二步一樣,區(qū)別在于EFetch單個(gè)PMID值單條下載方式的URL的格式不一樣。

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

      4 測(cè)試結(jié)果

      測(cè)試主要是比對(duì)手工檢索結(jié)果頁(yè)面顯示的總的記錄項(xiàng)數(shù)目和本地?cái)?shù)據(jù)庫(kù)中的記錄項(xiàng)數(shù)目是否相等,以及比對(duì)手工下載的結(jié)果文件中的部分內(nèi)容和本地?cái)?shù)據(jù)庫(kù)中由程序代碼下載的內(nèi)容是否相同。由于PubMed數(shù)據(jù)每天更新,所以測(cè)試時(shí)要保證手工檢索和下載結(jié)果文件的時(shí)間與通過(guò)程序代碼下載的時(shí)間不能相隔太久。在不同時(shí)間段,用不同檢索詞,進(jìn)行了多次的測(cè)試,得到的結(jié)果都是相同的。

      5 結(jié)語(yǔ)

      本文利用NCBI的E-utilities中的ESearch和EFetch兩個(gè)標(biāo)準(zhǔn)的URL接口,實(shí)現(xiàn)了對(duì)PubMed數(shù)據(jù)庫(kù)的檢索和批量自動(dòng)下載檢索結(jié)果中的文獻(xiàn)題錄信息。給出的實(shí)現(xiàn)流程和關(guān)鍵代碼為進(jìn)一步文本挖掘和信息分析提供數(shù)據(jù)基礎(chǔ)。

      猜你喜歡
      題錄批量代碼
      批量提交在配置分發(fā)中的應(yīng)用
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      創(chuàng)世代碼
      近刊題錄
      近刊題錄
      NoteExpress 在撰寫(xiě)文章綜述時(shí)的技巧解析
      淺議高校網(wǎng)銀批量代發(fā)
      基于AUTOIT3和VBA的POWERPOINT操作題自動(dòng)批量批改
      左权县| 亳州市| 舒城县| 盐边县| 华阴市| 广平县| 宜昌市| 东山县| 龙门县| 腾冲县| 五家渠市| 岳池县| 华坪县| 兴文县| 松阳县| 东明县| 平舆县| 枣庄市| 舞钢市| 宁化县| 淮安市| 宝山区| 西乌珠穆沁旗| 达州市| 黎城县| 日土县| 韶关市| 开化县| 乌拉特中旗| 孙吴县| 文化| 贵定县| 许昌市| 屏东县| 张家界市| 逊克县| 清苑县| 项城市| 榆中县| 连城县| 咸阳市|