МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение
высшего образования
«ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
ИНСТИТУТ МАТЕМАТИКИ И КОМПЬЮТЕРНЫХ НАУК
Кафедра программного обеспечения
Заведующий кафедрой
к.т.н., доцент
М.С. Воробьева
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
магистра
РАЗРАБОТКА И ПРОГРАММНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМОВ
ИЗВЛЕЧЕНИЯ ИМЕНОВАННЫХ СУЩНОСТЕЙ ИЗ ПРОТОКОЛОВ
ОСМОТРА ЭЛЕКТРОННОЙ ИСТОРИИ БОЛЕЗНИ
02.04.03 Математическое обеспечение и администрирование
информационных систем
Магистерская программа«
Разработка, администрирование и защита
вычислительных систем
»
Выполнил работу
студент 2 курса
очнойформы обучения
Гайдук Павел Юрьевич
Научный руководитель
Доктор педагогических наук,
профессор
Захарова Ирина Гелиевна
Рецензент
Заведующий сектором системного
администрирования ГАУ ТО
«МИАЦ»
Панфиленко Дмитрий Витальевич
Тюмень
2020
ОГЛАВЛЕНИЕ
Введение
3
Г
ЛАВА 1. О
БЗОР
ПРОБЛЕМ
ИЗВЛЕЧЕНИЯ
ИМЕНОВАННЫХ
СУЩНОСТЕЙ
ИЗ
ПРОТОКОЛОВ
ОСМОТРАЭ
ЛЕКТРОННЫХМЕДИЦИНСКИХ
КАРТ
6
1.1. А
НАЛИЗС
ОВРЕМЕННОГОСОСТОЯНИЯ
ИССЛЕДОВАНИЙ
В
ОБЛАСТИ
ЗДРАВООХРАНЕНИЯ
6
1.2. М
ЕТОДЫИ
ЗВЛЕЧЕНИЯИ
МЕНОВАННЫХСУЩНОСТЕЙИ
ЗЭМК
7
1.2.1.
Способы
решения
именованных сущностей
задачи
извлечения
7
1.2.2. Методы извлечения именованных сущностей
из ЭМК
10
Г
ЛАВА2. М
ЕТОДЫ
ИЗВЛЕЧЕНИЯ
ИМЕНОВАННЫХ
СУЩНОСТЕЙ
ИЗ
ПРОТОКОЛОВ
ОСМОТРА
2.1. Описание данных
2.2. Артериальное давление
2.3. П
ОЛП
АЦИЕНТА
2.4. Л
ЕКАРСТВА, В
ЫПИСАННЫЕП
АЦИЕНТУ
2.5. И
ШЕМИЧЕСКАЯБ
ОЛЕЗНЬСЕРДЦА
2.6. В
ИЗУАЛИЗАЦИЯД
АННЫХ
13
13
14
16
19
23
34
З
АКЛЮЧЕНИЕ
39
С
ПИСОК
ЛИТЕРАТУРЫ
40
Приложение 1
45
Приложение 2
48
Приложение 3
49
2
Введение
В настоящее время современные медицинские информационные системы
(МИС)
используются
в
качестве
основы
для
системы
электронного
документооборота в здравоохранении. МИС осуществляет автоматическую
генерацию
необходимых
отчетных
документов
и
обеспечивает
контролируемый доступ к данным пациента и персоналу медицинского
учреждения. Для научных исследований биомедицинские данные в том виде, в
котором они хранятся в МИС, не представляют особой ценности, поскольку не
существует адекватных инструментов для их обработки.
Предварительный
проектирования
обеспечивается
и
анализ
разработки
данных
имеет
хранилища
структурированность,
особое
значение
информации,
правильность
и
в
для
котором
согласованность
хранимых биомедицинских данных. Цель анализа - определить неочевидные
связи
и
закономерности,
необходимые
для
извлечения
объективной
информации.
Наибольшей ценностью обладают данные, содержащиеся в электронных
медицинских картах(ЭМК). Электронная медицинская карта - медицинская
карта пациента медицинского учреждения в электронной форме. Основная
проблема при работе с ЭМК заключается в неоднородности данных,
содержащихся в них. Данные могут быть структурированными(результаты
лабораторных исследований, результаты биохимического анализа крови), так и
частично структурированными или неструктурированными(протокол осмотра
пациента).
Поэтому разработка инструментов извлечения данных является одним из
перспективных направлений для информационной поддержки биомедицинских
исследований. Важную роль в этом контексте играет анализ данных ЭМК,
которые вместе определяют цифровой отпечаток пациента. Основываясь на
3
цифровом отпечатке, можно определить закономерности изменений состояния
здоровья, особенно течения заболеваний, эффективности назначенного лечения
и, как следствие, формирования цифрового фенотипа пациента.
Данные ЭМК также позволяют оценить качество медицинской помощи,
адекватность и своевременность медицинских рекомендаций. В то же время
основная задача извлечения достоверной информации из неструктурированных
данных ЭМК (прежде всего, протоколов обследования пациентов) не имеет
универсальных решений, так как клинические тексты на русском языке не
стандартизированы. Поэтому для получения необходимых данных необходимо
использовать подходы, связанные с извлечением именованных сущностей.
Извлечение именованных сущностей (Named Entity Recognition) является
подзадачей извлечения информации, которая стремится найти именованную
сущность, упомянутую в неструктурированном тексте, и определить ее в
заранее обозначенные категории, такие как имена людей, организации,
медицинские коды, даты, количественные показатели и т. д.
В данной работе рассматривается несколько подходов для определения и
извлечения именованных сущностей из ЭМК.
Таким образом, целью выпускной квалификационной работы является
разработка и программная реализация методов извлечения именованных
сущностей из данных ЭМК.
Задачи:
● Исследование
методов
извлечения
именованных
сущностей
из
неструктурированных данных электронных медицинских карт.
● Разработка и программная реализация алгоритмов получения данных по
артериальному давлению из текстов протоколов осмотра
● Разработка и программная реализация алгоритмов извлечения имен,
фамилий и отчеств из текстов протоколов осмотра для определения пола
пациента.
4
● Разработка
и
программная
реализация
алгоритмов
ишемических болезней сердца из текстов протокола осмотра.
5
получения
Глава 1
.Обзор проблем
извлечения именованных
сущностей из протоколов осмотра
электронных медицинских карт
1.1. Анализ современного состояния исследований в области
здравоохранения
Научные исследования в сфере здравоохранения на начальном этапе
преимущественно были направлены на решение задач упорядочения и
оптимизации организационной и управленческой деятельности в лечебных
учреждениях, расходования бюджетных средств, выделяемых на лечение
пациентов, т.к. информатизация медицины связывалась с оснащением
медицинских
организаций
вычислительной
техникой
и
программным
обеспечением для МИС.[1-7]
Но основным этапом в развитии сферы здравоохранения в РФ является
создание
единой
государственной
информационной
системы
в
сфере
здравоохранения. Главным принципом создания данной системы является
обеспечение совместимости МИС, что подразумевает введение некоторого
стандарта на медицинские записи по аналогии с международными стандартами
HL7 и openEHR [8-9]. Шаги, сделанные в направлении стандартизации,
послужили стимулом для создания электронных архивов, интегрирующих
данные, которые востребованы как для практической медицины, так и для
медико-биологических исследований. Создание и поддержка электронных
архивов потребовали исследования новых научных проблем в области
извлечения данных из медицинских записей и их интерпретации [10, 11].
В исследованиях, посвященных максимально полному учету данных
ЭМК для прогнозирования различных, в том числе сердечно-сосудистых,
6
заболеваний, представлены два основных подхода, основанных на методах
искусственного интеллекта.
1) Построение прогностических моделей на основе формальных правил,
отражающих известные значения критериев и зависимости показателей,
которые непосредственно определяют состояние пациента в исследованиях
Rapsomaniki et al. [12], Miotto et al. [13] Choi et al. [14].
2) Использование данных ЭМК для построения прогностических моделей
на основе методов интеллектуального анализа данных, технологии больших
данных и нейронных сетей, как, в частности, в исследованиях Ravı et al. [15],
Shickel et al. [16].
Оба
подхода
требуют
извлечения
достоверной
информации
непосредственно из текстов протоколов осмотра, включенных в ЭМК. Luo et
al. [17], Kreimeyer et al. [18], Névéol et al. [19] отмечают объективность
существования большого количества систем обработки медицинских записей
на естественном (английском) языке (NLP, Natural Language Processing) и
возможность учета этого опыта при разработке аналогичных систем для текстов
на
других
языках.
Исследователи
неоднократно
отмечали
сложность
интерпретации клинических текстов на русском языке. подчеркивают, что
извлечение достоверной информации, связанной с конкретными именованными
объектами записей ЭМК, является принципиально важной проблемой, которая
еще не нашла универсального решения.[20-22]
1.2. Методы извлечения именованных сущностей из ЭМК
1.2.1. Способы решения задачи извлечения именованных сущностей
Обработка естественного языка - отрасль информатики, лингвистики и
области искусственного интеллекта, посвященная изучению алгоритмов
компьютерного анализа естественного (человеческого) языка. Существует
широкий спектр задач, которые решает NLP.
7
Вот некоторые из них:
● машинный перевод - автоматический перевод текста с одного языка на
другой;
● классификация текстов - определение тем, определенных текстом;
● автоматическое реферирование - создание краткого содержания текста на
его основе;
● анализ тональности текста - определение эмоциональной окраски;
● синтаксический анализ - построения дерева составных элементов текста;
● перевод разговорной речи в текст;
● вопросно-ответные системы;
● извлечение именованных сущностей[23]
Извлечение именованных сущностей - задача извлечения объектов из
текстовых документов, которые относятся к заранее определенным категориям.
Чаще всего требуется распознавание следующих сущностей:
● имена людей
● организации
● медицинские коды
● даты
● количественные показатели
NER может выступать в качестве вспомогательного механизма, например,
для машинного перевода, когда необходимо перевести группу слов, которая
является названием организации. В этом случае переводом будет целая группа
слов, а не каждое в отдельности.
Извлечение именованных сущностей используется для структурирования
неструктурированных данных.
8
Решению любой задачи NLP предшествует набор операций, выполняемых
над текстом, необходимых для дальнейшей работы с более узко направленными
алгоритмами.
для обработки языка применяются следующие шаги:
• грамматический анализ (сегментация) - разбиение документа на
предложения, а предложение на слова (токены);
• морфологический анализ - выделение основы слова, определение
характеристик слова, таких как часть речи, пол, число, падеж и т.д.;
• синтаксический анализ - выявление синтаксических связей слов в
предложении и синтаксической структуры предложения;
• семантический анализ - определение семантических отношений в
тексте.
Использование этих шагов зависит от поставленных задач. В случае NER
семантический и синтаксический анализы являются необязательными. Однако
могут потребоваться, чтобы разрешить спорные моменты в анализе.
Существует несколько подходов к решению проблемы NER:
• описанные вручную наборы правил;
• статистические модели (машинное обучение);
Основанный на правилах подход заключается в том, чтобы описать
необходимую лингвистическую информацию в формализованном виде. В
качестве такой информации выступают определенные морфологические
характеристики слова, позиции слова в словосочетании.[24, 25]
Этот подход является наиболее точным и достаточно продуктивным. Тем
не менее, он часто уступает в покрытии всех возможных случаев из-за
постоянно меняющегося языка текстов или наличия ошибок, не описанных
9
правилами. Кроме того, создание правил требует большого количества
человеко-часов и часто участия квалифицированных лингвистов.
При использовании машинного обучения источником необходимой
информацией для анализа является набор текстов. Методы этого подхода:
обучение с учителем; обучение без учителя; и метод частичного обучения с
учителем.
Чаще других используется обучение с учителем, в которой создается
классификатор, способный определять различные классы объектов в тексте.
Классификатор строят на основе размеченных текстовых корпусов.[26]
Машинное обучение не требует трудоемких правил, но требует хорошего
понимания концепции и точности выбора методов обучения. Полученные
классификаторы непрозрачны для интерпретации. Основным недостатком
является необходимость большого количества размеченного текста.
Выбор подхода зависит от различных факторов:
• сложность искомых сущностей;
• наличие большого набора данных, в том числе размеченных;
• требования к скорости, полноте, качеству.
Сравнение эффективности различных подходов и даже их реализации
можно рассматривать только в том случае, если они решают одну и ту же
проблему в одной отрасли / тематической области. Эти условия важны, потому
что NLP является инструментом для выполнения одной задачи с данными,
определенными в четко обозначенной области.
1.2.2. Методы извлечения именованных сущностей из ЭМК
Решение проблем нормализации и стандартизации данных ЭМК,
предоставляемых различными МИС, представлено в работах по проекту
SHARPn (Проекты передовых исследований ИТ в области стратегического
10
здравоохранения), проведенных Rea et al. [27], Pathak et al. [28]. Эти
исследования
подчеркивают
важность
переиспользования
собранной
информации не только для улучшения качества лечения, но и для проведения
исследований
и
мониторинга
на
уровне
национальной
системы
здравоохранения. Авторы определяют стандартизацию БМД как наиболее
важную цель и предлагают архитектуру платформы, которая предоставляет
услуги обмена данными между различными организациями, хранение и
извлечение структурированных данных из текстов ЭМК различных форматов с
использованием инструментов Apache cTAKES, а также преобразование в
стандартную терминологию. Однако, как показано Peek et al. [29], Hripcsak et al.
[30] существуют проблемы, связанные с особенностями перехода к новым
методам анализа данных (требования к безопасному распределенному
хранению и обработке данных), а также с возможными отклонениями и
неправильностью исходной БМД. Все это, естественно, определяет точность
возможных классификационных или прогнозных моделей и других выводов.
Wang et al. [31], Luo et al. [32] показывают, что другим важным аспектом
извлечения данных ЭМК является структурная сложность,
определяющую
взаимосвязь между данными обследования и предписаниями с учетом
хронологии
и
других
особенностей.
Это
определяет
необходимость
использования методов машинного и обучения и неройнных сетей уже на этапе
извлечения и предварительного анализа данных ЭМК (Luo et al. [33], Wang et al.
[34]). Кроме того, создание систем, характеризующих различные группы
заболеваний, играет наиболее важную роль для правильного извлечения
данных при интерпретации ЭМК, их классификации и построении моделей
прогнозирования (Haendel et al. и др. [35], Gribova V.V. et al. [36]).
Выводы к главе
11
В данной главе были изучены подходы, , предложенные для решения,
задачи извлечения именованных сущностей из протоколов осмотра пациентов
ЭМК.
Проведенный анализ литературы позволил сделать следующие выводы:
● Для извлечения именованных сущностей из неструктурированных
текстов протоколов осмотра наиболее правильными подходами являются
алгоритмы, основанные на машинном обучение/нейронных сетях
● На данный момент отсутствуют готовые решения для извлечения
именованных сущностей из текстов на русском языке
● Для извлечения именованных сущностей необходимы размеченные
выборки данных
Полученные выводы в ходе анализа литературы говорят о том, что
алгоритмы извлечения именованных сущностей необходимо разбить на 2 типа:
1. Алгоритмы извлечения именованных сущностей для первоначальной
разметки текстов протоколов осмотра пациентов
2. Алгоритмы извлечения именованных сущностей основанные
машинном обучение, использующие результаты алгоритмов 1го типа
12
на
Глава 2.Методы извлечения
именованных сущностей из
протоколов осмотра
2.1. Описание данных
Исходные данные включают более 70 000 записей ЭМК.
При
выгрузке
медицинские
записи
(результаты
лабораторных
исследований, описания ультразвуковых исследований и ЭКГ, протоколы
исследований и т.д.) хранятся в отдельных файлах XML. Файлы можно
разделить на 3 типа в зависимости от хранящихся в них данных: табличный,
частично структурированный текст и неструктурированный текст.
Табличные файлы имеют четкую структуру с конкретными именами
полей и формируются, как правило, по результатам лабораторных анализов
(анализы крови, мочи и т.д.). Каждый из этих файлов содержит название
исследуемого параметра, результат измерения, единицы измерения, пределы
нормы значения исследуемого параметра, дату измерения, место проведения
анализов, имя лица, ответственного за данную лабораторию. Один файл может
содержать результаты измерений нескольких показателей.
Частично структурированные текстовые файлы содержат как поля с
определенными значениями так и поля, содержащие текстовую информацию в
произвольной формате. К таким файлам относятся результаты ЭКГ и УЗИ.
Файлы этого типа могут различаться по структуре. Например, некоторые из них
могут содержать только данные обследования, структура которых аналогична
структуре лабораторных анализов (например, значения ЭКГ), а другие - мнение
врача, представленное в частично структурированном тексте.
Файлы, относящиеся к третьему типу, содержат протоколы осмотра
пациентов в виде неструктурированного текста, может содержать заключение и
рекомендации врача, дополнительные данные (артериальное давление, вес,
13
курение, употребление крепкого алкоголя, наследственность и т.д.). Протокол
осмотра может содержать диагноз. Но диагноз может быть записан как в
соответствии с Международной классификацией болезней (МКБ-10), так и
совершенно произвольно (например, I25, ИБС, ишемическая болезнь сердца,
хроническая
ишемическая
болезнь
сердца). Кроме того, информация,
содержащаяся в протоколах осмотров, требует проверки. Это связано с тем, что
протокол записывается на основе шаблонов с некоторыми предварительно
введенными данными, которые врач может случайно оставить без изменений,
хотя фактическое состояние пациента может отличаться. Общим было то, что
файлы всех типов изначально содержали личные данные (фамилия, имя,
отчество пациента и медицинского работника, дата рождения пациента, адрес),
представленные в полной или сокращенной / искаженной форме, которые
определяли нетривиальность методов обезличивания информации. Именно для
протоколов
осмотра
пациента
разрабатываются
алгоритмы
извлечения
именованных сущностей.
2.2. Артериальное давление
Начальные данные были представлены в виде xml-файлов. Далее они
были разобраны и загружены в СУБД Postgresql. При работе использовались
записи, сохраненные в СУБД.
После
первичного
анализа
были
выявлены
паттерны
записи
артериального давления в протоколе осмотра. Наиболее часто встречающимися
вариантами являются следующие: “АД:120/80 мм.рт.ст.”, “АД: 120 и 80
мм.рт.ст.”. Менее распространенной формой записи является: ”САД/ДАД:
120/80”. При просмотре протоколов также было выявлено, что знаки
пунктуация, пробелы сильно варьируются. Были выявлены следующие
пунктуационные знаки: “\”, “=”, “-”, “_”. Приведенные знаки могут
отсутствовать. В качестве разделителя значений давления в некоторых записях
выступала русская буква “х”. При поиске вариантов написания, а также поиске
14
протоколов
осмотра,
содержащих
данные об артериальном давлении,
использовалась строка “АД”.
Для
получения
регулярное
значений
выражение,
функционала
которое
артериального
затем
СУБД.
было
давления было создано
применено
посредством
Регулярное
выражение:
“(((\d\s)|\.|,|;|\n|(°)*С|:)(\s)*(АД|(САД/ДАД))(\s)*(:|-|=|–)*(\s)*(_)*\d{2,3}(\s)*(-|\.|\\|
/|(\s*\w\s*))(\s)*\d{2,3})”.
Как
видно
из
выражения,
идентифицируется
не
пунктуационными
знаками
только
и
запись
названием
буквами,
артериального
и
но
числами,
также
давление
разделенными
и
символами
предшествующими (АД|(САД/ДАД)). Данный параметр добавлен, т.к. в
протоколе осмотра может присутствовать несколько записей об артериальном
давлении. Обычно перед такими записями расположены следующие слова и
фразы:
“На
момент
осмотра”,
“привычное”,
“лет
назад”,
“статус”,
“нестабильное” и т.д. Такие записи не рассматриваются в связи с
недостаточной информацией о природе таких артериальных давлений. Записи
типа “АД через 20 минут 120 и 80”, “С максимальными цифрами АД до 160”,
“АД в положении сидя: правая рука 120 мм.рт.ст. левая рука: 118/80” и т.д.
также не рассматривались.
Количество записей протоколов осмотра, содержащих строку “АД”
составляет 25970. После применения регулярного выражения, количество
записей с полученными значениями артериального давления составило 24748.
Количество записей содержащих АД, но из которых не удалось получить
информацию об артериальном давлении составило 1222, что составляет около
5% от общего числа записей протоколов осмотра. Такую потерю можно
объяснить исходя из выше перечисленных условий отбора, а также тем, что
некоторые записи не хранят значений артериального давления и попадают в
выборку за счет словосочетания “Контроль АД”.
15
Подход, основанный на регулярных выражениях также был использован
для извлечения других количественных параметров (АЛТ, АСТ и т.д.).
2.3. Пол пациента
Для получения данных о поле пациента была рассмотрена выборка из
5767 записей протоколов осмотра. В этих записях отсутствует явное указание
пола пациента, поэтому для его определения необходимо использовать
фамилию, имя и отчество. В связи с этим задача разбивается на 2 этапа:
нахождение Ф.И.О. и определение пола по Ф.И.О.
Наибольшей проблемой является обнаружение Ф.И.О. Сложность
заключается в следующем:
1. В документе врачи пишут Ф.И.О. пациента в различных местах,
при этом часто отсутствует явное указание, что это Ф.И.О.
пациента
2. Существует несколько форм записи Ф.И.О.: Фамилия и инициалы,
полное Ф.И.О., фамилия и имя.
3. В протоколе осмотра указываются Ф.И.О. не только пациента, но и
врача.
Для первичного анализа и дальнейшего получения Ф.И.О была
разработана программа на языке Python с использованием библиотек nltk и
pymorphy2.
Nltk
использовался
для
токенизации
текста.
Pymorphy2
использовался в качестве морфологического анализатора. Pymorphy2 для
разбора использует OpenCorpora - открытый корпус русского языка. Для
морфологического анализа также была рассмотрена библиотека Natasha. При
сравнительном анализе она показала себя хуже. Это объясняется тем, что для
разбора она также использует OpenCorpora, а для определения именованной
сущности использует ограниченный список грамматик и словарей, что делает
ее менее гибкой при работе со специфическими форматами записи.
16
После первичного анализа записей протоколов была выявлена одна из
наиболее часто встречающихся форм записей Ф.И.О. пациента: “Пациент:
Петров Петр Петрович”. Необходимо отметить, что запись Ф.И.О. имела
разные формы. Поэтому для записей такого типа использовался следующий
алгоритм:
1. Токенизация записи (nltk)
2. Нахождение слова “Пациент”
3. Выбор следующих 3х слов
4. Определение типа слов (pymorphy2. Выбирались формы в
именительном падеже) и сохранение подходящих
5. Определение рода слов
Таблица 1. Результаты разбора протоколов
вероятность
вероятность
имя
Неправильно
неправильно
ошибки ошибки
определен пол
определить пол
фамилия
отчество
количество
0
0
4557
0
1
5
5
1
5
1
1
0
178
8
0,044943
8
0,04494382022
1
1
1
0
0
0
0
0
0
180
19
0,105555555 4
0,02222222222
0
1
12
8
0,666667
2
0,1666666667
1
0
755
0
0
0
0
1
1
79
7
0,088607594 0
0
Стоит отметить, что пол брался от значения имени, если его не было, то
значения фамилии. Ошибки:
1. Неправильное определением отчеств. Вместо них получались
фамилии с окончанием на -вич.
17
2. Неправильное определение иностранных Ф.И.О.
3. Отсутствие определения для несклоняемых фамилий
Результаты показывают, что наиболее точно можно определить пол по
имени и фамилии. Это связано с тем, что отчества практически не
используются.
Оставшиеся 4,5 тыс. записей потребовали иного подхода. В данных
записях отсутствовало явное обозначения врача и пациента, как в предыдущем
случае. Поэтому первичный анализ проводился посредствам регулярного
выражения: “\w+\s\w\.\s*\w\.”. Из 4557 записей было найдено 1586 совпадений с
регулярным выражением. Стоит отметить что под данное выражения подходят
не только Ф.И.О., но и другие словосочетания. В силу ограничений регулярного
выражения
можно
получить
только
фамилии.
Но
в
записях могут
присутствовать как Ф.И.О врача, так и Ф.И.О пациента. Вследствие чего путем
эмпирического
определить
исследования
является
ли
была
разработана
фамилия
фамилией
метрика,
позволяющая
пациента.
Метрика,
text.indexOf(слово) - индекс слова в массиве токенов text, len(text) - количество
токенов:
1. Если в записи присутствует ключевое слово [“Подпись”, “Врач”,
“Исполнитель”, “Вр”]:
a. O = text.indexOf(Ключевое поле)
b. Distance = |O - text.indexOf(фамилия)|
2. Если в записи отсутствует ключевое слово [“Подпись”, “Врач”,
“Исполнитель”, “Вр”]:
a. O = len(text) / 2
b. Distance = O - text.indexOf(фамилия)
Допустимым расстоянием было взято расстояние больше 5. Такая
метрика обусловлена нахождением имени врача ближе к ключевым словам,
либо к концу записи.
18
Поэтому был разработан следующий алгоритм:
1. Выбор протокола осмотра, который содержит словосочетания,
подходящие под регулярное выражение
2. Получение всех словосочетаний, подходящих под регулярное
выражение
3. Токенизация записи
4. Определение типа слов (pymorphy2. Выбирались формы в
именительном падеже) и выбор слов с подходящим типом
5. Расчет расстояний для полученных слов
6. Сохранение слов с допустимыми расстояниями
В итоге из 1586 записей было получено 194 фамилии из которых
фамилиями пациентов оказались 180. Из них правильно пол определился у 165.
2.4. Лекарства, выписанные пациенту
Для
получения
данных
о
лекарствах
назначенных
пациенту
первостепенной задачей было получить словарь названий лекарственных
препаратов. В результате поиска не было обнаружено подходящих цифровых
форматов справочников лекарственных препаратов.
Единственный справочник, который можно загрузить был на сайте
Министерства Здравоохранения Российской Федерации. Справочник в виде
таблицы можно выгрузить в форматах csv, xml, json. В таблице представлены
следующие поля: Номер регистрационного удостоверения лекарственного
средства, Дата регистрации лекарственного средства, Дата окончания действия
регистрационного удостоверения, Дата аннулирования регистрационного
удостоверения, Юридическое лицо, на имя которого выдано регистрационное
удостоверение, Страна производства, Торговое наименование лекарственного
средства, Международное непатентованное или химическое наименование
лекарственного средства, Формы выпуска, Сведения о стадиях производства,
19
Штрих-коды
потребительской
упаковки,
Нормативная
документация,
Фармако-терапевтическая группа.
Проблема извлечения названия лекарственных препаратов заключается в
отсутствии названия Торгового наименования. Названия можно получить из
поля Нормативная документация. Но данное поле содержит лишнюю
информацию, которая, как в дальнейшем показали исследования, затрудняет
поиск в текстах протоколов осмотра, но при этом лишние данные в
нормативной документации невозможно отфильтровать автоматически.
Поэтому было принято решение составить справочник лекарств на основе
открытых источников информации. В качестве таких источников были
выбраны
сайты:
Лекарственных
Яндекс
Средств
Здоровье(
https://yandex.ru/health
)
России
(РЛС,
https://www.rlsnet.ru/
).
и
Реестр
В
виду
ограничений на количество запросов со стороны ресурса Яндекс Здоровье, в
качестве источника был выбран сайт РЛС.
Для
написания
парсера
сайта
РЛС
был
использован
язык
программирования Python и библиотека Scrapy. В результате работы парсера
был получен справочник медицинских препаратов в виде таблицы, хранящейся
в csv-файле, содержащий 13796 записей.
Поиск на основе словаря
Для поиска на основе словаря было рассмотрено несколько подходов.
Первый
подход
—
прямой
поиск.
Смысл
подхода
заключается
в
токенизации(разбиение текста на отдельные слова) текста протокола осмотра и
проверки попадания слова из текста в словарь лекарств. Данный подход
является наиболее точным в смысле нахождения названия лекарств внутри
протокола осмотра, а также наиболее быстрым. Скорость обусловлена
небольшим количеством слов внутри текста протокола осмотра относительно
размера словаря(13796), а сам словарь можно разместить внутри структуры
данных set, что позволяет обеспечить время поиска элемента в словаре без
20
учета времени сравнения строк- log(N). N — количество элементов словаря. Но
минусом является требование к строгому равенству между словом из текста и
названием лекарства из словаря, что лишает алгоритм гибкости при поиске. В
текстах протоколов осмотра были обнаружены различные написания названий
лекарств. Различия в написании часто связаны с отсутствием пробелов, либо
наличием лишних пробелов. Реже встречаются опечатки в названиях лекарств.
В результате в выборке из 1000 протоколов осмотра было найдено 1037
названий лекарственных препаратов
Второй подход является одним из вариантов прямого поиска. Исходя из
полученных результатов прямого поиска, а именно: названия чаще всего имеют
пробелы, был разработан метод, использующий поиск подстроки. Алгоритм
заключается в следующем: из текста удаляются все пробелы, а затем название
лекарства ищется как подстрока протокола осмотра. Данный метод показал
более медленное время работы, так как теперь поиск лекарства в тексте
занимает N, где N — количество записей в словаре. Но преимущество данного
способа
заключается
в
нахождении
большего
количества
названий
лекарственных препаратов, так как проблема пробелов устраняется. Но в связи
с тем, что названия заболеваний и лекарств часто имеют похожие основы слов,
то появляется дополнительная проблема ложных вхождений названий лекарств.
Например «НЕБНЫЕ МИНДАЛИНЫ НЕ УВЕЛИЧЕНЫ» содержит в себе
подстроку «МИНДАЛИН», что соответствует названию лекарства. Ложные
вхождения составили около 81% от 48464 найденных лекарственных
препаратов на выборке из 1000 протоколов осмотра. Но при анализе
результатов было получено 25 названий лекарств, которые чаще всего
относятся к ложным вхождениям.
Третий подход использует нечеткий поиск на основе расстояния
Левенштейна. Расстояние Левенштейна -
метрика
, измеряющая разность между
двумя последовательностями символов. Она определяется как минимальное
21
количество односимвольных операций (а именно вставки, удаления, замены),
необходимых для превращения одной последовательности символов в другую.
Данный способ показал себя хуже предыдущих. Производительность данного
метода эквивалентна второму способу, но при этом увеличивается в N*M
раз(временная сложность алгоритма расчета расстояния Левенштейна), где N и
M — длины сравниваемых строк. Ложные вхождения составили около 96.7% от
найденных лекарственных препаратов на выборке из 1000 протоколов осмотра.
В
результате
анализа
предложенных
методов
был
разработан
комбинированный подход. Он включает в себя элементы всех 3х подходов, но с
учетом дополнительных изменений. Для уменьшения количества ложных
вхождений 2го подхода был составлен список из 25 названий лекарств,
требующих дополнительной проверки, а именно проверки на полное
соответствие какому-либо слову из протокола осмотра. На основе результатов
полученных после применения первого метода были получены 4 слова-метки,
после которых идут названия выписанных пациенту лекарственных препаратов:
«Назначение», «Рекомендации», «Рекомендовано», «Лечение». Поэтому если в
протоколе осмотра присутствует слово-метка, то берется подстрока после
слова-метки и для поиска названия лекарства используется нечеткий поиск с
ограничением расстояния Левенштейна - 1. Полученный комбинированный
алгоритм:
1. Из текста протокола осмотра удаляются пробелы
2. Текст проверяется на наличие слов-меток
3. Если слово-метка обнаружено, то берется подстрока, начинающаяся со
слова-метки. Далее используется нечеткий поиск. Иначе обычный.
4. Каждое название лекарства проверяется на вхождение в протокол
осмотра
5. Если название входит в протокол осмотра, то оно проверяется по списку
названий, которые чаще всего являются ложными. Если оно принадлежит
22
данному списку, то найденное название проверяется на полное
соответствие какому-либо слову из текста протокола осмотра.
В
результате
использования
комбинированного
подхода
удалось
увеличить количество найденных названий препаратов с 1037 до 1587.
Количество ложных вхождений составил 45.6%. Но данный показатель
оказался высоким из-за неполного справочника лекарств, которые требуют
дополнительной проверки на вхождение.
2.5. Ишемическая болезнь сердца
Получения данных о наличии у пациента ишемической болезни
сердца(ИБС) оказалась задачей наиболее трудной из представленных. В связи с
неструктурированностью текстов протоколов осмотров, после их анализа не
удалось выявить паттернов или четких обозначений, указывающих на наличие
у пациента ИБС. Поэтому был выбран следующий подход. В качестве
сущности выступает протокол осмотра с наличием ИБС. Для распознавания
данной сущности было решено использовать алгоритмы машинного обучения,
основанные на данных, которые можно получить из протокола осмотра за счет
алгоритмов описанных ранее.
Для обучения моделей используется размеченная выборка, которая
содержит данные полученные на основе реализаций предыдущих алгоритмов
извлечения
глюкоза,
именованных сущностей: лабораторные тесты (холестерин,
креатинин,
АСТ,
АЛТ),
верхнее (систолическое) и нижнее
(диастолическое) артериальное давление, а также показатель наличия или
отсутствие диагноза ишемическая болезнь сердца.
Описание данных размеченной выборки
Данные представлены выборкой из 401 записи. В выборке представлены
следующие параметры:
1. Возраст
23
Возраст является наиболее важным фактором риска развития
сердечно-сосудистых
заболеваний,
при
этом
риск
увеличивается
примерно в три раза с каждым десятилетием жизни. Полосы коронарного
жира могут начать формироваться в подростковом возрасте. По оценкам,
82 процента людей, умирающих от ишемической болезни сердца, - это
люди в возрасте 65 лет и старше. Одновременно, риск инсульта
удваивается с каждым десятилетием после 55 лет.
2. Пол
Мужчины подвержены большему риску сердечных заболеваний,
чем женщины до менопаузы. После менопаузы утверждается, что риск
для женщины аналогичен риску для мужчины, хотя более свежие данные
ВОЗ и ООН оспаривают это. Если женщина страдает диабетом, то у нее
больше шансов развития сердечно-сосудистого заболевания, чем у
мужчины, страдающего диабетом.
3. Верхнее артериальное давление
Со временем высокое артериальное давление может повредить
артерии,
питающие
сердце.
Высокое
артериальное
давление,
возникающее при других заболеваниях, таких как ожирение, высокий
уровень
холестерина
или
сахарный
диабет,
ишемической болезни сердца.
4. Нижнее артериальное давление
5. Холестерин
6. Глюкоза
7. Креатинин
8. АСТ
9. АЛТ
10.Индекс массы тела(ИМТ)
11.Наличие ишемической болезни сердца(ИБС)
24
увеличивает
риск
Подготовка данных
Изначально имелись пустые значения(NaN) у следующих параметров:
Возраст
0
Пол
0
Верхнее артериальное давление
0
Нижнее артериальное давление
0
Холестерин
16
Глюкоза
0
Креатинин
50
АСТ
0
АЛТ
6
ИМТ
170
ИБС
0
У параметров таких как Креатинин, Холестерин, АЛТ, ИМТ также
имелись непустые значения равные 0, что равносильно пустому значению для
данных
параметров.
Нули
при
загрузке
были
заменены на пустые
значения(NaN).
Для заполнения пустых значений использовались классы библиотеки
Sklearn: IterativeImputer и SimpleImputer с параметром strategy=’mean’.
SimpleImputer с параметром strategy=’mean’ - класс, заполняющий
пропущенные значения средним значением по параметру.
25
IterativeImputer - более сложный подход, который моделирует функцию
для пропущенных значений параметра как функцию от имеющихся значений
других параметров, и использует эту оценку для подстановки значения.
IterativeImputer делает это итерационным образом: на каждом шаге столбец
функции обозначается как выход y, а остальные столбцы функции
рассматриваются как входы X. Для известной y используется регрессор (X, y).
Затем регрессор используется для предсказания отсутствующих значений y.
Это делается для каждой функции итерационным способом, а затем
повторяется для каждой итерации до max_iter.
Рис.1. Матрица корреляции до заполнения пустых значений
26
Рис.2. Матрица корреляций после заполнения пустых значений.
IterrativeImputer.
27
Рис.3. Матрица корреляций после заполнения пустых значений.
SimpleImputer с параметром strategy = ‘mean’
Из матриц корреляций видно, что самые коррелирующие между собой
параметры:
1. АСТ и АЛТ. Коэффициент корреляции - 0.78
2. Верхнее артериальное давление и нижнее артериальное давление.
Коэффициент корреляции - 0.62
3. Возраст и ИБС. Коэффициент корреляции равен - 0.48.
4. Верхнее артериальное давление и ИБС
. Коэффициент корреляции 0.37
28
Далее
для
построения
модели
была
использована
выборка
с
заполненными значениями по методу IterrativeImputer, так как связь между
параметрами при данном методе заполнения изменились незначительно.
Построение модели
Для построения модели данные были разделены на тестовую и
тренировочную выборки. Размер тестовой выборки был установлен на 0.4 от
всей выборки. Тренировочная выборка содержала 240 записей, из которых 139
с признаком ИБС = 1. Тестовая выборка содержала 161 запись, из которых 90 с
признаком ИБС = 1. Для исследования были выбраны 3 модели: Логистическая
регрессия, Random forest, Support Vector Machine. Все модели были взяты из
библиотеки Sklearn.
Описание параметров:
1. Точность (Accuracy). Accuracy = TP+TN/(TP+TN+FP+FN)
2. Полнота (Recall). Recall(a)=TP/TP+FN. Полнота показывает, какую долю
объектов,
реально
относящихся
к
положительному
классу,
мы
предсказали верно.
3. Специфичность(Specificity). Specificity или True Negative Rate =
TN/(TN+FP).
Измеряет
долю
объектов,
реально
относящихся
к
отрицательному классу, которые правильно определены как таковые.
4. Точность (Precision). Precision или Positive Predictive value = TP/(TP+FP).
Точность показывает какую долю объектов, распознанных как объекты
положительного класса, мы предсказали верно.
Таблица 2. Результаты нормировки данных
29
Accuracy
Recall/Sensitivity
Specificity
Precision
Logistic Regression
0.73
0.78
0.68
0.75
Random Forest
0.83
0.90
0.75
0.82
Support Vector Machine
0.77
0.97
0.51
0.72
Рис. 4. Матрица ошибок для Logistic Regression.
Рис. 5. Матрица ошибок для Random Forest.
30
Рис. 6. Матрица ошибок для SVM.
Для каждой модели также были рассмотрены варианты смещенного
порога(threshold) для отнесения к какому-либо из двух классов.
Таблица 3. Результаты расчета для различных значений threshold
TN
FP
FN/Type II error
TP
Sensitivity
Specificity
LR
RF
SVM
LR
RF
SVM
LR
RF
SVM
LR
RF
SVM
LR
RF
SVM
LR
RF
SVM
0.1
14
23
19
57
48
52
3
1
0
87
89
90
0.97
0.99
1.00
0.20
0.32
0.27
0.2
23
34
29
48
37
42
7
1
0
83
89
90
0.92
0.99
1
0.32
0.47
0.41
0.3
35
44
33
36
27
38
14
3
1
76
87
89
0.84
0.97
0.99
0.49
0.62
0.46
0.4
40
50
40
31
21
31
16
7
4
74
83
86
0.82
0.92
0.96
0.56
0.70
0.56
0.5
48
53
50
23
18
21
20
9
12
70
81
78
0.78
0.90
0.87
0.68
0.75
0.70
0.6
58
60
57
13
11
14
23
15
18
67
75
72
0.74
0.83
0.80
0.82
0.85
0.80
0.7
58
63
63
13
8
8
31
24
29
59
66
61
0.66
0.73
0.68
0.82
0.89
0.89
31
Рис.7. ROC-кривая. Logistic regression. AUC = 0.80
Рис.8. ROC-кривая. Random forest. AUC = 0.91
32
Рис.9. ROC-кривая. SVM. AUC = 0.88
Одноклассовая классификация
При построении модели также была рассмотрен вариант одноклассовой
классификации. Одноклассовая классификация используется для выявления
аномалий на основе имеющейся выборки. Существуют два варианта такой
классификации:
● Outlier detection(поиск выбросов): в тренировочной выборке содержатся
выбросы, которые определяются как наблюдения, лежащие далеко от
остальных. Таким образом, алгоритмы для детектирования выбросов
пытаются найти регионы, где сосредоточена основная масса
тренировочных данных, игнорируя аномальные наблюдения.
● Novelty detection(поиск "новизны"): тренировочная выборка не
загрязнена выбросами, и мы хотим научиться отвечать на вопрос
"является ли новое наблюдение выбросом".
Для имеющейся выборки наиболее подходящим вариантом является
поиск выбросов.
При моделирование был выбран класс OneClassSvm библиотек Sklearn.
Accuracy составила 0.41. Низкую точность можно объяснить исходя из
попарных графиков зависимостей параметров.
33
2.6. Визуализация данных
Дипломная работа проходит в рамках общего проекта и используется в
качестве дополнительного сервиса. Поэтому одной из важных задач является
представление результатов извлечения данных в удобном визуальном виде. Для
этого был разработан сервис построения графиков следующих параметров:
Дата рождения, Пол,
Давление (верхнее),
Давление
(нижнее),
Холестерин, Глюкоза, Креатинин, АСТ, АЛТ, Признак ИБС, Рост, Вес.
Параметр Дата рождения преобразовывется в Возраст.
Не все полученные при извлечении данные валидны, поэтому на
параметры были наложены следующие ограничения:
● Для параметров рост и вес значение 0 заменено на null, т. е. отсутствие
значения
● Давления не могут быть выше 300 и меньше 0
Для каждого параметра возможно построить несколько типов
графиков:
● Диаграмму размаха
● Гистограмму
● Диаграмму рассеивания
Также можно построить матрицу корреляции параметров. Ниже
представлены рисунки, демонстрирующие возможности системы.
34
Рис.10. Диаграмма рассеивания. OY- рост. OX — вес.
35
Рис.11. Общая матрица корреляции.
36
Рис.12. Диаграмма размаха. Вес при I20 равном 1.
37
Рис.13. Гистограмма. Распределение систолического давления пациентов
мужского пола без сердечно-сосудистых заболеваний.
38
Заключение
В ходе выполнения дипломной работы были исследованы методы
извлечения именованных сущностей из неструктурированных данных ЭМК,
разработаны и исследованы алгоритмы извлечения именованных сущностей
из текстов протоколов осмотра, а именно: данные по артериальному
давлению, ФИО, лекарственным препаратам, названия заболеваний группы
“Ишемическая болезнь сердца”; разработанные алгоритмы реализованы в
составе сервиса для врача-исследователя.
39
Список литературы
1. Концепция создания информационной системы в здравоохранении на
период
до
2020
года.
URL:
http://remedium.ru/legislation/other/detail.php?ID=36180.
2. Приложение к приказу Министерства здравоохранения и социального
развития Российской Федерации от 28 апреля 2011 № 364 «Концепция
создания единой государственной информационной системы в сфере
здравоохранения».
URL:
https://www.rosminzdrav.ru/documents/
%207200-prikaz-minzdravsotsrazvitiya-rossii-364-ot-28-aprelya-2011-g.
3. Тавровский
В.
М.,
Гусев
А.
В.
К
чему должна привести
информатизация здравоохранения: попытка спроектировать будущее //
Врач и информационные технологии. 2011. № 5. С. 60-76.
4. Лактионова Л. В. Организация информационного пространства
медицинского учреждения // Социальные аспекты здоровья населения.
2013. Т. 30. № 2. URL:
http://vestnik.mednet.ru/content/view/470/30.
5. Жиляев П. С., Горюнова Т. И. Организация телемедицинской системы
Пензенской области // Современные наукоемкие технологии. 2014. №
5-1. С. 127-127.
6. Брумштейн
Ю.
М.,
Сивер
Функционально-стоимостные
О.
В.,
Кузьмина
характеристики
А.
Б.
медицинских
информационных систем: опыт системного анализа // Инженерный
вестник
Дона.
2014.
Т.
32.
№
4-2.
URL:
http://www.ivdon.ru/ru/magazine/archive/n4p2y2014/2638.
7. Куликова И. Б. и др. Современное состояние здравоохранения
Тюменской области // Медицинская наука и образование Урала. 2016.
Т. 17. № 3. С. 102-105.
8. Garde S. et al. Expressing clinical data sets with openEHR archetypes: a
solid basis for ubiquitous computing // International Journal of Medical
Informatics. 2007. V. 76. P. 334-341.
40
9. Dolin R. H. et al. HL7 clinical document architecture, release 2 // Journal of
the American Medical Informatics Association. 2006. V. 13. № 1. P. 30-39.
10. Белышев Д. В., Кочуров Е. В. Анализ методов хранения данных в
современных медицинских информационных системах // Программные
системы: теория и приложения. 2016. Т. 7. № 2 (29). С.85-103.
11. Кобринский Б. А. Автоматизированные регистры медицинского
назначения: теория и практика применения. М.: Директ-Медиа, 2016.
149 c.
12. Rapsomaniki, E., Shah, A., Perel, P., Denaxas, S., George, J., Nicholas, O.,
... & Smeeth, L. (2013). Prognostic models for stable coronary artery disease
based on electronic health record cohort of 102 023 patients. European heart
journal, 35(13), 844-852.
13. Miotto, R., Li, L., Kidd, B. A., & Dudley, J. T. (2016). Deep patient: an
unsupervised representation to predict the future of patients from the
electronic
health
records. Scientific
reports, 6,
26094.
URL:
https://www.nature.com/articles/srep26094
14. Choi, E., Bahadori, M. T., Schuetz, A., Stewart, W. F., & Sun, J. (2016,
December). Doctor ai: Predicting clinical events via recurrent neural
networks. In Machine Learning for Healthcare Conference (pp. 301-318).
15. Ravı, D., Wong, C., Deligianni, F., Berthelot, M., Andreu-Perez, J., Lo, B.,
& Yang, G. Z. (2017). Deep learning for health informatics. IEEE journal of
biomedical and health informatics, 21(1), 4-21.
16. Shickel, B., Tighe, P. J., Bihorac, A., & Rashidi, P. (2018). Deep EHR: a
survey of recent advances in deep learning techniques for electronic health
record
(EHR)
analysis. IEEE
journal
of
biomedical
and
health
informatics, 22(5), 1589-1604.
17. Luo, L., Li, L., Hu, J., Wang, X., Hou, B., Zhang, T., & Zhao, L. P. (2016).
A hybrid solution for extracting structured medical information from
unstructured
data
in
medical
records via a double-reading/entry
system. BMC medical informatics and decision making, 16(1), 114. URL:
41
https://bmcmedinformdecismak.biomedcentral.com/track/pdf/10.1186/s1291
1-016-0357-5.
18. Kreimeyer, K., Foster, M., Pandey, A., Arya, N., Halford, G., Jones, S. F.,
... & Botsis, T. (2017). Natural language processing systems for capturing
and
standardizing
unstructured clinical information: A systematic
review. Journal of biomedical informatics, 73, 14-29.
19. Névéol, A., Dalianis, H., Velupillai, S., Savova, G., & Zweigenbaum, P.
(2018). Clinical natural language processing in languages other than english:
opportunities and challenges. Journal of biomedical semantics, 9(1), 12.
URL:
https://jbiomedsem.biomedcentral.com/articles/10.1186/s13326-018-0179-8.
20. Baranov A. A., Namazova-Baranova, L.S., Smirnov, I.V., Devyatkin, D.A.,
Shelmanov, A.O., Vishneva, E.A. et al Methods and means of integrated
intellectual analysis of medical data // Proceedings of the Institute for
System Analysis of the Russian Academy of Sciences. - 2015. - T. 65. - No.
2. - S. 81-93.
21. Baranov A.A., Namazova-Baranova, L.S., Smirnov, I.V., Devyatkin, D.A.,
Shelmanov, A.O., Vishneva, E.A. et al Technologies for the integrated
intellectual analysis of clinical data // Bulletin of the Russian Academy of
Medical Sciences. - 2016. - T. 71. - No. 2. - S. 160-171.
22. Dudchenko P. V., Dudchenko A. V., Kopanitsa G. D. Methods of extracting
data from unstructured medical records // Intelligent analysis of signals,
data and knowledge: methods and tools. Collection of articles of the II
All-Russian scientific-practical conference with international participation.
23. Ratinov L., Roth D. Design challenges and misconceptions in named entity
recognition. // Proceedings of the Thirteenth Conference on Computational
Natural Language Learning / Association for Computational Linguistics.
2009. P. 147–155.
24. Tjong Kim Sang E.F., De Meulder F. Introduction to the CoNLL-2003
Shared Task: Language-independent Named Entity Recognition //
42
Proceedings of the seventh conference on Natural language learning at
HLT-NAACL 2003-Volume 4 / Association for Computational Linguistics.
2003. P. 142-147.
25. Kim J.-D., Ohta T., Tsuruoka Y., Tateisi Y. Introduction to the Bio-Entity
Recognition Task at JNLPBA // Proceedings of the international joint
workshop on natural language processing in biomedicine and its applications
/ Association for Computational Linguistics. 2004. P. 70-75.
26. Nadeau D., Sekine S. A survey of named entity recognition and
classification // Lingvisticae Investigationes. 2007. Vol. 30, no. 1. P. 3–26.
27. Rea, S., Pathak, J., Savova, G., Oniki, T. A., Westberg, L., Beebe, C. E.
Chute, C. G. (2012). Building a robust, scalable and standards-driven
infrastructure for secondary use of EHR data
28. Pathak, J., Bailey, K. R., Beebe, C. E., Bethard, S., Carrell, D. S., Chen, P.
J., ... & Huff, S. M. (2013). Normalization and standardization of electronic
health records for high-throughput phenotyping: the SHARPn consortium.
Journal of the American Medical Informatics Association, 20(e2):
e341-e348.
29. Peek N., Holmes J. H., Sun J. (2014) Technical challenges for big data in
biomedicine and health: data sources, infrastructure, and analytics
//Yearbook of medical informatics. 9(1), 42-47.
30. Hripcsak, G., & Albers, D. J. (2017). High-fidelity phenotyping: richness
and freedom from bias. Journal of the American Medical Informatics
Association, 25(3), 289-294.
31.Wang, Y., Wang, L., Rastegar-Mojarad, M., Moon, S., Shen, F., Afzal, N.,
... & Liu, H. (2018). Clinical information extraction applications: a literature
review. Journal of biomedical informatics, 77, 34-49
32. Luo, Y. (2017). Recurrent neural networks for classifying relations in
clinical notes. Journal of biomedical informatics, 72, 85-95.
33. Wang, L., Wang, Y., Shen, F., Rastegar-Mojarad, M., & Liu, H. (2018,
July). Predicting Practice Setting Using Topic Modeling. In 6th IEEE
43
International Conference on Healthcare Informatics Workshops, ICHI-W
2018 (pp. 62-63). Institute of Electrical and Electronics Engineers Inc.
34. Haendel, M. A., Chute, C. G., & Robinson, P. N. (2018). Classification,
ontology,
and
precision
medicine. New
England
Journal
of
Medicine, 379(15), 1452-1462.
35. Gribova V.V. et al. Ontology of medical diagnostics for intelligent decision
support systems// Design Ontology. - 2018. - T. 8. - No. 1 (27).
44
Приложение 1
Метод получения имен пациентов с учетом реализованной
метрики
def get_p_name(text):
match = re.findall('\w+\s\w\.\s*\w\.', text)
match = [x for x in match if '_' not in x]
names = []
dist = []
text = regex.sub(' ', text)
match = [regex.sub(' ', x) for x in match]
text_tokens = nltk.word_tokenize(text)
print("Text:")
print(text_tokens)
for word in match:
words = nltk.word_tokenize(word)
words = [regex.sub(' ', x) for x in words]
print("Words:")
print(words)
for patient in words:
for p in morph.parse(patient):
if ('Surn' in p.tag or 'Name' in p.tag) and 'nomn' in
p.tag.case and len(patient) > 2:
try:
ind = text_tokens.index('Подпись')
except ValueError:
ind = -1
print("No Sign")
if ind == -1:
try:
ind = text_tokens.index('Фельдшер')
except ValueError:
ind = -1
if ind == -1:
try:
ind = text_tokens.index('Исполнитель')
except ValueError:
45
ind = -1
if ind == -1:
try:
ind = text_tokens.index('Кардиолог')
except ValueError:
ind = -1
if ind == -1:
try:
ind = text_tokens.index('Врач')
except ValueError:
ind = -1
if ind == -1:
try:
ind = text_tokens.index('Вр')
except ValueError:
ind = -1
if ind == -1:
try:
ind = text_tokens.index('вр')
except ValueError:
ind = -1
if ind == -1:
try:
ind = text_tokens.index('врач')
except ValueError:
ind = -1
if ind != -1:
try:
dist.append(abs(text_tokens.index(patient) ind))
except ValueError:
print("NOT IN TOKENS")
else:
dist.append(len(text_tokens) / 2.0 text_tokens.index(patient))
increment()
names.append(patient)
break
print("Names:")
46
print(names)
print("Distances:")
print(dist)
return names, dist
47
Приложение 2
Класс для парсинга названий лекарственных препаратов
class PillSpider(scrapy.Spider):
name = "pills_spider"
start_urls = ['https://www.rlsnet.ru/tn_alf.htm']
def parse(self, response):
GROUP_LINK_SELECTOR = '.alphabet__rustable .alf_td'
for pill_link in response.css(GROUP_LINK_SELECTOR):
NEXT_PAGE_SELECTOR = 'a::attr(href)'
next_page = pill_link.css(NEXT_PAGE_SELECTOR).extract_first()
if next_page:
self.log("-----------------------GO TO CATEGORY",
level=logging.INFO)
yield scrapy.Request(
response.urljoin(next_page),
callback=self.parse_category
)
def parse_category(self, response):
PILL_LINK_SELECTOR = '.tn_alf_list li'
self.log("--------------------------------------PARSE CATEGORY",
level=logging.INFO)
for link in response.css(PILL_LINK_SELECTOR):
NEXT_PAGE_SELECTOR = 'a::text'
next_page = link.css(NEXT_PAGE_SELECTOR).extract_first()
yield {'title':next_page}
48
Приложение 3
Метод создания гистограмм
def create_hist(df):
df = df.drop(columns=['I23', 'I24'])
df['Рост'] = df['Рост'].replace(0, np.nan)
df['Вес'] = df['Вес'].replace(0, np.nan)
df
=
df[(df['Давление
(верхнее)']
<
300)
|
(df['Давление
(нижнее)']
<
300)
|
(df['Давление
ff.create_distplot([hist_data],
group_labels,
(верхнее)'].isna())]
df
=
df[(df['Давление
(нижнее)'].isna())]
print(df.describe())
columns = ['Вес', 'Рост',
'АСТ', 'АЛТ',
'Креатинин', 'Глюкоза', 'Холестерин',
'Давление (нижнее)', 'Давление (верхнее)']
for col in columns:
hist_data = df[df['I20'] == 1][col].dropna()
group_labels = [col]
fig
=
bin_size=(hist_data.max() - hist_data.min()) / 20.0)
plotly.offline.plot(fig,
'_I20_1.html')
49
filename='Гистограмма_'
+
col
+
Отзывы:
Авторизуйтесь, чтобы оставить отзыви хорошего настроения
удачи
успехов в конкурсе
Наверное было затрачено много времени и труда на работу
Продолжай свое исследование
Админам респект
И продвижения статьи в топы?
Как на счет взаимных комментариев под работами?)
Красиво написанная работа
Так держать
Молодец
Интересная работа!