CLEiM
Cross Lingual Education in Medicine
|
00001 00005 package com.uem.gsi.cleim.scl; 00006 00007 import java.util.ArrayList; 00008 import java.util.List; 00009 00010 import org.apache.commons.httpclient.HttpClient; 00011 import org.apache.commons.httpclient.methods.GetMethod; 00012 00013 import com.freebase.api.Freebase; 00014 import com.freebase.json.JSON; 00015 import com.uem.gsi.cleim.util.Constants; 00016 00017 import static com.freebase.json.JSON.o; 00018 import static com.freebase.json.JSON.a; 00019 00020 public class CallFBSym { 00021 private String symptom; 00022 private JSON query; 00023 private JSON envelope; 00024 private int limit=10; 00025 private int page=0; 00026 private int count=0; 00027 private int totalpages=0; 00028 private List<String> lIDList; 00029 private List<String> lConcept; 00030 private List<String> lArticle; 00031 private List<String> lImage; 00032 private List<String> lFBUrl; 00033 private List<String> lSideEf; 00034 private List<String> lSympOf; 00035 00036 public CallFBSym(String psymptom) { 00037 this.symptom=psymptom; 00038 this.query=o(); 00039 this.envelope=o(); 00040 lIDList = new ArrayList<String>(); 00041 lConcept = new ArrayList<String>(); 00042 lArticle = new ArrayList<String>(); 00043 lImage = new ArrayList<String>(); 00044 lFBUrl = new ArrayList<String>(); 00045 lSideEf = new ArrayList<String>(); 00046 lSympOf = new ArrayList<String>(); 00047 } 00048 00049 private JSON doQuery(){ 00050 Freebase freebase = Freebase.getFreebase(); 00051 JSON mqlJsonResult = freebase.mqlread(this.query,this.envelope,null); 00052 return mqlJsonResult; 00053 } 00054 00055 public void queryFB(){ 00056 //Count 00057 this.query = o( 00058 "type", "/medicine/symptom", "name~=", "*"+this.symptom+"*", 00059 "return" , "count" 00060 ); 00061 JSON json=doQuery(); 00062 this.count=new Integer(json.get("result").toString()); 00063 totalpages=new Integer(count/limit); 00064 00065 //Search Result 00066 this.envelope=o("page", this.page,"cursor", true); 00067 this.query = a(o( 00068 "type", "/medicine/symptom", "name~=", "*"+this.symptom+"*", "id", null, "name", null, "limit", this.limit, "sort","name", 00069 "/common/topic/article",a(o("guid", null, "limit", 1, "optional", true)), 00070 "/common/topic/image",a(o("id", null, "limit", 1, "optional", true))) 00071 ); 00072 JSON jsontemp=doQuery(); 00073 json =jsontemp.get("result"); 00074 int size=json.array().size(); 00075 for (int i=0;i<size;i++){ 00076 String id=(String) json.get(i).get("id").value(); 00077 lIDList.add(id); 00078 lConcept.add((String) json.get(i).get("name").value()); 00079 //get raw data if exists 00080 lArticle.add( 00081 (json.get(i).get("/common/topic/article").array().size()>0)? 00082 doRawQuery("http://api.freebase.com/api/trans/raw/"+ 00083 ((String)json.get(i).get("/common/topic/article").get(0).get("guid").value()).substring(1)):""); 00084 lImage.add( 00085 (json.get(i).get("/common/topic/image").array().size()>0)? 00086 "http://api.freebase.com/api/trans/image_thumb"+ 00087 json.get(i).get("/common/topic/image").get(0).get("id").value(): 00088 ""); 00089 lFBUrl.add(Constants.FREEBASE_VIEW+id); 00090 00091 //Semantic detail 00092 queryFBDetail(id); 00093 JSON jsonDetail=doQuery().get("result"); 00094 //Side effect of 00095 String sSideEf=""; 00096 for (int k=0;k<jsonDetail.get("side_effect_of").array().size();k++){ 00097 sSideEf+=(sSideEf.equals(""))?"":"<span> | </span>"; 00098 sSideEf+="<a href=\"treatment.jsp?term="+ 00099 jsonDetail.get("side_effect_of").get(k).get("name").value()+"\">"+ 00100 jsonDetail.get("side_effect_of").get(k).get("name").value()+"</a>\r\n"; 00101 } 00102 lSideEf.add(sSideEf); 00103 //Symptom of 00104 String sSympOf=""; 00105 for (int k=0;k<jsonDetail.get("symptom_of").array().size();k++){ 00106 sSympOf+=(sSympOf.equals(""))?"":"<span> | </span>"; 00107 sSympOf+="<a href=\"disease.jsp?term="+ 00108 jsonDetail.get("symptom_of").get(k).get("name").value()+"\">"+ 00109 jsonDetail.get("symptom_of").get(k).get("name").value()+"</a>\r\n"; 00110 } 00111 lSympOf.add(sSympOf); 00112 } 00113 00114 } 00115 private void queryFBDetail(String pid){ 00116 this.query = o( 00117 "type", "/medicine/symptom","id", pid,"name", null, 00118 "side_effect_of", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/medical_treatment")), 00119 "symptom_of", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/disease")) 00120 ); 00121 } 00122 private String doRawQuery(String url){ 00123 String sSource=""; 00124 try { 00125 HttpClient client = new HttpClient(); 00126 GetMethod method=new GetMethod(url); 00127 int statusCode = client.executeMethod(method); 00128 if( statusCode != -1 ) { 00129 sSource = method.getResponseBodyAsString(); 00130 method.releaseConnection(); 00131 }else{ 00132 sSource+=statusCode; 00133 } 00134 } 00135 catch( Exception e ) { 00136 sSource+=e.toString(); 00137 } 00138 return sSource; 00139 } 00140 public void setPage(int pPage){ 00141 this.page=pPage; 00142 } 00143 public int getCount(){ 00144 return this.count; 00145 } 00146 public int getTotalPages(){ 00147 return this.totalpages; 00148 } 00149 public List<String> getIDLists(){ 00150 return this.lIDList; 00151 } 00152 public List<String> getConcepts(){ 00153 return this.lConcept; 00154 } 00155 public List<String> getArticles(){ 00156 return this.lArticle; 00157 } 00158 public List<String> getImages(){ 00159 return this.lImage; 00160 } 00161 public List<String> getFBUrls(){ 00162 return this.lFBUrl; 00163 } 00164 public List<String> getSideEfs(){ 00165 return this.lSideEf; 00166 } 00167 public List<String> getSympOfs(){ 00168 return this.lSympOf; 00169 } 00170 public static void main (String[] args){ 00171 CallFBSym h=new CallFBSym("cancer"); 00172 h.setPage(0); 00173 h.queryFB(); 00174 System.out.println(h.getCount()); 00175 for (int i=0;i<h.getIDLists().size();i++){ 00176 System.out.println("ID: "+h.getIDLists().get(i)); 00177 System.out.println("CONCEPT: "+h.getConcepts().get(i)); 00178 System.out.println("ARTICLE: "+h.getArticles().get(i)); 00179 System.out.println("IMAGE: "+h.getImages().get(i)); 00180 System.out.println("FREEBASE URL: "+h.getFBUrls().get(i)); 00181 System.out.println("SIDE EFFECT OF: "+h.getSideEfs().get(i)); 00182 System.out.println("SYMPTOM OF: "+h.getSympOfs().get(i)); 00183 } 00184 } 00185 00186 }