API Mendeley (например, Python) – Изменить все заголовки на Прописные Слова

Вопрос или проблема

Я использую Mendeley в качестве менеджера ссылок. Общепринятая нотация для списка литературы в моей области работы — это Руководства APA (7-е издание). Эти руководства рекомендуют строковый регистр для названия работы в списке литературы.

Однако моя база данных Mendeley тем временем состоит из тысяч статей, которые названы не последовательно (некоторые в Заглавном Регистрe - Таким Образом Написано Как Пример, другие в строковом регистре, таким образом, обычное использование прописных и строчных букв). Вместо того чтобы вручную просматривать каждый из примеров, я подумал, что должна быть более умная решение.

Я знаю, что существует функция API Mendeley, а также библиотека Python для использования Mendeley API (здесь). Интересно, знает ли кто-то о готовом и открытом исходном коде Python скрипта, который:

  1. Помогает настроить API (Токен Доступа)
  2. Считывает вашу Библиотеку
  3. Изменяет все записи типа 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, чтобы получить необходимые учётные данные. Вот как можно приступить к этому:

  1. Регистрация приложения:

    • Перейдите по ссылке Mendeley Developers Portal.
    • Авторизуйтесь и зарегистрируйте новое приложение, указав такие данные, как redirect_uri и client_id.
  2. Установка библиотек:

    • Установите необходимые библиотеки, выполнив команды:
      pip install nltk
      pip install mendeley
  3. Настройка скрипта:

    • Импортируйте библиотеки Mendeley и nltk для работы с API и обработки строк соответственно.
    • Настройте аутентификационный поток для получения доступа к вашей библиотеке документов в Mendeley.
    • Важно: замените значения client_id, client_secret, username и password в скрипте на ваши собственные.
  4. Обработка и обновление заголовков:

    • Скрипт использует токенизацию предложений из библиотеки nltk, чтобы преобразовать заголовки документов в требуемый формат.
    • Обратите внимание, что автоматическая конверсия может превращать акронимы (например, BDI) в строчные буквы. Это следует учитывать и, возможно, переработать алгоритм для таких случаев.
    • В целях безопасности, перед внесением изменений, создайте резервную копию текущих заголовков.
  5. Предупреждение:

    • Изменения, вносимые с помощью этого скрипта, будут постоянными. Убедитесь, что вы действительно хотите провести такие изменения, прежде чем раскомментировать строку document.update(title=title).

В заключение, стоит отметить, что решение проблемы автоматизации конвертации заголовков с использованием Mendeley API существенно сэкономит ваше время и стандартизирует вашу библиотеку согласно требованиям вашего поля изучения. Однако обязательно учитывайте особенности вашего контента, чтобы избежать неуместных изменений, таких как преобразование акронимов.

Если у вас нет опыта в работе с API или программировании на Python, возможно, стоит обратиться к специалисту, который сможет помочь с этой задачей.

Оцените материал
Добавить комментарий

Капча загружается...