В данные момент проект развивается в двух направлениях:
- Классификация текстов на основании абстракта (или полного текста), и далее расчет метрик схожести и релевантности статей.
- Первым шагом на вход подается список rss рассылок, из которого получается список статей.
main/rss.py -> main/rssParser.py
- Далее в полученных статьях необходимо дозаполнить информацию о метаданных, где возможно вытащить текст.
main/findDOI.py ->
-> main/findJournal.py
-> main/ALT.py
-> main/Elsevier_plumX.py (в данный момент недоработана, так как нет четкого понимания, на каких условиях работает API elsevier)
-> main/parse_scihub.py (перед использованием нужно заполнить куки - просто один раз зайти на sci-hub через клинета (e.g. браузер) и пройти капчу) (NB: law issues)
- Далее на заполненных данных необходимо определить тему текста (oncology, infection, autoimmune, ophthalmology, chemical, genetic). Для этого используется фреймворк gensim, а также реализованная в нем модель LSI (см. дальнейшие предложения по улучшению main/prepData.py). Для этого мы используем вручную подготовленные стоп-слова, а также memory-friendly подход к тренировке, предложенный gensim. Модели тренируются по скаченной с PubMed выборки 75 000 текстов, которые были выкачены c ресурса по запросу соответствующему какой-либо теме (рак, генетические заболевания и пр.). [Паша напиши плиз пример запроса в pubmed для реплицируемости].
{$texts} -> main/stoplist.py -> main/prepData.py -> main/train_model.py -> Scientific_Search/models_lsi
- На данный момент заключительный этап -- применить модели к скаченной информации с рассылки rss. Так как, в нашем распоряжении не всегда полные тексты, в алгоритме заложена логика проверки на длину текста. Если,он меньше 40 знаков, определние топика идет по названию. Кроме этого, в скрипте заложен расчет ряда эвристик, которые помогают понять какие-либо сведения о статье (подробнее см. скрипт).
enhancment_words.py -> main/scores.py
Как итог, на выходе мы получаем таблицу, в которой строки -- это отдельная статья, у которой в следующих столбцах расчитаны эвристики, схожести, тема и пр. Подобная подход, помогает визуализировать каждую и статей в n-мерном пространстве.
Первый черновой вариант отрисовки скаттер плота: (TODO: добавить div окно для составления библиографии)
scatter/scatterPLot.ipynb
- Парсинг текстов используя SemRep (NIH). В данном случае основная сложность заключается с в установке фреймворка, а также налаживания полного цикла инфраструктуры. Перед запуском предполагается наличие развернутого Semrep вместе с Metamap, а также полного текста статей. Далее в алгоритме настроен поиск сущностей (NER), а также связей между ними. Найденные сущности в дальнейшем визуализируются в виде графа.
- Для начала на вход алгоритму подается текст статьи или в pdf или в txt. Если статья в pdf необходимо вызвать метод pdf(). Класс на выходе отдает таблицу. Если текстов больше 1, предпочтительнее использовать higherClass.py. На выходе, похожим образом получается общая таблица для всех текстов (TODO: добавить идентификаторы статьи).
main/SemRep_Class.py -> main/higherClass.py
- Далее таблица визуализируется в виде графа.
graphes/interactive_template.py
Подобный подход к анализу статей, позволяет больше сосредаточиться именно на содержании статей не читая их. Пользователю представляется чисто визуальная информация, с которой он дальше решает сам, как поступится.
- Выстроить общую инфрастуруктуру между всем файлами ("Собрать все вместе").
- Понять какие альтметрики нас интересуют (+ выкачать по набору журналов информацию о свежих статьях, их метаданные, альтметрики).
- Понять как использовать PlumX:
- Базовая документация
- Т.к. у PlumX нет собственного API, для доступа получаем apiKey от elsevier
- для доступа получаем access_token согласно правилам
- при таком запросе получаем 403 ошибку
import requests
s = requests.Session()
hh = {'X-ELS-APIKey':'cbe4c351033ad56d82e8c0e0009176aa'}
r = s.get('http://api.elsevier.com/authenticate?', headers=hh)
print(r.status_code)
s.close()
- Доработка интерактивной части визуализаций:
Скаттер плот:
- добавить дополнительная измерения (размер кругов, градиент)
- добавить div окно для того, чтобы "натыкать" бибилиографию.
Граф:
- исправить ошибки с неправильным количеством нодов и связей,
- добавить div окно для того, чтобы "натыкать" отчет для фармаконадзора,
- создание иерархического графа, где внутри узлов графа верхнего уровня находятся узлы графов нижнего уровня, отражающего взаимоотношения биомед. сущностей
- Включить в анализ статей анализ цитирований (сети цитирования \ ко-цитирования \ ссылки на них).
- Продумать и реализовать систему хранения проанализированных статей (Neo4j).
- Продумать систему взаимодействия с пользователем.
- Добавить препроцессинг текста - убрать нерелевантные фразы и символы, убрать библиографию, использовать стопслова.
- Формирование текста (документ) на основании найденных сущностей (utterance).
- Выкачка пробной выборки порядка 300-400 статей с sci-hub (для понимания ограничений).