Виталий Федоров

Отслеживание цитирования статей с помощью Altmetric

Введение
В ходе разработки веб-сайта для Лондонского Института Математических Наук возникла необходимость отслеживания динамики цитирования публикуемых на сайте статей в других изданиях и упоминаний в медиа. Поскольку на сайте уже использовались значки Altmetric Donuts и Dimensions Badges, была рассмотрена возможность использования API, предоставляемого Altmetric при разработке виджетов для отображения истории обновления.

Задача состояла в получении данных обновлений, сохранения их в удобной для использования форме и вывода в список с группировкой по дате обновления.
Разработка виджета
Разработка началась с анализа предоставляемого API.
Обзор API
В запросах к API Altmetric и Dimensions используется цифровой идентификатор объекта (DOI). В случае успеха возвращается ответ в формате JSON.

Запросы к Dimensions metrics API выглядят следующим образом:
https://metrics-api.dimensions.ai/doi/<DOI>
https://metrics-api.dimensions.ai/pmid/<PMID>
https://metrics-api.dimensions.ai/id/<Dimensions ID>


Кроме DOI в запросе может использоваться PMID (PubMed ID - идентификатор статьи в англоязычной текстовой базе данных медицинских и биологических публикаций) либо Dimensions ID (идентификатор статьи в базе Dimensions).

Рассмотрим ответ Dimensions:
{
"doi": "10.1103/physrevmaterials.2.073804",
"times_cited": 0,
"recent_citations": 0,
"highly_cited_1": false,
"highly_cited_5": false,
"highly_cited_10": false,
"relative_citation_ratio": null,
"field_citation_ratio": null,
"license": "This data has been sourced via the Dimensions Metrics API, use of which is subject to the terms at https://dimensions.ai/policies/terms/metrics/. Any use by an unregistered organization is not authorized. Please contact info@dimensions.ai for further information."
}

Для работы виджета потребуется только один атрибут - "times_cited". Название говорит само за себя - общее количество цитирований статьи. Более подробно о возвращаемых параметрах вы можете узнать из справки.

Запрос к Altmetric выглядит следующим образом:
https://api.altmetric.com/v1/citations/<ID>
https://api.altmetric.com/v1/doi/
<DOI>

В запросе может быть использован DOI и идентификатор статьи в системе Altmetric.

Ответ Altmetric содержит значительно больше информации чем требуется, поэтому рассмотрим только фрагмент с нужными данными:

"cited_by_posts_count": 160,
"cited_by_msm_count": 5,
"cited_by_feeds_count": 1,
"cited_by_tweeters_count": 106,
"cited_by_fbwalls_count": 6,
"cited_by_accounts_count": 118,
"last_updated": 1531823409,
"score": 114.3,


Фрагмент содержит счетчики обновлений для разных источников, которые понадобятся для использования в виджете, дату последнего обновления в формате UNIX-времени и счет, расчитанный основе взвешенных значений счетчиков. Более подробную информацию можно получить из справки к API, а описание параметров из ответа из таблицы.
Оба API возвращают данные на текущий момент, а поскольку требовалось создание "истории" обновлений, было решено фиксировать изменения в собственном репозитории при ежедневном обновлении рейтингов Altmetric и Dimensions для статей. С данными Dimensions все просто - при обновлении заносилась новая запись с датой обновления в базу данных, если менялось значение счетчика "times_cited". Однако для виджета Altmetric требовалось указать также медиа-источник и количество упоминаний в источнике. Поскольку настолько подробной информации не предоставляется в некоммерческой версии API Altmetric, для этого была создана отдельная таблица:
Фрагмент таблицы с обновлениями Altmetric
Название столбцов в таблице соответствует названиям счетчиков из ответа Altmetric, однако в качестве временной метки используется дата фактического обновления данных о статье в нашем репозитории. Все что остается сделать - вывести статьи в список в нужном порядке и группировать по дате.
Примечание: в моем случае дополнительной сортировки не требовалось, я просто получал упорядоченные по убыванию значения updated данные из БД.
Возникшие сложности
Главным препятствием при разработке системы хранения данных стало не до конца понятное изменение значений счетчиков упоминаний Altmetric.
История изменения значений счетчиков
Обратите внимание на столбец by_tweeters: значение счетчика то уменьшается, то увеличивается, что приводит к появлению "ложных" обновлений. В списке упоминаний на странице статьи в Altmetric при этом не появляется дополнительных записей и не пропадают уже существующие. Возможно, это как-то связано с добавлением и удалением ретвитов.
Примечание: скорее всего, в коммерческой версии Altmetric API (т.н. "/fetch" API) данной проблемы не возникнет, так как она возвращает гораздо более подробный ответ, однако мне не довелось поработать с ней.
К сожалению, найти оптимального решения, позволяющего предотвратить попадание "ложных" упоминаний в список, пока так и не удалось.

В результате получились следующие виджеты:
Виджет "Citation updates" довольно прост и отображает дату последнего цитирования статей, полученную от Dimensions. Виджет "Online media updates" несколько интереснее - кроме даты упоминания он также содержит информацию о количестве и источнике упоминаний. Для обозначения источника используется цветовая маркировка - те же цвета, что и на значках Altmetric Donut, а при наведении выводится тайтл с пояснением.

Разработанные виджеты легко встраиваются, используя минимальный доступный уровень API, и уже функционируют на протяжении некоторого времени. В будущем будут изменены и оптимизированы как алгоритмы фильтрации данных, так, возможно, и внешний вид.
Спасибо за внимание!
BytePace © Все права защищены