def searchByTerms(terms, minresults=10, earlyyear=0, lateyear=3000): sortedterms = mb.sortImportance(terms) nr_of_results = 0 while ((nr_of_results < minresults) and (len(sortedterms) > 0)): query = querybuilder.buildQuery(sortedterms, [], 4, earlyyear, lateyear) resp, content = h.request(baseURL + \ "esearch.fcgi?db=pubmed&retmode=xml&sort=relevance" + \ "&retmax=" + str(retmax) + "&term=" + \ query.replace(" ", "+")) resultsdict = xmltodict.parse(content)["eSearchResult"] nr_of_results = int(resultsdict["Count"]) print "Number of results for %i terms: %i" \ % (len(sortedterms), nr_of_results) sortedterms.pop() return query, resultsdict, nr_of_results
def searchByCombination(primaryterms, secondaryterms, minresults=10, earlyyear=0, lateyear=3000): level = 4 nr_of_results = -1 while ((nr_of_results < minresults) and (level > 0)): query = querybuilder.buildQuery(primaryterms, secondaryterms, level, \ earlyyear, lateyear) #print query resp, content = h.request(baseURL + \ "esearch.fcgi?db=pubmed&retmode=xml&sort=relevance&" + \ "retmax=" + str(retmax) + "&term=" + query.replace(" ", "+")) resultsdict = xmltodict.parse(content)["eSearchResult"] try: nr_of_results = int(resultsdict["Count"]) except KeyError: print "KeyError" nr_of_results = 0 print "Number of results for level %i: %i" \ % (level, nr_of_results) level -= 1 return query, resultsdict, nr_of_results
secondaryterms = [] if len(evidence) == 1: for term in terms: if terms[term]["major"] >= 1: primaryterms.append(("(\"" + term + "\"[MeSH Terms] OR \"" + term + "\"[All Fields])")) else: subquery = "" for term in terms: # make conjunction of all terms that occur in all articles if terms[term]["count"] > (len(evidence) - 1): primaryterms.append(("(\"" + term + "\"[MeSH Terms] OR \"" + term + "\"[All Fields])")) # all rank 2 terms if terms[term]["count"] == (len(evidence) - 1): secondaryterms.append(("\"" + term + "\"[MeSH Terms]")) query2 = querybuilder.buildQuery(primaryterms, secondaryterms, 1) # write to results.html out.write("<h3>Query obtained from input article MeSH terms</h3>") out.write(query2) #-------------------------------------- # PART 3: execute (combined) query) #-------------------------------------- # combine with old query #query += (" AND \"" + query2) # add dates #query += " 2004:2012 [mhda]"