1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/sunqiangML-MedicalKG

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
readme.md 7.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 07:06 97b7fbb

[TOC]

1. Подготовка данных

1.1 Сбор данных

Выбрано для сбора данных сайт "Искать медицину и лекарства" (Xunyiwenyao.com). Вначале были собраны следующие 10 типов данных:

  1. Общие сведения: http://jib.xywy.com/il_sii/gaishu/1.htm
  2. Причины заболевания: http://jib.xywy.com/il_sii/cause/1.htm
  3. Профилактика: http://jib.xywy.com/il_sii/prevent/1.htm
  4. Симптомы: http://jib.xywy.com/il_sii/symptom/1.htm
  5. Вторичные заболевания: http://jib.xywy.com/il_sii/neopathy/1.htm
  6. Общие анализы: http://jib.xywy.com/il_sii/inspect/1.htm
  7. Лечение: http://jib.xywy.com/il_sii/treat/1.htm
  8. Диета и здоровье: http://jib.xywy.com/il_sii/food/1.htm
  9. Положительные отзывы о лекарствах: http://jib.xywy.com/il_sii/drug/1.htm
  10. Проектные анализы: http://jck.xywy.com/jc_1.html

Первые 9 типов данных были помещены в коллекцию MongoDB medical.data. Сбор данных занял 5 часов, было собрано 4666 записей, что представлено на следующем изображении:

img

10-й тип данных был помещен в коллекцию MongoDB medical.jc, содержащую ссылки на общие анализы, их названия и описания. Сбор данных занял 1 час, было собрано 3660 записей:

img

1.2 Предварительная обработка данных

  • Собранные данные были преобразованы в удобную для работы форму: данные можно было получить по ключу. Это облегчает последующее преобразование данных в формат JSON для удобства использования в Neo4j. Обработанные данные были помещены в коллекцию medical.medical, общее количество записей составило 3371.img

Данные в коллекции medical отображены следующим образом:

img

Сначала данные из коллекции medical.medical экспортируются из MongoDB в формат JSON:

.\mongoexport -d dbtest -c collection -o E:\tmp.json

Затем, в соответствии с разделом "2. Построение знаний", данные в формате JSON преобразуются в граф знаний в Neo4j.

2. Построение графа знаний

2.1 Построение сущностей, 7 типов: болезнь, лекарство, пища, анализ, отделение, производитель лекарств, симптом

  • Теги сущности болезни определены как: Disease, атрибуты включают: name, desc (описание), prevent, cause, easy_get (вероятность заболевания), cure_lasttime, cure_department, cure_way, cured_prob.
from py2neo import Node self.g = Graph(host="127.0.0.1",http_port=7474,user="neo4j", password="123456") 
node = Node("Болезнь", name=disease_dict['name'], desc=disease_dict['desc'], prevent=disease_dict['prevent'], cause=disease_dict['cause'], easy_get=disease_dict['easy_get'], cure_lasttime=disease_dict['cure_lasttime'], cure_department=disease_dict['cure_department'], cure_way=disease_dict['cure_way'], cured_prob=disease_dict['cured_prob'])
self.g.create(node) 
  • Оставшиеся 6 сущностных свойств: name. Соответствующие метки в порядке следования: Drug, Food, Check, Department, Producer, Symptom.

  • node = Node(label, name=node_name) self.g.create(node) 

2.2 Построение отношений, 11 типов:- Болезнь-рекомендованное меню, Болезнь-нельзя есть, Болезнь-можно есть, Отделение-отделение, Болезнь-обычные товары, Производитель-лекарство, Болезнь-положительные отзывы о лекарстве, Болезнь-проверка, Болезнь-симптом, Болезнь-комPLICATION, Болезнь-отделение- ```python

Напишите CQL-запрос для создания отношений между сущностями

query = "match(p:%s),(q:%s) where p.name='%s' and q.name='%s' create (p)-[rel:%s{name:'%s'}]->(q)" % (start_node, end_node, p, q, rel_type, rel_name) self.g.run(query)


Внимание: **3. Автоматический вопросно-ответный модуль** **Должен быть запущен только после подключения к Neo4j!**

# 3. Автоматический вопросно-ответный модуль

## 3.1 Классификация вопросов

1. Получите слова, относящиеся к 7 основным сущностям, из вопроса;
2. Получите question_types, например: disease_cause, disease_acompany;

- Если спросить: "Что нельзя есть при простуде?", вернётся: {'args': {'простуда': ['disease']}, 'question_types': ['disease_not_food']}
- Если спросить: "Что такое простуда?", вернётся: {'args': {'простуда': ['disease']}, 'question_types': ['disease_desc']}

## 3.2 Разбор вопросов

1. На основе данных, подобных: {'args': {'простуда': ['disease']}, 'question_types': ['disease_not_food']}, получите содержимое 'args' (то есть сущности) и 'question_types';
2. На основе полученных 'args' и 'question_types' сгенерируйте CQL-запрос;

## 3.3 Поиск

1. Выполните CQL-запрос из предыдущего шага и получите результат: ress = self.g.run(query).data(), вернётся что-то вроде:

- ```
[
{'m.name': 'простуда', 'r.name': 'нельзя есть', 'n.name': 'бобовый горох'},
{'m.name': 'простуда', 'r.name': 'нельзя есть', 'n.name': 'свиное сало (жир)'},
{'m.name': 'простуда', 'r.name': 'нельзя есть', 'n.name': 'жареный хлеб'},
{'m.name': 'простуда', 'r.name': 'нельзя есть', 'n.name': 'соленая рыба'}
]
```2. Извлеките соответствующие 'n.name', организуйте в удобочитаемом формате и верните, например: При простуде нельзя есть: бобовый горох; соленая рыба; жареный хлеб; свиное сало (жир)


**Эффект выполнения примерно такой:**
![Эффект выполнения](https://github.com/geyixin/MedicalKG/blob/master/picture/run.png)

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/sunqiangML-MedicalKG.git
git@api.gitlife.ru:oschina-mirror/sunqiangML-MedicalKG.git
oschina-mirror
sunqiangML-MedicalKG
sunqiangML-MedicalKG
master