#!/usr/bin/env python3 """ Test simplifié de l'agent NER médical + Mapper de template Extraction → Affichage → Mapping → Affichage → Fichier TXT """ import os import sys from type3_extract_entities import MedicalNERAgent, ExtractedData from medical_template3_mapper import MedicalTemplateMapper, create_filled_medical_report def main(): """Test simplifié : extraction + mapping + génération fichier""" print("🏥 TEST AGENT NER MÉDICAL + MAPPER") print("=" * 50) # Transcription à analyser transcription = """Compte rendu classique. L'utérus est antéversé de taille 7,8 cm 60 d'hystérométrie 3,7 d'endomètre triangulaire zone jonctionnelle épaissie focale d'adénomyose diffuse fibromes myomètre pas de fibromes. Le col voulut le laisser comme il est la morphologie triangulaire. L'ovaire droit mesure 26 x 20 mm, 5 follicules. L'ovaire gauche accessibilité au maître rétro thérape par contre l'autre il est normal il mesure 25 x 19 mm siège de CFA : 22 follicules. Le Doppler : IP 3,24 - IR 0,91 et le reste tout en fait qui est l'ovaire gauche d'accès difficile à rétro-utérin.""" try: # ÉTAPE 1: EXTRACTION DES ENTITÉS print("🔬 ÉTAPE 1: EXTRACTION DES ENTITÉS MÉDICALES") print("-" * 50) agent = MedicalNERAgent() extracted_data = agent.extract_medical_entities(transcription) # Affichage des résultats d'extraction print(agent.print_extraction_report(extracted_data)) # ÉTAPE 2: MAPPING VERS TEMPLATE print("\n📋 ÉTAPE 2: MAPPING VERS TEMPLATE") print("-" * 50) mapper = MedicalTemplateMapper() mapping_result = mapper.map_extracted_data_to_template(extracted_data) # Affichage des résultats de mapping print(mapper.print_mapping_report(mapping_result)) # ÉTAPE 3: GÉNÉRATION DU FICHIER print("\n💾 ÉTAPE 3: GÉNÉRATION DU FICHIER") print("-" * 50) output_file = "rapport_medical_final.txt" with open(output_file, 'w', encoding='utf-8') as f: f.write("RAPPORT MÉDICAL GÉNÉRÉ AUTOMATIQUEMENT\n") f.write("=" * 50 + "\n\n") f.write("📋 DONNÉES EXTRAITES:\n") f.write(agent.print_extraction_report(extracted_data)) f.write("\n\n📄 TEMPLATE REMPLI:\n") f.write("-" * 50 + "\n") f.write(mapping_result.filled_template) # Ajouter les statistiques f.write("\n\n📊 STATISTIQUES:\n") f.write("-" * 30 + "\n") f.write(f"Score d'extraction: {extracted_data.extraction_confidence:.1%}\n") f.write(f"Champs mappés: {len(mapping_result.mapped_fields)}\n") f.write(f"Score de mapping: {mapping_result.mapping_confidence:.1%}\n") f.write(f"Erreurs de mapping: {len(mapping_result.errors)}\n") print(f"✅ Rapport médical sauvegardé dans: {output_file}") # Affichage du résumé final print(f"\n📊 RÉSUMÉ FINAL:") print(f" 🎯 Score d'extraction: {extracted_data.extraction_confidence:.1%}") print(f" 🎯 Champs mappés: {len(mapping_result.mapped_fields)}") print(f" 🎯 Score de mapping: {mapping_result.mapping_confidence:.1%}") print(f" ⚠️ Erreurs: {len(mapping_result.errors)}") print(f" 📝 Placeholders non mappés: {len(mapping_result.unmapped_placeholders)}") # Affichage des erreurs si présentes if mapping_result.errors: print(f"\n⚠️ ERREURS DE MAPPING:") for error in mapping_result.errors: print(f" - {error}") # Affichage de quelques placeholders non mappés if mapping_result.unmapped_placeholders: print(f"\n📝 QUELQUES PLACEHOLDERS NON MAPPÉS:") for placeholder in mapping_result.unmapped_placeholders[:5]: print(f" - {placeholder[:60]}...") print("\n🎉 PROCESSUS TERMINÉ AVEC SUCCÈS!") # Affichage d'un aperçu du template rempli print(f"\n👁️ APERÇU DU TEMPLATE REMPLI (100 premiers caractères):") print("-" * 50) preview = mapping_result.filled_template[:200] + "..." if len(mapping_result.filled_template) > 200 else mapping_result.filled_template print(preview) except Exception as e: print(f"\n💥 ERREUR: {e}") import traceback traceback.print_exc() if __name__ == "__main__": main()