textRuleScore applyConcept

Optimisation du Traitement de Volumineux Rapports Médicaux

Scénario de test & Cas d'usage

Contexte Métier

Un institut de recherche médicale doit analyser des millions de comptes-rendus médicaux pour des études épidémiologiques. Le processus est long et coûteux. L'objectif est d'accélérer l'extraction de concepts (symptômes, pathologies) en pré-analysant les documents une seule fois pour des requêtes multiples.
À propos du Set : textRuleScore

Scoring de documents textuels basé sur des règles.

Découvrir toutes les actions de textRuleScore
Préparation des Données

Création d'une table volumineuse (simulée) de notes médicales.

Copié !
1DATA casuser.rapports_medicaux (copies=1000);
2 INFILE DATALINES delimiter='|';
3 LENGTH rapport_id 8 texte_rapport $2000;
4 INPUT rapport_id texte_rapport$;
5 DATALINES;
6101|Le patient présente une forte fièvre et des maux de tête persistants. Suspicion de grippe saisonnière.
7102|Examen de suivi pour hypertension artérielle. Le traitement à base d'amlodipine est bien toléré.
8103|Le sujet se plaint de douleurs abdominales aiguës. Aucun signe de fièvre. Analyse en cours.
9;
10run;
11 
12data casuser.medical_liti_model;
13 length model $200;
14 infile datalines;
15 input model$;
16 datalines;
17CONCEPT:SYMPTOME:(OR, "fièvre", "maux de tête", "douleurs abdominales")
18CONCEPT:PATHOLOGIE:(OR, "grippe", "hypertension artérielle")
19CONCEPT:MEDICAMENT:(OR, "amlodipine")
20;
21RUN;

Étapes de réalisation

1
Première passe : Exécution de l'action en sauvegardant les documents pré-analysés dans 'parsed_reports'.
Copié !
1PROC CAS;
2 textRuleScore.applyConcept /
3 TABLE={caslib='casuser', name='rapports_medicaux'},
4 docId='rapport_id',
5 text='texte_rapport',
6 model={caslib='casuser', name='medical_liti_model'},
7 parseTableOut={caslib='casuser', name='parsed_reports', replace=true},
8 casOut={caslib='casuser', name='medical_concepts_pass1', replace=true};
9RUN;
2
Deuxième passe : Ré-exécution de l'action en utilisant la table pré-analysée 'parsed_reports' comme entrée pour un gain de performance significatif.
Copié !
1PROC CAS;
2 textRuleScore.applyConcept /
3 parseTableIn={caslib='casuser', name='parsed_reports'},
4 docId='rapport_id',
5 text='texte_rapport',
6 model={caslib='casuser', name='medical_liti_model'},
7 casOut={caslib='casuser', name='medical_concepts_pass2', replace=true};
8RUN;

Résultat Attendu


Les deux tables de sortie 'medical_concepts_pass1' et 'medical_concepts_pass2' doivent être identiques en contenu. Cependant, le temps d'exécution de la deuxième étape doit être nettement inférieur à celui de la première, démontrant l'efficacité de la mise en cache via `parseTableOut`/`parseTableIn` sur un grand volume de données.