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