DoctorFinder!
此 GraphGist 代表一个移动应用程序后端,帮助用户根据其身体特征、位置和当前症状查找合适的药物和专家。
我们的最终模型
来自 VIDAL,充满爱意 (Suzanne
, Nicolas
, Édouard
, Marouane
, Sébastian
, Thibaut
, Olivier
, Sylvain
, Florent
(又名 Cypher 翻译器))。
用户故事
药物顾问
作为应用程序用户,
当我开始输入我的症状时,则会返回合适的药物,按其治疗类别分组。
示例
当前用户是一位 35 岁的男性,表现出喘息和胸闷,患有对倍他米松过敏的过敏症。
我们期望所有类别为 Bronchodilators
(Betametasone
药物除外,因为存在上述过敏症)和 Xanthine
的药物出现,因为它们是数据集中适合成人的唯一治疗类别。
MATCH (patho:Pathology)-[:MAY_MANIFEST_SYMPTOMS]->(symptoms:Symptom)
WHERE symptoms.name IN ['Chest tightness', 'Wheezing']
WITH patho
MATCH (DrugClass:DrugClass)-[cures:CURES]->(patho)
WHERE cures.age_min <= 35 AND 35 < cures.age_max
WITH DrugClass
MATCH (drug:Drug)-[:BELONGS_TO_CLASS]->(DrugClass), (allergy:ALLERGY)
WHERE allergy.name IN ['Hypersensitivity to Betametasone']
AND (NOT (drug)-[:MAY_CAUSE_ALLERGY]->(allergy))
RETURN DrugClass.name AS `Therapeutic class`, COLLECT(DISTINCT drug.name) AS `Drugs`;
医生查找器
作为应用程序用户,
当我开始输入我的症状时,则会返回可以开具适当药物的医生,以及这些药物,按距离排序。
请参阅上述定义,了解“适当药物”的含义。如果可以无需处方购买药物,则应返回“无需医生”的说明,以及到用户住处的距离(为 0)。
示例
当前用户是一位 19 岁的女性,表现出咳嗽,患有对倍他米松过敏的过敏症,住在“法国巴黎 75009 区布鲁塞尔街 14 号”(纬度:48.88344,经度:2.33180)。
我们期望返回所有血管科医生,因为他们可以开具的药物可以治疗与用户症状相关的疾病。
此外,类别为 Xanthine
的药物无需处方,它们也能治疗同类型的疾病。
MATCH (patho:Pathology)-[:MAY_MANIFEST_SYMPTOMS]->(symptoms:Symptom)
WHERE symptoms.name IN ['Cough']
WITH patho
MATCH (DrugClass:DrugClass)-[cures:CURES]->(patho)
WHERE cures.age_min <= 19 AND 19 < cures.age_max
WITH DrugClass
MATCH (drug:Drug)-[:BELONGS_TO_CLASS]->(DrugClass), (allergy:ALLERGY)
WHERE allergy.name IN ['Hypersensitivity to Betametasone']
AND (NOT (drug)-[:MAY_CAUSE_ALLERGY]->(allergy))
WITH DrugClass, drug
OPTIONAL MATCH (doctor:Doctor)-->(spe:DoctorSpecialization)-[:CAN_PRESCRIBE]->(DrugClass)
RETURN COALESCE(doctor.name + ' (' + spe.name + ')', 'No doctor required') AS `Doctor`, COLLECT(DISTINCT drug.name) AS `Drugs for your symptoms`, 2 * 6371 * asin(sqrt(haversin(radians(48.88344 - COALESCE(doctor.latitude,48.88344))) + cos(radians(48.88344)) * cos(radians(COALESCE(doctor.latitude,90)))* haversin(radians(2.33180 - COALESCE(doctor.longitude,2.33180))))) AS `Distance to home (km)`
ORDER BY `Distance to home (km)` ASC;
尽管看起来很复杂,但距离计算只是在 Cypher 手册中解释的正弦公式的空安全变体(实际上,有些药物无需医生处方)。
此页面是否有帮助?