#xlrd #biopython #pubmed
#xlrd #biopython #pubmed
Вопрос:
Я пытаюсь ввести более 200 записей в pubmed, чтобы записать количество статей, опубликованных автором, и уточнить поиск, включив его / ее наставника и учреждение. Я пытался сделать это с помощью biopython и xlrd (код приведен ниже), но я постоянно получаю 0 результатов для всех трех форматов запросов (1. по имени, 2. по имени и названию учреждения и 3. по имени и отчеству наставника). Существуют ли шаги по устранению неполадок, которые я могу выполнить, или мне следует использовать другой формат при использовании ключевых слов, указанных ниже, для поиска в pubmed?
Пример вывода входных запросов;search_term — это связанный список со списками входных запросов.
print(*search_term[8:15], sep='n')
[text:'Andrew Bland', 'Weill Cornell Medical College', text:'David Cutler MD']
[text:'Andy Price', 'University of Alabama at Birmingham School of Medicine', text:'Jason Warem, PhD']
[text:'Bah Chamin', 'University of Texas Southwestern Medical School', text:'Dr. Timothy Hillar']
[text:'Eduo Cera', 'University of Colorado School of Medicine', text:'Dr. Tim']
Код, используемый для генерации приведенных выше входных запросов и для поиска в Pubmed:
Entrez.email = "mollyzhaoe@college.harvard.edu"
for search_term in search_terms[8:55]:
handle = Entrez.egquery(term="{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) ".format(search_term[0]))
handle_1 = Entrez.egquery(term = "{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[2]))
handle_2 = Entrez.egquery(term = "{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[1]))
record = Entrez.read(handle)
record_1 = Entrez.read(handle_1)
record_2 = Entrez.read(handle_2)
pubmed_count = ['','','']
for row in record["eGQueryResult"]:
if row["DbName"] == "pubmed":
pubmed_count[0] = row["Count"]
for row in record_1["eGQueryResult"]:
if row["DbName"] == "pubmed":
pubmed_count[1] = row["Count"]
for row in record_2["eGQueryResult"]:
if row["DbName"] == "pubmed":
pubmed_count[2] = row["Count"]
Ответ №1:
Проверьте свой отступ, трудно определить, какая часть принадлежит какому циклу.
Если вы хотите устранить неполадки, попробуйте распечатать свой egquery
, например
print("{0} AND ((2010[Date - Publication] : 2017[Date - Publication])) ".format(search_term[0]))
и вставьте выходные данные в pubmed и посмотрите, что вы получите. Возможно, немного измените его и посмотрите, какой поисковый запрос вызывает проблемы.
Ваш формат ввода немного сложно угадать. Распечатайте запрос и убедитесь, что вы получаете правильные значения для поиска.
Что касается имен авторов, постарайтесь избавиться от научных званий, PubMed может перепутать их с инициалами, например, доктор медицинских наук Хаус, возможно, Марк Дэвид Хаус.
Комментарии:
1. Есть ли способ избавиться от ‘text:’? Я не думаю, что это часть строки, поэтому я не могу использовать str.replace .
2. Откуда вы взяли условия поиска?
3. Я заранее создал три списка, в каждом из которых указано имя ученика, название школы и имя наставника. Затем я добавил их в search_terms.
4.
search_terms=[] for row in range(0, book.nrows): search_terms.append([med_name[row], med_school[row], mentor[row]]) print(*search_terms[0:15], sep='n')