← Back to list

Utilisation des API du SMT de l’ANS : Traduction des termes médicaux du français vers l’anglais

Le Serveur Multi Terminologies (SMT) se présente comme un service socle pour l’eco-système e-santé en France.

imadmala · 2024-02-21 10:01 · 15 claps · 3.8 min read
#ontology #python #health #terminology #medical-terminology
Open on Medium ↗
Wiki topics: PHI · Philosophy 🔒 · Cybersecurity

Utilisation des API du SMT de l’ANS : Traduction des termes médicaux du français vers l’anglais

Le Serveur Multi Terminologies (SMT) se présente comme un service socle pour l’eco-système e-santé en France.

Dans le paysage dynamique et en constante évolution de la santé, le Serveur Multi Terminologies (SMT) de l’Agence du Numérique en Santé (ANS) se présente comme un élément clé dans la standardisation et la diffusion des terminologies médicales.

Le SMT est destiné à remplir une triple fonction fondamentale. Premièrement, il sert de plateforme de publication, garantissant la diffusion uniforme des terminologies. Deuxièmement, il crée un espace en réseau qui relie diverses terminologies, facilitant leur interopérabilité. Enfin, il gère ces terminologies en offrant un pôle centralisé et autoritaire pour leur maintenance et distribution.

Mais qu’est-ce qui fait du SMT un pivot dans l’écosystème de la e-santé en France ? La mise en place du serveur a révolutionné l’approche de l’ANS face à plusieurs enjeux clés :

  • Il a standardisé la distribution des terminologies, offrant un point d’entrée unique et institutionnel qui sert à la fois les professionnels et le grand public.
  • Le SMT centralise l’hébergement et la gestion des terminologies, fournissant un dépôt sécurisé et fiable.
  • Il améliore les processus de gestion et de diffusion des terminologies au sein de l’ANS. .

Avec des chiffres impressionnants tels que la publication de 24 terminologies au format OWL, comprenant 900 000 concepts, le SMT témoigne de la puissance des solutions numériques dans le domaine de la santé.

