Biopython и получение полного названия журнала

Я использую Biopython с Python 3.x для поиска в базе данных PubMed. Я правильно получаю результаты поиска, но затем мне нужно будет извлечь все названия журналов (полные названия, а не только сокращения) из результатов поиска. В настоящее время я использую следующий код:

from Bio import Entrez
from Bio import Medline

Entrez.email = "[email protected]"
handle = Entrez.esearch(db="pubmed", term="search_term", retmax=20)
record = Entrez.read(handle)
handle.close()

idlist = record["IdList"]

records = list(records)

for record in records:
    print("source:", record.get("SO", "?"))

Так что это работает нормально, но record.get("SO"), "?") возвращает только аббревиатуру журнала (например, N Engl J Med, а не New England Journal of Медицина). Исходя из моего опыта ручного поиска в PubMed, вы можете искать, используя как аббревиатуру, так и полное имя, и PubMed будет обрабатывать их таким же образом, поэтому я подумал, есть ли еще какой-то параметр для получения полного имени?


person user2891883    schedule 04.10.2017    source источник


Ответы (1)


Так что это работает нормально, но record.get("SO"), "?") возвращает только аббревиатуру журнала

Нет, это не так. Он даже не запустится из-за этой строки:

records = list(records)

поскольку records не определено. И даже если вы это исправите, все, что вы получите обратно:

idlist = record["IdList"]

представляет собой список чисел, таких как: ['17510654', '2246389'], которые предназначены для передачи обратно через вызов Entrez.efetch() для получения фактических данных. Поэтому, когда вы выполняете record.get("SO", "?") в одной из этих числовых строк, ваш код взрывается (снова).

Во-первых, аббревиатура поля "SO" определена так, чтобы возвращать аббревиатуру названия журнала (TA) как часть того, что она возвращает. Скорее всего, вам понадобится "JT" Заголовок журнала, как указано в элементе данных MEDLINE/PubMed (поле) Описания. Но ни один из них не имеет ничего общего с этим поиском.

Вот переработка вашего кода, чтобы получить название статьи и название журнала, в котором она находится:

from Bio import Entrez

Entrez.email = "[email protected]"  # change this to be your email address
handle = Entrez.esearch(db="pubmed", term="cancer AND wombats", retmax=20)
record = Entrez.read(handle)
handle.close()

for identifier in record['IdList']:
    pubmed_entry = Entrez.efetch(db="pubmed", id=identifier, retmode="xml")
    result = Entrez.read(pubmed_entry)
    article = result['PubmedArticle'][0]['MedlineCitation']['Article']

    print('"{}" in "{}"'.format(article['ArticleTitle'], article['Journal']['Title']))

ВЫВОД

> python3 test.py
"Of wombats and whales: telomere tales in Madrid. Conference on telomeres and telomerase." in "EMBO reports"
"Spontaneous proliferations in Australian marsupials--a survey and review. 1. Macropods, koalas, wombats, possums and gliders." in "Journal of comparative pathology"
>

Подробности можно найти в документе: Описания XML-элементов MEDLINE PubMed

person cdlane    schedule 05.10.2017