[TOC]
Выбрано для сбора данных сайт "Искать медицину и лекарства" (Xunyiwenyao.com). Вначале были собраны следующие 10 типов данных:
Первые 9 типов данных были помещены в коллекцию MongoDB medical.data. Сбор данных занял 5 часов, было собрано 4666 записей, что представлено на следующем изображении:
10-й тип данных был помещен в коллекцию MongoDB medical.jc, содержащую ссылки на общие анализы, их названия и описания. Сбор данных занял 1 час, было собрано 3660 записей:
Данные в коллекции medical отображены следующим образом:
Сначала данные из коллекции medical.medical экспортируются из MongoDB в формат JSON:
.\mongoexport -d dbtest -c collection -o E:\tmp.json
Затем, в соответствии с разделом "2. Построение знаний", данные в формате JSON преобразуются в граф знаний в Neo4j.
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)
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', организуйте в удобочитаемом формате и верните, например: При простуде нельзя есть: бобовый горох; соленая рыба; жареный хлеб; свиное сало (жир)
**Эффект выполнения примерно такой:**

Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )