Вопрос или проблема
Я использую Mendeley в качестве менеджера ссылок. Общепринятая нотация для списка литературы в моей области работы — это Руководства APA (7-е издание). Эти руководства рекомендуют строковый регистр
для названия работы в списке литературы.
Однако моя база данных Mendeley тем временем состоит из тысяч статей, которые названы не последовательно (некоторые в Заглавном Регистрe - Таким Образом Написано Как Пример
, другие в строковом регистре, таким образом, обычное использование прописных и строчных букв
). Вместо того чтобы вручную просматривать каждый из примеров, я подумал, что должна быть более умная решение.
Я знаю, что существует функция API Mendeley, а также библиотека Python для использования Mendeley API (здесь). Интересно, знает ли кто-то о готовом и открытом исходном коде Python скрипта, который:
- Помогает настроить API (Токен Доступа)
- Считывает вашу Библиотеку
- Изменяет все записи типа
article
илиbook-chapter
на строковый регистр.
Я могу заняться этой задачей, если такого нет, так как я не могу быть единственным человеком, сталкивающимся с этой проблемой.
Также это подходящее место для вопроса, или это больше подходит для Academia Stack Exchange?
Я разработал скрипт на Python, который может выполнить эту задачу. Важно сначала зарегистрировать скрипт на https://dev.mendeley.com/myapps.html, просто войти в систему, зарегистрировать приложение и обновить учетные данные в коде ниже.
Я отказался от его использования, потому что скрипт строго переводит все в строковый регистр, однако он игнорирует исключения, например, аббревиатуры для опросников (BDI для Beck Depression Inventory) будут преобразованы скриптом в “bdi”. В любом случае, если кто-то в будущем захочет это использовать, вот хорошая отправная точка.
Я использовал только две библиотеки, которые нужно установить заранее
pip install nltk
pip install mendeley
Для манипуляции строками я использовал, среди прочего, этот полезный ответ
from mendeley import Mendeley
import requests
import nltk.data
# требуется для капитализации
sent_tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
# Эти значения должны соответствовать тем, которые указаны при регистрации вашего приложения.
# под https://dev.mendeley.com/myapps.html
redirect_uri = "http://localhost:5000/oauth"
client_id = 1111 # пожалуйста, обновите
client_secret = "1jm12n2n2n3n2" # пожалуйста, обновите
mendeley = Mendeley(client_id, redirect_uri=redirect_uri)
auth = mendeley.start_implicit_grant_flow()
# Пользователь должен посетить этот URL и войти в Mendeley.
login_url = auth.get_login_url()
res = requests.post(login_url, allow_redirects = False, data = {
'username': '[email protected]', # пожалуйста, обновите
'password': 'urpassword' # пожалуйста, обновите
})
res.headers
auth_response = res.headers['Location']
# После входа в систему пользователь будет перенаправлен на URL, auth_response.
session = auth.authenticate(auth_response)
print(session.files.list().items)
# Переберите каждый документ в вашей библиотеке mendeley
for document in session.documents.iter():
# Раскомментируйте ниже, чтобы увидеть все заголовки и идентификаторы
# print(document.id)
# print(document.title)
title = document.title
# Заметьте, я бы рекомендовал сделать резервную копию старых заголовков, например, сохранив все ID и заголовки в датафрейм и сбросив их как .csv файл
title = document.title
sentences = sent_tokenizer.tokenize(title)
sentences = [sent.capitalize() for sent in sentences]
title=" ".join(sentences)
# Капитализация после :
ind = title.find(":")
if ind != -1:
first = title[:ind]
second = title[ind + 1:].strip().capitalize()
title=": ".join([first, second])
# Капитализация после "- "
ind = title.find("- ")
if ind != -1:
first = title[:ind]
second = title[ind + 1:].strip().capitalize()
title="- ".join([first, second])
ind = title.find("– ")
if ind != -1:
first = title[:ind]
second = title[ind + 1:].strip().capitalize()
title="- ".join([first, second])
# ВНИМАНИЕ: ЕСЛИ РАССМОТРЕТЬ НИЖЕ, ЭТО ИЗМЕНЯЕТ ЗАГОЛОВОК ДОКУМЕНТА В ВАШЕЙ БИБЛИОТЕКЕ MENDELEY ПОСТОЯННО
# document.update(title=title)
Ответ или решение
Используя Mendeley как менеджер ссылок, вы столкнулись с проблемой, когда названия работ в вашей базе данных не соответствуют требованиям наставлениями APA (7-е издание), которые рекомендуют использовать «Sentence case» для заголовков. Решение этой проблемы вручную может занять много времени, особенно если ваши записи уже насчитывают несколько тысяч статей. К счастью, Mendeley API и библиотека на Python предоставляют возможность автоматизации этой задачи.
Настройка и использование Mendeley API с Python
Для начала важно зарегистрировать свое приложение на платформе разработчиков Mendeley, чтобы получить необходимые учётные данные. Вот как можно приступить к этому:
-
Регистрация приложения:
- Перейдите по ссылке Mendeley Developers Portal.
- Авторизуйтесь и зарегистрируйте новое приложение, указав такие данные, как
redirect_uri
иclient_id
.
-
Установка библиотек:
- Установите необходимые библиотеки, выполнив команды:
pip install nltk pip install mendeley
- Установите необходимые библиотеки, выполнив команды:
-
Настройка скрипта:
- Импортируйте библиотеки
Mendeley
иnltk
для работы с API и обработки строк соответственно. - Настройте аутентификационный поток для получения доступа к вашей библиотеке документов в Mendeley.
- Важно: замените значения
client_id
,client_secret
,username
иpassword
в скрипте на ваши собственные.
- Импортируйте библиотеки
-
Обработка и обновление заголовков:
- Скрипт использует токенизацию предложений из библиотеки
nltk
, чтобы преобразовать заголовки документов в требуемый формат. - Обратите внимание, что автоматическая конверсия может превращать акронимы (например, BDI) в строчные буквы. Это следует учитывать и, возможно, переработать алгоритм для таких случаев.
- В целях безопасности, перед внесением изменений, создайте резервную копию текущих заголовков.
- Скрипт использует токенизацию предложений из библиотеки
-
Предупреждение:
- Изменения, вносимые с помощью этого скрипта, будут постоянными. Убедитесь, что вы действительно хотите провести такие изменения, прежде чем раскомментировать строку
document.update(title=title)
.
- Изменения, вносимые с помощью этого скрипта, будут постоянными. Убедитесь, что вы действительно хотите провести такие изменения, прежде чем раскомментировать строку
В заключение, стоит отметить, что решение проблемы автоматизации конвертации заголовков с использованием Mendeley API существенно сэкономит ваше время и стандартизирует вашу библиотеку согласно требованиям вашего поля изучения. Однако обязательно учитывайте особенности вашего контента, чтобы избежать неуместных изменений, таких как преобразование акронимов.
Если у вас нет опыта в работе с API или программировании на Python, возможно, стоит обратиться к специалисту, который сможет помочь с этой задачей.