app: Recherche dans les alias de termes
This commit is contained in:
		
							parent
							
								
									4681c440fd
								
							
						
					
					
						commit
						1cbc093f56
					
				|  | @ -1,4 +1,4 @@ | |||
| import React, {useEffect} from 'react'; | ||||
| import React from 'react'; | ||||
| import Graph from './Graph.js'; | ||||
| import {types} from '../data/mock.js'; | ||||
| import {useAsync} from '../util.js'; | ||||
|  |  | |||
|  | @ -13,6 +13,19 @@ const keys = Object.assign(Object.create(null), { | |||
|     'down': 40, | ||||
| }); | ||||
| 
 | ||||
| /** | ||||
|  * Met le nom d’un terme sous forme normalisée pour la recherche approximative. | ||||
|  * | ||||
|  * Dans la forme normalisée, tous les accents sont ôtés et la casse est réduite | ||||
|  * en minuscules. | ||||
|  * | ||||
|  * @param name Nom à normaliser. | ||||
|  * @return Liste des mots du nom de terme normalisé. | ||||
|  */ | ||||
| const normalizeName = name => | ||||
|     diacritics.remove(name.toLowerCase()) | ||||
|         .split(/\s+/g); | ||||
| 
 | ||||
| /** | ||||
|  * Vérifie si un terme est similaire à un préfixe saisi. | ||||
|  * | ||||
|  | @ -20,10 +33,19 @@ const keys = Object.assign(Object.create(null), { | |||
|  * @param term Terme à vérifier. | ||||
|  * @return Vrai si le terme est considéré comme similaire au préfixe. | ||||
|  */ | ||||
| const termMatchesPrefix = (prefix, {name}) => | ||||
| const termMatchesPrefix = (prefix, {name, alias}) => | ||||
| { | ||||
|     return diacritics.remove(name.toLowerCase()) | ||||
|         .startsWith(diacritics.remove(prefix.toLowerCase())); | ||||
|     const haystack = [name].concat(alias) | ||||
|         .map(normalizeName) | ||||
|         .reduce((prev, next) => prev.concat(next), []); | ||||
| 
 | ||||
|     const needle = normalizeName(prefix); | ||||
| 
 | ||||
|     return needle.every(item => | ||||
|         haystack.some(word => | ||||
|             word.startsWith(item) | ||||
|         ) | ||||
|     ); | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
| export const types = { | ||||
|     disease: 'Maladie', | ||||
|     symptom: 'Symptôme', | ||||
|     sign: 'Signe' | ||||
|     sign: 'Signe', | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  | @ -15,112 +15,175 @@ export const terms = { | |||
|     Q2840: { | ||||
|         id: 'Q2840', | ||||
|         name: 'Grippe', | ||||
|         alias: [], | ||||
|         types: [types.disease], | ||||
|         weight: 0.000035 | ||||
|         weight: 0.000035, | ||||
|     }, | ||||
|     Q154882: { | ||||
|         id: 'Q154882', | ||||
|         name: 'Légionellose', | ||||
|         alias: [ | ||||
|             'Légionnellose', | ||||
|             'Légionnelose', | ||||
|             'Légionelose', | ||||
|             'Maladie des légionnaires', | ||||
|         ], | ||||
|         types: [types.disease], | ||||
|         weight: 0.000015 | ||||
|         weight: 0.000015, | ||||
|     }, | ||||
|     Q155098: { | ||||
|         id: 'Q155098', | ||||
|         name: 'Leptospirose', | ||||
|         alias: [], | ||||
|         types: [types.disease], | ||||
|         weight: 0.00001 | ||||
|         weight: 0.00001, | ||||
|     }, | ||||
|     Q326663: { | ||||
|         id: 'Q326663', | ||||
|         name: 'Encéphalite à tiques', | ||||
|         alias: [ | ||||
|             'Encéphalite à tique', | ||||
|             'Encéphalites à tiques', | ||||
|             'Encéphalite d\'Europe centrale', | ||||
|             'Encéphalite verno-estivale russe', | ||||
|             'Méningoencéphalite à tique', | ||||
|             'Méningoencéphalite diphasique', | ||||
|             'Méningoencéphalite biondulante', | ||||
|             'Fièvre de lait diphasique', | ||||
|             'Maladie de Schneider', | ||||
|             'Maladie de Kumlinge', | ||||
|         ], | ||||
|         types: [types.disease], | ||||
|         weight: 0.000001 | ||||
|         weight: 0.000001, | ||||
|     }, | ||||
|     Q133780: { | ||||
|         id: 'Q133780', | ||||
|         name: 'Peste', | ||||
|         alias: [], | ||||
|         types: [types.disease], | ||||
|         weight: 0.000032 | ||||
|         weight: 0.000032, | ||||
|     }, | ||||
|     Q38933: { | ||||
|         id: 'Q38933', | ||||
|         name: 'Fièvre', | ||||
|         types: [types.symptom] | ||||
|         alias: [ | ||||
|             'Pyrexie', | ||||
|         ], | ||||
|         types: [types.symptom], | ||||
|     }, | ||||
|     Q474959: { | ||||
|         id: 'Q474959', | ||||
|         name: 'Myalgie', | ||||
|         types: [types.symptom] | ||||
|         alias: [ | ||||
|             'Douleur musculaire', | ||||
|         ], | ||||
|         types: [types.symptom], | ||||
|     }, | ||||
|     Q86: { | ||||
|         id: 'Q86', | ||||
|         name: 'Céphalée', | ||||
|         types: [types.sign] | ||||
|         alias: [ | ||||
|             'Mal de tête', | ||||
|         ], | ||||
|         types: [types.sign], | ||||
|     }, | ||||
|     Q1115038: { | ||||
|         id: 'Q1115038', | ||||
|         name: 'Rhinorrhée', | ||||
|         types: [types.symptom] | ||||
|         alias: [ | ||||
|             'Nez qui coule', | ||||
|             'Écoulement nasal', | ||||
|         ], | ||||
|         types: [types.symptom], | ||||
|     }, | ||||
|     Q9690: { | ||||
|         id: 'Q9690', | ||||
|         name: 'Fatigue', | ||||
|         types: [types.symptom] | ||||
|         alias: [], | ||||
|         types: [types.symptom], | ||||
|     }, | ||||
|     Q127076: { | ||||
|         id: 'Q127076', | ||||
|         name: 'Vomissement', | ||||
|         types: [types.symptom, types.sign] | ||||
|         alias: [ | ||||
|             'Vomissements', | ||||
|             'Vomi', | ||||
|             'Vomissage', | ||||
|             'Vomir', | ||||
|         ], | ||||
|         types: [types.symptom, types.sign], | ||||
|     }, | ||||
|     Q178061: { | ||||
|         id: 'Q178061', | ||||
|         name: 'Choc circulatoire', | ||||
|         alias: [ | ||||
|             'Insuffisance circulatoire aiguë', | ||||
|         ], | ||||
|         types: [types.disease], | ||||
|         weight: 0.000038 | ||||
|         weight: 0.000038, | ||||
|     }, | ||||
|     Q35805: { | ||||
|         id: 'Q35805', | ||||
|         name: 'Toux', | ||||
|         types: [types.symptom, types.sign] | ||||
|         alias: [ | ||||
|             'Tousse', | ||||
|             'Toussote', | ||||
|         ], | ||||
|         types: [types.symptom, types.sign], | ||||
|     }, | ||||
|     Q647099: { | ||||
|         id: 'Q647099', | ||||
|         name: 'Hémoptysie', | ||||
|         types: [types.symptom] | ||||
|         alias: [ | ||||
|             'Expectoration sanglante', | ||||
|         ], | ||||
|         types: [types.symptom], | ||||
|     }, | ||||
|     Q653197: { | ||||
|         id: 'Q653197', | ||||
|         name: 'Rash', | ||||
|         types: [types.symptom, types.sign] | ||||
|         alias: [], | ||||
|         types: [types.symptom, types.sign], | ||||
|     }, | ||||
|     Q160796: { | ||||
|         id: 'Q160796', | ||||
|         name: 'Syndrome confusionnel', | ||||
|         alias: [ | ||||
|             'Confusion mentale', | ||||
|         ], | ||||
|         types: [types.disease], | ||||
|         weight: 0.000004 | ||||
|         weight: 0.000004, | ||||
|     }, | ||||
|     Q186235: { | ||||
|         id: 'Q186235', | ||||
|         name: 'Myocardite', | ||||
|         alias: [], | ||||
|         types: [types.disease], | ||||
|         weight: 0.0000075 | ||||
|         weight: 0.0000075, | ||||
|     }, | ||||
|     Q476921: { | ||||
|         id: 'Q476921', | ||||
|         name: 'Insuffisance rénale', | ||||
|         alias: [], | ||||
|         types: [types.disease], | ||||
|         weight: 0.0000046 | ||||
|         weight: 0.0000046, | ||||
|     }, | ||||
|     Q281289: { | ||||
|         id: 'Q281289', | ||||
|         name: 'Photophobie', | ||||
|         types: [types.sign] | ||||
|         alias: [], | ||||
|         types: [types.sign], | ||||
|     }, | ||||
|     Q159557: { | ||||
|         id: 'Q159557', | ||||
|         name: 'Coma', | ||||
|         types: [types.sign] | ||||
|     } | ||||
|         alias: [ | ||||
|             'Perdre connaissance', | ||||
|             'Coma végétatif', | ||||
|             'Perte de connaissance', | ||||
|         ], | ||||
|         types: [types.sign], | ||||
|     }, | ||||
| }; | ||||
| 
 | ||||
| /** | ||||
|  | @ -161,7 +224,7 @@ export const hasSymptom = [ | |||
|     ['Q133780', 'Q35805'], | ||||
|     ['Q133780', 'Q647099'], | ||||
|     ['Q133780', 'Q653197'], | ||||
|     ['Q133780', 'Q160796'] | ||||
|     ['Q133780', 'Q160796'], | ||||
| ]; | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue