⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pubmedquery.java

📁 dragontoolkit用于机器学习
💻 JAVA
字号:
package dragon.onlinedb.pubmed;

import dragon.onlinedb.*;
import dragon.util.HttpUtil;
/**
 * <p>PubMed article query </p>
 * <p></p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: IST, Drexel University</p>
 * @author Davis Zhou
 * @version 1.0
 */

public class PubMedQuery extends AbstractQuery{
    protected HttpUtil http;
    protected String webEnv,queryKey;
    protected String database, term;
    protected String eSearchUrl, eFetchUrl, server;
    protected String startDate, endDate;
    protected String[] arrPaper;

    public static void main(String[] args) {
        PubMedQuery query;
        String term;
        int i,top;

        query=new PubMedQuery(1);
        term="hypertension[TIAB] AND diabetes[TIAB]";
        term="";
        query.setSearchTerm(term);
        query.setDateRange("1995/01/01","2003/12/31");
        query.initQuery();

        top=100000;
        for(i=0;i<top && query.moveToNextArticle();i++){
            System.out.println(query.getArticle().getKey());
        }
    }

    public PubMedQuery(String term, int pageWidth){
        super(pageWidth);
        arrPaper=new String[pageWidth];
        if(term!=null)
            this.term=term.replace(' ','+');
        eSearchUrl="/entrez/eutils/esearch.fcgi?";
        eFetchUrl="/entrez/eutils/efetch.fcgi?";
        server="eutils.ncbi.nlm.nih.gov";
        http=new HttpUtil(server);
        startDate=null;
        endDate=null;
    }

    public PubMedQuery(int pageWidth){
        this(null,pageWidth);
    }

    public boolean supportArticleKeyRetrieval(){
        return true;
    }

    public void setSearchTerm(String term){
        this.term=term.replace(' ','+');
    }

    public void setDateRange(String start, String end){
        startDate=start;
        endDate=end;
    }

    public  boolean initQuery(){
        String curUrl;
        String content;
        int start, end;

        curPageNo=-1;
        curArticle=null;
        curPageWidth=0;

        curUrl = eSearchUrl+"usehistory=y&db=pubmed&term="+term+"&retmax=1";
        if(startDate!=null && endDate!=null)
            curUrl=curUrl+"&mindate="+startDate+"&maxdate="+endDate;
        content=http.get(curUrl);
        if(content==null) return false;

        //get Search Result
        start=content.indexOf("<Count>")+7;
        end=content.indexOf("</Count>",start);
        articleNum=Integer.parseInt(content.substring(start,end));
        start=content.indexOf("<QueryKey>",start)+10;
        end=content.indexOf("</QueryKey>",start);
        queryKey=content.substring(start,end);
        start=content.indexOf("<WebEnv>",start)+8;
        end=content.indexOf("</WebEnv>",start);
        webEnv=content.substring(start,end);
        if(articleNum==0)
            pageNum=0;
        else
            pageNum=(articleNum-1)/pageWidth+1;
        return true;
    }

    public boolean moveToPage(int pageNo){
        String curUrl;
        String content;
        int start, end, count;

        if (pageNo >= pageNum || pageNum==0)
            return false;
        if(pageNo==curPageNo) return true;

        curUrl = eFetchUrl + "db=PubMed&WebEnv=" + webEnv +
            "&retmode=text&query_key=" + queryKey;
        curUrl = curUrl + "&retmax=" + pageWidth + "&retstart=" +
            (pageNo * pageWidth);
        content=http.get(curUrl);
        if (content == null)
            return false;

        count = 0;
        start = content.indexOf("Pubmed-entry");
        while (start >= 0) {
            end = content.indexOf("Pubmed-entry", start + 12);
            if (end >= 0) {
                arrPaper[count]=content.substring(start,end);
            }
            else {
                arrPaper[count] = content.substring(start);
            }
            count = count + 1;
            start = end;
        }
        curPageNo=pageNo;
        curPageWidth = count;
        curArticleNo = 0;
        if(arrPaper[curArticleNo]==null)
            return false;
        curArticle=new PubMedArticle(arrPaper[curArticleNo]);
        return true;
    }

    public Article getArticleByKey(String PMID){
        String curUrl;
        String content;
        int start;

        curUrl = eFetchUrl + "db=PubMed&retmode=text&id="+PMID;
        content=http.get(curUrl);
        if (content == null)
            return null;

        start = content.indexOf("Pubmed-entry");
        if(start >= 0) {
            return new PubMedArticle(content);
        }
        else
            return null;
    }

    protected Article getArticle(int articleNo){
        return new PubMedArticle(arrPaper[articleNo]);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -