Поиск статей, написанных определенным количеством авторов

Для какого-то конкретного исследования мне нужно найти по некоторым ключевым словам статьи, у которых есть только один автор. Я использовал PubMed, Scopus и ISI Web of Science, но в любом случае мне не удалось найти способ фильтровать результаты библиографического поиска по определенному количеству авторов или числу меньше некоторого точного количества авторов. Кто-нибудь знает, как это сделать с помощью упомянутых инструментов (PubMed, Scopus и ISI Web of Science) или других?

Для какого-то конкретного исследования --- Когда я начал читать ваш вопрос, я подумал, что речь идет об исследовании с использованием бетона ! (например, с точки зрения материаловедения, с точки зрения инженерного строительства, с точки зрения стоимости бизнеса и т. д.) Однако, когда я читал ваше второе предложение, я понял, что вы имели в виду. . .
в любом случае, это также может быть связано с научными исследованиями о бетоне, асфальте и т. д., почему бы и нет? и... актуально?
Я задал этот вопрос в чате, Ivvory Tower, но мой вопрос был о предмете, что-то вроде ключевого слова или конкретной темы, и я пошел в библиотеку, я имею в виду библиотекаря, там была какая-то конференция по сети знаний, и они также объяснили вашу тему в вопрос, но я забыл, так как это не было моей целью, дайте мне несколько дней, и я снова пойду в библиотеку, чтобы спросить об этом.
После быстрого поиска в Google: автор этой статьи ( arxiv.org/abs/1206.4863 ) утверждает, что «из 1,3 миллиона публикаций [...] 2011 [...] в базе данных Web of Science 89% содержали более чем один автор.", так что может быть стоит спросить его, как он получил это число, может быть, вы можете использовать его метод.
это хорошая идея, я спрошу его / ее
Какие вычислительные ресурсы есть в вашем распоряжении? Я подозреваю, что авторы в исследовании, упомянутом @DirkLiebhold, либо переборщили его (загрузили все метаданные публикаций, заставили программу подсчитать авторов и рассчитали распределение подсчетов), либо контакт в Web of Science запустил запрос.
да, может быть причина. и хороший подход. что я буду делать, так это просто загружать конкретные результаты моего поиска в формате CSV, а затем обрабатывать их в Excel для одной записи автора.
@flow вы пытались связаться с научной группой поддержки напрямую или ISI? они быстро отвечают
Если вас интересуют статьи по компьютерным наукам, DBLP может быть интересен ( dblp.uni-trier.de/statistics/numberofauthorsperpublication.html для быстрого подсчета). Коллекцию DBLP можно загрузить, и она достаточно мала для обработки в настольной системе.

Ответы (2)

PubMed имеет интерфейс, который вы можете вызвать из скрипта. Намерение разработать это именно ваш класс задач, которые не могут быть решены с помощью предоставленного пользовательского интерфейса.

Это главная страница NCBI Entrez API: https://www.ncbi.nlm.nih.gov/books/NBK25501/

Что вам нужно сделать, так это запросить PubMed по ключевым словам, например, это поиск по «бетону»:

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&retmode=json&retmax=100&sort=relevance&term=concrete

Сделайте несколько запросов, чтобы охватить ваше поле, например, вы также можете рассмотреть «кирпич» или «цемент».

Возвращает список публикаций. Для каждой публикации вам нужно будет проверить количество авторов и оставить их с одним автором. Для каждой публикации вы должны звонить:

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=29510510&retmode=json

Определите размер векторных «авторов» и оставьте только те, которые имеют размер один.

Можете ли вы рассказать о том, как определить размер векторных авторов?
извините за минус, это было совершенно непреднамеренно. Я изменю это как можно скорее!
@OUb нет проблем, я проголосовал за тебя, хорошая работа!

Основываясь на подсказке @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)]

Модифицировать скрипт для других поисковых задач не должно быть слишком сложно...

Если есть вопросы по использованию скрипта, задавайте!