Для какого-то конкретного исследования мне нужно найти по некоторым ключевым словам статьи, у которых есть только один автор. Я использовал PubMed, Scopus и ISI Web of Science, но в любом случае мне не удалось найти способ фильтровать результаты библиографического поиска по определенному количеству авторов или числу меньше некоторого точного количества авторов. Кто-нибудь знает, как это сделать с помощью упомянутых инструментов (PubMed, Scopus и ISI Web of Science) или других?
PubMed имеет интерфейс, который вы можете вызвать из скрипта. Намерение разработать это именно ваш класс задач, которые не могут быть решены с помощью предоставленного пользовательского интерфейса.
Это главная страница NCBI Entrez API: https://www.ncbi.nlm.nih.gov/books/NBK25501/
Что вам нужно сделать, так это запросить PubMed по ключевым словам, например, это поиск по «бетону»:
Сделайте несколько запросов, чтобы охватить ваше поле, например, вы также можете рассмотреть «кирпич» или «цемент».
Возвращает список публикаций. Для каждой публикации вам нужно будет проверить количество авторов и оставить их с одним автором. Для каждой публикации вы должны звонить:
https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=29510510&retmode=json
Определите размер векторных «авторов» и оставьте только те, которые имеют размер один.
Основываясь на подсказке @Razvan P, я написал небольшой скрипт python3, который решает вашу проблему:
'''
Created on 01.04.2018
@author: OBu
'''
import requests
import json
from collections import Counter # for histogram
eutils_basepath = 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/'
DB = 'pubmed' # please modify for other databases
RETMAX = '100' # max 100 results - modify if needed, maximum = 100.000
SEARCHTERM = "concrete" # replace with your search term
# Now build the search URL:
search_url = eutils_basepath + 'esearch.fcgi?db=' + DB + \
'&retmode=json&retmax=' + RETMAX + \
'&sort=relevance&term=' + SEARCHTERM
# for additional search parameters or mor complex search terms see examples in
# https://www.ncbi.nlm.nih.gov/books/NBK25500/#chapter1.Searching_a_Database
# or the full doc under
# https://www.ncbi.nlm.nih.gov/books/NBK25499/#chapter4.ESearch
s = requests.Session()
r = s.get(search_url)
if r.status_code != 200:
raise ConnectionError("Search failed with error code " + str(r.status_code))
search_results = json.loads(r.text)
#show some statistics
print(f"{search_results['esearchresult']['count']} publications found.")
if RETMAX < search_results['esearchresult']['count']:
print(f"Warning: Only the first {RETMAX} publications are processed.")
# walk through all rerieved ids and fetch detailed publication information
# An alternative soloution could use one single query based on the previous search results as shown in
# https://www.ncbi.nlm.nih.gov/books/NBK25500/#_chapter1_Downloading_Document_Summaries_
# This would reduce the server load
histogram = Counter()
for pub_id in search_results['esearchresult']['idlist']:
#print(f"Fetching {pub_id}", end=" ") # uncomment for a more verbose versione
# Now build the fetch URL:
fetch_url = eutils_basepath + 'esummary.fcgi?db=' + DB + '&retmode=json&id=' + pub_id
r = s.get(fetch_url)
if r.status_code != 200:
raise ConnectionError(f"Fetching of publication {pub_id} failed with error code {r.status_code}")
# else: # uncomment for a more verbose versione
# print("...success!") # uncomment for a more verbose versione
fetch_result = json.loads(r.text)
authors = fetch_result['result'][pub_id]['authors']
if len(authors) == 1:
print(f"UID: {pub_id}, author: {authors[0]['name']}, title: {fetch_result['result'][pub_id]['title']}")
histogram[len(authors)] += 1
print("Histogram: (number of authors, number of papers with that many authors)")
print(sorted(histogram.items(), key=lambda x: x[0]))
Для запуска этого скрипта вам понадобится Python 3.6 или выше (пожалуйста, удалите f-строки для более ранних версий, и вы сможете установить «запросы» через файлы pip install requests
.
Сценарий ищет SEARCHTERM в pubmed и по поисковому запросу concrete
(мне нравится эта работающая шутка ;-)) выдает что-то вроде
14125 publications found.
Warning: Only the first 100 publications are processed.
UID: 28844248, author: Baroody AJ, title: The Use of Concrete Experiences in Early Childhood Mathematics Instruction.
UID: 28772472, author: Wang XY, title: Modeling of Hydration, Compressive Strength, and Carbonation of Portland-Limestone Cement (PLC) Concrete.
UID: 29159238, author: Paul SC, title: Data on optimum recycle aggregate content in production of new structural concrete.
UID: 27012788, author: Kovler K, title: The national survey of natural radioactivity in concrete produced in Israel.
Histogram: (number of authors, number of papers with that many authors)
[(1, 4), (2, 15), (3, 21), (4, 24), (5, 19), (6, 10), (7, 3), (8, 2), (10, 2)]
Модифицировать скрипт для других поисковых задач не должно быть слишком сложно...
Если есть вопросы по использованию скрипта, задавайте!
Дэйв Л. Ренфро
Откройте путь
Саймон
Кортик
Откройте путь
cactus_pardner
Откройте путь
Саймон
бараны