Поиск в pubmed с использованием biopython

#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')