Fort de ses API REST disponibles (https://smt.esante.gouv.fr/api-docs/)et de son service FHIR introduit en janvier 2024 (https://smt.esante.gouv.fr/fhir), le Serveur Multi Terminologies (SMT) représente une avancée majeure pour les professionnels de santé et développeurs cherchant à naviguer dans l’univers complexe des termes médicaux. Dans cet article, nous allons explorer comment les API du SMT offrent une approche automatique pour rechercher des terminologies et des concepts médicaux, et comment elles facilitent une traduction en utilisant les terminologies déjà intégrée dans le serveur entre le français et l’anglais, et inversement.

À travers un script Python fonctionnel et intuitif, nous démontrerons l’accessibilité et l’efficacité de ces outils pour les utilisateurs, qu’ils soient experts en technologie de la santé ou novices en programmation.

Étude de cas — traduire des termes médicaux en utilisant les API du SMT :

L’objectif de cette étude de cas est de démontrer comment les API REST du SMT permettent de traduire des termes médicaux du français vers l’anglais et inversement. Nous allons examiner un script Python spécialement conçu pour cette tâche.

Explication du Script

Le script que nous avons développé se compose de plusieurs fonctions :

  1. search_term : Cette fonction lance une requête à l’API de recherche du SMT pour trouver des concepts médicaux correspondant au terme entré. Elle renvoie les données JSON avec les résultats de la recherche.
  2. get_concept_details : Après avoir identifié un terme, cette fonction récupère des informations détaillées sur celui-ci grâce à son identifiant unique au sein du système de classification médicale.
  3. translate_term : C’est la fonction principale qui orchestre le processus de traduction. Elle utilise les fonctions précédentes pour obtenir la traduction du terme souhaité dans la langue cible.

Le script commence par rechercher un terme médical dans la langue source à l’aide de l’API de recherche. Une fois le terme trouvé, il extrait l’ID du concept et demande des détails supplémentaires, y compris la traduction préférée (prefLabel) dans la langue cible.

import requests


 # Définir la fonction de recherche
 def search_term(term, language='fr'):
   url = "https://smt.esante.gouv.fr/api/concepts/search"
   headers = {
     "accept": "*/*",
     "Content-Type": "application/json"
   }
   params = {
     'searchedText': term,
     'pagination': 1,
     'size': 10,
     'lang': language,
     'exact': False
   }
   response = requests.post(url, headers=headers, params=params, json=[])
   return response.json()


 # Obtenir les détails d'un concept
 def get_concept_details(terminology_id, concept_id):
   url = f"https://smt.esante.gouv.fr/api/concepts/detail"
   headers = {"accept": "*/*"}
     params = {
     'terminologyId': terminology_id,
     'conceptId': concept_id
   }
   response = requests.get(url, headers=headers, params=params)
   return response.json()


 # Traduire le terme
 def translate_term(term, from_lang='fr', to_lang='en'):

   search_results = search_term(term, language=from_lang)
   if search_results['concepts']:
     # Obtenir le premier concept trouvé
     concept = search_results['concepts'][0]
     concept_id = concept['id']
     terminology_id = concept['terminologyName']

     # Obtenir les détails d'un concept.
     concept_details = get_concept_details(terminology_id, concept_id)
     if concept_details:
       # Retourner le terme préféré.
       pref_label = concept_details.get('prefLabel' + to_lang.capitalize(), [])
       if pref_label:
         return pref_label[0]
       else:
         return f"No prefLabel found for '{term}' in {to_lang}."
     else:
        return f"No concepts found for '{term}'."

Exemple concret

Pour illustrer son fonctionnement, prenons l'exemple du terme "Dermatoses dues aux rayonnements ionisants". Lorsque le script est exécuté, il recherche d'abord ce terme dans le graphe de données du SMT en français, puis récupère sa traduction anglaise "Dermatoses due to ionizing radiation", accompagnée de toute information pertinente associée.

term_to_translate = "Dermatoses dues aux rayonnements ionisants"
translated_term = translate_term(term_to_translate, from_lang='fr', to_lang='en')
print(f"The translation of '{term_to_translate}' is: {translated_term}")

--------

The translation of 'Dermatoses dues aux rayonnements ionisants' is: Dermatoses due to ionizing radiation

# +-------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+
# |                                    Terme Médical en Français                                    |                             Traduit via le SMT                             |
# +-------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+
# | Aiguilles hypodermiques pour seringue                                                           | Hypodermic Syringe Needles                                                 |
# | Poches et flacons de nutrition entérale (y compris ceux pour nutrition par pompe), usage unique | Enteral Feeding Bags and Containers (including those via pump), Single-Use |
# | Cancer de la prostate                                                                           | Malignant Neoplasm of Prostate                                             |
# | Maladie d'Alzheimer                                                                             | Alzheimer's Disease                                                        |
# | Alcaloïdes du Rauwolfia                                                                         | Rauwolfia Alkaloids                                                        |
# | Le cancer colorectal                                                                            | Colorectal Cancer                                                          |
# +-------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------+

En conclusion, l’étude de cas présentée démontre une application pratique du Serveur Multi Terminologies (SMT), illustrant comment ses API peuvent être étendues au-delà de leur usage premier. Il est important de souligner que, bien que le SMT ne soit pas intrinsèquement conçu pour la traduction de termes médicaux, la flexibilité et la richesse de ses API permettent des utilisations innovantes comme celle que nous avons explorée. Cette adaptabilité ouvre de nouvelles avenues pour les professionnels de la santé et les développeurs de logiciels, leur donnant les moyens de tirer parti des vastes ensembles de données terminologiques intégrées dans le SMT.


메타데이터
post_id
c6a7fc810405
slug
utilisation-des-api-du-smt-de-lans-traduction-des-termes-médicaux-du-français-vers-l-anglais-c6a7fc810405
url
https://medium.com/@tay.me/utilisation-des-api-du-smt-de-lans-traduction-des-termes-m%C3%A9dicaux-du-fran%C3%A7ais-vers-l-anglais-c6a7fc810405
canonical_url
https://medium.com/@tay.me/utilisation-des-api-du-smt-de-lans-traduction-des-termes-m%C3%A9dicaux-du-fran%C3%A7ais-vers-l-anglais-c6a7fc810405
author_url
https://medium.com/@tay.me
status
ok
fetched_at
2026-06-28 04:42:08