#LyX 2.0 created this file. For more info see http://www.lyx.org/
\lyxformat 413
\begin_document
\begin_header
\textclass article
\begin_preamble
\usepackage{ae,aecompl}
\end_preamble
\use_default_options false
\maintain_unincluded_children false
\language french
\language_package default
\inputencoding auto
\fontencoding global
\font_roman default
\font_sans default
\font_typewriter default
\font_default_family default
\use_non_tex_fonts false
\font_sc false
\font_osf false
\font_sf_scale 100
\font_tt_scale 100

\graphics default
\default_output_format default
\output_sync 0
\bibtex_command default
\index_command default
\paperfontsize default
\spacing single
\use_hyperref false
\papersize a4paper
\use_geometry true
\use_amsmath 1
\use_esint 0
\use_mhchem 0
\use_mathdots 1
\cite_engine basic
\use_bibtopic false
\use_indices false
\paperorientation portrait
\suppress_date false
\use_refstyle 0
\index Index
\shortcut idx
\color #008000
\end_index
\leftmargin 1cm
\topmargin 1cm
\rightmargin 1cm
\bottommargin 2cm
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\paragraph_indentation default
\quotes_language english
\papercolumns 1
\papersides 1
\paperpagestyle default
\tracking_changes false
\output_changes false
\html_math_output 0
\html_css_as_file 0
\html_be_strict false
\end_header

\begin_body

\begin_layout Title
PyMedTermino
\end_layout

\begin_layout Author
Jean-Baptiste Lamy
\end_layout

\begin_layout Standard
\begin_inset ERT
status open

\begin_layout Plain Layout


\backslash
sloppy
\end_layout

\end_inset


\end_layout

\begin_layout Section
Introduction
\end_layout

\begin_layout Standard
PyMedTermino (Terminologies Médicales en Python) est un module Python permettant
 d'accéder facilement aux principales terminologies médicales en Python.
 Les terminologies suivantes sont proposées :
\end_layout

\begin_layout Itemize
La SNOMED CT
\end_layout

\begin_layout Itemize
La CIM10
\end_layout

\begin_layout Itemize
L'UMLS
\end_layout

\begin_layout Itemize
Les icônes VCM (une terminologie à base d'icônes développée à l'université
 Paris 13)
\end_layout

\begin_layout Standard
Les principales fonctionnalités de PyMedTermino sont les suivantes :
\end_layout

\begin_layout Itemize
Une API unique permettant d'accéder à toutes les terminologies
\end_layout

\begin_layout Itemize
Recherche textuelle optimisée
\end_layout

\begin_layout Itemize
Accès aux libellés, synonymes et traductions
\end_layout

\begin_layout Itemize
Gestion des concepts et des relations entre concepts
\end_layout

\begin_layout Itemize
Correspondance entre terminologies, via l'UMLS ou via des fichiers de correspond
ances manuelles
\end_layout

\begin_layout Standard
\begin_inset space ~
\end_inset


\end_layout

\begin_layout Standard
Pour la SNOMED CT et la CIM10, les données ne sont pas incluses (car elles
 ne sont pas librement redistribuables) mais peuvent être téléchargées au
 format XML gratuitement.
 PyMedTermino contient des scripts pour exporter ces données dans des bases
 de données SQLite3.
\end_layout

\begin_layout Standard
Pour l'UMLS, les données ne sont pas incluses (pour les mêmes raisons, et
 car elles sont très volumineuses).
 PyMedTermino peut en revanche se connecter à un serveur MySQL contenant
 les bases UMLS telles que fournies par la NLM.
\end_layout

\begin_layout Standard
Pour les icônes VCM, l'ensemble des terminologies est fourni sous forme
 d'ontologie OWL et de bases de données SQLite3.
 En revanche, les images des icônes ne sont pas incluses et doivent être
 téléchargées séparément (ou bien vous pouvez utiliser le serveur iconique
 pour générer les icônes) : PyMedTermino ne comprend que la partie 
\begin_inset Quotes eld
\end_inset

terminologique
\begin_inset Quotes erd
\end_inset

 de VCM.
\end_layout

\begin_layout Standard
\begin_inset space ~
\end_inset


\end_layout

\begin_layout Standard
PyMedTermino a été réalisé au laboratoire LIM&BIO, Université Paris 13,
 Sorbonne Paris Cité, par Jean-Baptiste Lamy.
 PyMedTermino est disponible sous licence GNU LGPL.
\end_layout

\begin_layout Standard
\begin_inset space ~
\end_inset


\end_layout

\begin_layout Standard
Voici un exemple des possibilités de PyMedTermino :
\end_layout

\begin_layout Standard
\begin_inset space ~
\end_inset


\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT.search("tachycardia*")
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[3424008]  # Tachycardia (finding)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[4006006]  # Fetal tachycardia affecting management of mother
 (disorder)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[6456007]  # Supraventricular tachycardia (disorder)
\end_layout

\begin_layout LyX-Code
...]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[3424008].parents
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[301113001]  # Finding of heart rate (finding)
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[3424008].children
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[11092001]  # Sinus tachycardia (finding)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[278086000]  # Baseline tachycardia (finding)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[162992001]  # On examination - pulse rate tachycardia (finding)
\end_layout

\begin_layout LyX-Code
...]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> list(SNOMEDCT[3424008].ancestors_no_double())
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[301113001]  # Finding of heart rate (finding)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[106066004]  # Cardiac rhythm AND/OR rate finding (finding)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[250171008]  # Clinical history and observation findings (finding)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[404684003]  # Clinical finding (finding)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[138875005]  # SNOMED CT Concept (SNOMED RT+CTV3)
\end_layout

\begin_layout LyX-Code
...]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[3424008].relations
\end_layout

\begin_layout LyX-Code
set(['INVERSE_has_definitional_manifestation', 'finding_site', 'interprets',
 'has_interpretation', 'INVERSE_associated_with'])
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[3424008].finding_site
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[24964005]  # Cardiac conducting system structure (body structure)
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[3424008] >> VCM   # Maps the SNOMED CT concept to VCM icon
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  VCM[u"current--hyper--heart_rhythm"]  # 
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Section
Installation
\end_layout

\begin_layout Enumerate
Extraire l'archive PyMedTermino-X.Y.tar.bz2
\end_layout

\begin_layout Enumerate
Après inscription auprès de la NLM, télécharger les données de la SNOMED
 CT :
\end_layout

\begin_deeper
\begin_layout Itemize
\begin_inset CommandInset href
LatexCommand href
target "http://www.nlm.nih.gov/research/umls/licensedcontent/snomedctfiles.html"

\end_inset


\begin_inset Newline newline
\end_inset

(télécharger 
\begin_inset Quotes eld
\end_inset

SnomedCT_Release_INT_<date>.zip
\begin_inset Quotes erd
\end_inset

 et le décompresser)
\end_layout

\begin_layout Itemize
\begin_inset CommandInset href
LatexCommand href
target "http://www.nlm.nih.gov/research/umls/Snomed/core_subset.html"

\end_inset


\begin_inset Newline newline
\end_inset

(télécharger 
\begin_inset Quotes eld
\end_inset

SNOMEDCT_CORE_SUBSET_<date>
\begin_inset Quotes erd
\end_inset

 et le décompresser)
\end_layout

\end_deeper
\begin_layout Enumerate
Après inscription, télécharger les données de la CIM10 ainsi que les traductions
 :
\end_layout

\begin_deeper
\begin_layout Itemize
\begin_inset CommandInset href
LatexCommand href
target "http://apps.who.int/classifications/apps/icd/ClassificationDownload/DLArea/Download.aspx"

\end_inset


\begin_inset Newline newline
\end_inset

(télécharger la CIM10 au format 
\begin_inset Quotes eld
\end_inset

ClaML
\begin_inset Quotes erd
\end_inset

 et la dézipper)
\end_layout

\begin_layout Itemize
\begin_inset CommandInset href
LatexCommand href
target "http://www.icd10.ch/"

\end_inset


\begin_inset Newline newline
\end_inset

(optionnel, pour les traductions françaises et allemandes ; télécharger
 la CIM10 au format XML et la dézipper)
\end_layout

\end_deeper
\begin_layout Enumerate
Éditer le fichier setup.py et renseigner les 4 chemins où vous avez décompressés
 les données, par exemple :
\end_layout

\begin_deeper
\begin_layout LyX-Code
SNOMEDCT_DIR = "/home/jiba/telechargements/base_med/SnomedCT_Release_INT_2013073
1"
\end_layout

\begin_layout LyX-Code
SNOMEDCT_CORE_FILE = "/home/jiba/telechargements/base_med/SNOMEDCT_CORE_SUBSET_2
01308.txt"
\end_layout

\begin_layout LyX-Code
ICD10_DIR = "/home/jiba/telechargements/base_med/icd10"
\end_layout

\begin_layout LyX-Code
CIM10_DIR = "/home/jiba/telechargements/base_med/cim10"
\end_layout

\begin_layout Standard
Note : vous pouvez laisser vide les chemins si vous ne souhaitez pas installer
 les terminologies correspondantes.
\end_layout

\end_deeper
\begin_layout Enumerate
Compiler PyMedTermino et convertir les données télécharger en bases de données
 SQL SQLite3 :
\end_layout

\begin_deeper
\begin_layout LyX-Code
python setup.py build
\end_layout

\begin_layout Standard
Attention : la création des bases de données nécessite un espace disque
 important (~1-2 Go).
\end_layout

\end_deeper
\begin_layout Enumerate
Obtenir les droits administrateurs.
 Sous Linux, selon votre distribution, utilisez l'une d'une commande suivante
 :
\end_layout

\begin_deeper
\begin_layout LyX-Code
su # Mageia,...
\end_layout

\begin_layout LyX-Code
sudo -i # Ubuntu, Linux Mint,...
\end_layout

\end_deeper
\begin_layout Enumerate
Installer PyMedTermino :
\end_layout

\begin_deeper
\begin_layout LyX-Code
python setup.py install
\end_layout

\end_deeper
\begin_layout Enumerate
Nettoyer le répertoire d'installation (optionnel, mais cela permet de libérer
 un espace disque important !) :
\end_layout

\begin_deeper
\begin_layout LyX-Code
python setup.py clean
\end_layout

\end_deeper
\begin_layout Subsection
Problèmes fréquents
\end_layout

\begin_layout Subsubsection
OperationalError: no such module: fts4
\end_layout

\begin_layout Standard
Sous Windows, si vous rencontrez ce problème à l'installation, il vous faut
 mettre à jour la DLL Sqlite3.
 Pour cela, télécharger la dernière version à partir de 
\begin_inset CommandInset href
LatexCommand href
target "http://www.sqlite.org/download.html"

\end_inset

, et remplacer la DLL dans le répertoire Python27/DLLs par la version téléchargé
e.
\end_layout

\begin_layout Subsubsection
IOError: [Errno 22] Invalid argument
\end_layout

\begin_layout Standard
Sous Windows, on obtient cette erreur si les fichiers volumineux de la SNOMED
 CT sont sur un répertoire partagé.
 C'est une limitation lié au système de Microsoft, il faut donc impérativement
 avoir les fichier de la SNOMED en local.
\end_layout

\begin_layout Section
Chargement des modules et paramètres globaux
\end_layout

\begin_layout LyX-Code
>>> import pymedtermino
\end_layout

\begin_layout LyX-Code
>>> pymedtermino.LANGUAGE = "fr"
\end_layout

\begin_layout LyX-Code
>>> pymedtermino.REMOVE_SUPPRESSED_CONCEPTS = 1
\end_layout

\begin_layout Standard
Les paramètres globaux suivants sont disponibles :
\end_layout

\begin_layout Itemize
pymedtermino.DATA_DIR : indique le répertoire où sont présents les fichiers
 de base de données SQLite3 contenant les terminologies.
 Valeur par défaut : le répertoire de PyMedTermino.
\end_layout

\begin_layout Itemize
pymedtermino.LANGUAGE : indique la langue utiliser par défaut pour afficher
 les termes, lorsque plusieurs langues sont disponibles.
 Si la langue demandé n'est pas disponible, l'anglais est utilisé à défaut.
 ATTENTION : ce paramètre doit être renseigné AVANT de charger les terminologies.
 Valeur par défaut : "en" (anglais).
\end_layout

\begin_layout Itemize
pymedtermino.REMOVE_SUPPRESSED_CONCEPTS : indique s'il faut retirer ou non
 les concepts marqués comme supprimés ou dépréciés dans les terminologies.
 Valeur par défaut : 1 (vrai).
\end_layout

\begin_layout Itemize
pymedtermino.REMOVE_SUPPRESSED_TERMS : indique s'il faut retirer ou non les
 termes (=libellés textuels) marqués comme supprimés ou dépréciés dans les
 terminologies.
 Valeur par défaut : 1 (vrai).
\end_layout

\begin_layout Itemize
pymedtermino.REMOVE_SUPPRESSED_RELATIONS : indique s'il faut retirer ou non
 les relations marquées comme supprimées ou dépréciées dans les terminologies.
 Valeur par défaut : 1 (vrai).
\end_layout

\begin_layout Section
SNOMED CT
\end_layout

\begin_layout Subsection
Chargement des modules
\end_layout

\begin_layout Standard
Ensuite, il est possible d'importer en Python la SNOMED CT :
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino import * 
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino.snomedct import *
\end_layout

\begin_layout Subsection
Concepts
\end_layout

\begin_layout Standard
L'objet SNOMEDCT représente la terminologie SNOMED CT.
 Un concept SNOMED CT peut être obtenu à partir de son code (ici nous allons
 prendre comme exemple le code 302509004, correspondant au cœur) en indexant
 cet objet :
\end_layout

\begin_layout LyX-Code
>>> concept = SNOMEDCT[302509004]
\end_layout

\begin_layout LyX-Code
>>> concept
\end_layout

\begin_layout LyX-Code
SNOMEDCT[302509004]  # Entire heart (body structure)
\end_layout

\begin_layout Standard
La méthode has_concept() permet de vérifier si un code correspond à un concept
 ou non :
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT.has_concept("invalid_code")
\end_layout

\begin_layout LyX-Code
False
\end_layout

\begin_layout Standard
Chaque concept possède un code et un terme (= libellé correspondant au terme
 préféré) :
\end_layout

\begin_layout LyX-Code
>>> concept.code
\end_layout

\begin_layout LyX-Code
302509004
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> concept.term
\end_layout

\begin_layout LyX-Code
u'Entire heart (body structure)'
\end_layout

\begin_layout Standard
La SNOMED CT propose aussi des termes synonymes (notez le 
\begin_inset Quotes eld
\end_inset

s
\begin_inset Quotes erd
\end_inset

 sur 
\begin_inset Quotes eld
\end_inset

terms
\begin_inset Quotes erd
\end_inset

) :
\end_layout

\begin_layout LyX-Code
>>> concept.terms
\end_layout

\begin_layout LyX-Code
[u'Heart', u'Entire heart', u'Entire heart (body structure)']
\end_layout

\begin_layout LyX-Code

\end_layout

\begin_layout Subsection
Recherche textuelle
\end_layout

\begin_layout Standard
La méthode search() permet d'effectuer une recherche textuelle, parmi les
 libellées des concepts et leurs synonymes :
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT.search("Cardiac structure")
\end_layout

\begin_layout LyX-Code
[ SNOMEDCT[80891009] # Heart structure (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[308793001] # Embryonic cardiac structure (body structure)
\end_layout

\begin_layout LyX-Code
...]
\end_layout

\begin_layout Standard
La recherche textuelle utilise le moteur FTS de SQLite, il est donc possible
 d'utiliser les fonctionnalités offertes par ce moteur.
 Par exemple pour rechercher tous les mots commençant par un préfixe donné
 :
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT.search("osteo*")
\end_layout

\begin_layout LyX-Code
[ SNOMEDCT[1551001]  # Osteomyelitis of femur (disorder)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[4598005]  # Osteomalacia (disorder)
\end_layout

\begin_layout LyX-Code
...]
\end_layout

\begin_layout Subsection
Relations est-un : concepts parents et enfants
\end_layout

\begin_layout Standard
Les attributs 
\begin_inset Quotes eld
\end_inset

parents
\begin_inset Quotes erd
\end_inset

 et 
\begin_inset Quotes eld
\end_inset

children
\begin_inset Quotes erd
\end_inset

 permettent d'obtenir la liste des concepts parents et des concepts enfants
 (c'est-à-dire ceux reliés au concept par des relations est-un) :
\end_layout

\begin_layout LyX-Code
>>> concept.parents
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[116004006]  # Hollow viscus (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[80891009]  # Heart structure (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[187639008]  # Entire thoracic viscus (body structure)
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout LyX-Code
>>> concept.children
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[195591003]  # Entire transplanted heart (body structure)
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout Standard
Les méthodes ancestors() et descendants() permettent de parcourir les concepts
 ancêtres (les parents, les parents des parents, etc) et les concepts descendant
s (les enfants, les enfants des enfants, etc) :
\end_layout

\begin_layout LyX-Code
>>> for ancestor in concept.ancestors(): print ancestor
\end_layout

\begin_layout LyX-Code
SNOMEDCT[116004006]  # Hollow viscus (body structure)
\end_layout

\begin_layout LyX-Code
SNOMEDCT[118760003]  # Entire viscus (body structure)
\end_layout

\begin_layout LyX-Code
SNOMEDCT[272625005]  # Entire body organ (body structure)
\end_layout

\begin_layout LyX-Code
[...]
\end_layout

\begin_layout Standard
Les méthodes ancestors() et descendants() retournent des générateurs Python,
 pour obtenir la liste des ancêtres ou des descendants il faut utiliser
 la fonction list() :
\end_layout

\begin_layout LyX-Code
>>> concept.ancestors()
\end_layout

\begin_layout LyX-Code
<generator object ancestors at 0xb3f734c>
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> list(concept.ancestors())
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[116004006]  # Hollow viscus (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[118760003]  # Entire viscus (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[272625005]  # Entire body organ (body structure)
\end_layout

\begin_layout LyX-Code
,...]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> list(concept.descendants())
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[195591003]  # Entire transplanted heart (body structure)
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout LyX-Code

\end_layout

\begin_layout Standard
Les méthodes ancestors_no_double() et descendants_no_double() fonctionnent
 de la même manière mais en éliminant les doublons.
 Les méthodes self_and_ancestors() et self_and_descendants() fonctionnent
 de la même manière mais retournent aussi le concept de départ lui-même.
 Les méthodes self_and_ancestors_no_double() et self_and_descendants_no_double()
 combinent les deux comportements.
\end_layout

\begin_layout Standard
Enfin, la méthode is_a() permet de tester si un concept est un descendant
 d'un autre concept :
\end_layout

\begin_layout LyX-Code
>>> concept.is_a(SNOMEDCT[272625005])
\end_layout

\begin_layout LyX-Code
True
\end_layout

\begin_layout Subsection
Relations partie-de
\end_layout

\begin_layout Standard
Les attributs 
\begin_inset Quotes eld
\end_inset

part_of
\begin_inset Quotes erd
\end_inset

 et 
\begin_inset Quotes eld
\end_inset

INVERSE_part_of
\begin_inset Quotes erd
\end_inset

 permettent d'accéder aux concepts partie ou tout :
\end_layout

\begin_layout LyX-Code
>>> concept.part_of
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[362010009] # Entire heart AND pericardium (body structure)
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> concept.INVERSE_part_of
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[102298001] # Structure of chordae tendineae cordis (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[181285005] # Entire heart valve (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[181288007] # Entire tricuspid valve (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[181293005] # Entire cardiac wall (body structure)
\end_layout

\begin_layout LyX-Code
,...]
\end_layout

\begin_layout Standard
Les méthodes ancestor_parts() et descendant_parts() retournent un générateur
 Python permettant de parcourir les super- ou sous-parties du concept :
\end_layout

\begin_layout LyX-Code
>>> list(concept.ancestor_parts())
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[362010009] # Entire heart AND pericardium (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[362688008] # Entire middle mediastinum (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[181217005] # Entire mediastinum (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[302551006] # Entire thorax (body structure)
\end_layout

\begin_layout LyX-Code
,...]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> list(concept.descendant_parts())
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[181285005]  # Entire heart valve (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[192664000]  # Entire cardiac valve leaflet (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[192747009]  # Structure of cardiac valve cusp (body structure)
\end_layout

\begin_layout LyX-Code
,...]
\end_layout

\begin_layout Standard
Enfin, la méthode is_part_of() permet de tester si un concept est une partie
 d'un autre concept (de manière récursive) :
\end_layout

\begin_layout LyX-Code
>>> concept.is_part_of(SNOMEDCT[91744000])
\end_layout

\begin_layout LyX-Code
False
\end_layout

\begin_layout Subsection
\begin_inset CommandInset label
LatexCommand label
name "sub:Autres-relations-SNOMEDCT"

\end_inset

Autres relations
\end_layout

\begin_layout Standard
L'attribut 
\begin_inset Quotes eld
\end_inset

relations
\begin_inset Quotes erd
\end_inset

 permet d'obtenir la liste des types de relations disponibles pour ce concept.
 Les relations est-un (is_a) ne sont jamais incluses dans 
\begin_inset Quotes eld
\end_inset

relations
\begin_inset Quotes erd
\end_inset

, elles sont gérées via les attributs 
\begin_inset Quotes eld
\end_inset

parents
\begin_inset Quotes erd
\end_inset

 et 
\begin_inset Quotes eld
\end_inset

children
\begin_inset Quotes erd
\end_inset

 vus précédemment, en revanche les relations partie-de y figurent.
 Les relations inverses sont préfixées par 
\begin_inset Quotes eld
\end_inset

INVERSE_
\begin_inset Quotes erd
\end_inset

.
\end_layout

\begin_layout LyX-Code
>>> concept = SNOMEDCT[3424008]
\end_layout

\begin_layout LyX-Code
>>> concept
\end_layout

\begin_layout LyX-Code
SNOMEDCT[3424008] # Tachycardia (finding)
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> concept.relations
\end_layout

\begin_layout LyX-Code
set([u'INVERSE_has_definitional_manifestation', u'finding_site', u'interprets',
 u'has_interpretation', u'INVERSE_associated_with'])
\end_layout

\begin_layout Standard
Chaque relation correspond à un attribut du concept, qui retourne une liste
 avec le ou les valeurs correspondantes :
\end_layout

\begin_layout LyX-Code
>>> concept.finding_site
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[24964005] # Cardiac conducting system structure (body structure)
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout LyX-Code
>>> concept.interprets
\end_layout

\begin_layout LyX-Code
[SNOMEDCT[364075005]  # Heart rate (observable entity)
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout LyX-Code
>>> concept.INVERSE_has_definitional_manifestation
\end_layout

\begin_layout LyX-Code
[ SNOMEDCT[413342000]  # Neonatal tachycardia (disorder)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[195069001]  # Paroxysmal atrial tachycardia (disorder)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[195070000]  # Paroxysmal atrioventricular tachycardia (disorder)
\end_layout

\begin_layout LyX-Code
,...]
\end_layout

\begin_layout Subsection
Groupes de relations
\end_layout

\begin_layout Standard
Dans la SNOMED CT, les relations peuvent être regroupées en groupes.
 L'attribut 
\begin_inset Quotes eld
\end_inset

groups
\begin_inset Quotes erd
\end_inset

 permet d'obtenir la liste des groupes de relation.
 Il est ensuite possible d'accéder aux relations du groupe comme pour un
 concept.
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[186675001]
\end_layout

\begin_layout LyX-Code
SNOMEDCT[186675001]  # Viral pharyngoconjunctivitis (disorder)
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[186675001].groups
\end_layout

\begin_layout LyX-Code
[<Group associated_morphology Inflammation (morphologic abnormality); finding_si
te Conjunctival structure (body structure)>, <Group associated_morphology
 Inflammation (morphologic abnormality); finding_site Pharyngeal structure
 (body structure)>]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[186675001].groups[0].relations
\end_layout

\begin_layout LyX-Code
set([u'associated_morphology', u'finding_site'])
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[186675001].groups[0].finding_site
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  SNOMEDCT[29445007]  # Conjunctival structure (body structure)
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[186675001].groups[0].associated_morphology
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  SNOMEDCT[23583003]  # Inflammation (morphologic abnormality)
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Standard
Les relations qui n'appartiennent à aucun groupe sont réunies dans un groupe
 
\begin_inset Quotes eld
\end_inset

hors-groupe
\begin_inset Quotes erd
\end_inset

 (qui ne figure pas dans la liste 
\begin_inset Quotes eld
\end_inset

groups
\begin_inset Quotes erd
\end_inset

).
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[186675001].out_of_group
\end_layout

\begin_layout LyX-Code
<Group causative_agent Virus (organism); pathological_process Infectious
 process (qualifier value)>
\end_layout

\begin_layout Subsection
Parcourir la SNOMED CT
\end_layout

\begin_layout Standard
Pour obtenir les premiers niveaux de la terminologie (= les concepts racines),
 il faut utiliser la méthode first_levels() :
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT.first_levels()
\end_layout

\begin_layout LyX-Code
[ SNOMEDCT[123037004] # Body structure (body structure)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[404684003] # Clinical finding (finding)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[308916002] # Environment or geographical location (environment
 / location)
\end_layout

\begin_layout LyX-Code
,...]
\end_layout

\begin_layout Standard
La méthode all_concepts() retourne un générateur Python qui parcourt tous
 les concepts de la SNOMED CT.
\end_layout

\begin_layout LyX-Code
>>> for concept in SNOMEDCT.all_concepts(): [...]
\end_layout

\begin_layout Standard
La méthode all_concepts_no_double() fonctionne de la même manière mais élimine
 les doublons.
\end_layout

\begin_layout LyX-Code
>>> for concept in SNOMEDCT.all_concepts_no_double(): [...]
\end_layout

\begin_layout Subsection
CORE Problem List
\end_layout

\begin_layout Standard
La CORE Problem List est un sous-ensemble de la SNOMED CT approprié pour
 le codage de l'information clinique.
 L'attribut 
\begin_inset Quotes eld
\end_inset

is_in_core
\begin_inset Quotes erd
\end_inset

 permet de savoir si un concept appartient à la CORE Problem List :
\end_layout

\begin_layout LyX-Code
>>> concept.is_in_core
\end_layout

\begin_layout LyX-Code
1
\end_layout

\begin_layout Standard
Il est aussi possible de parcourir tous les concepts de la CORE Problem
 List :
\end_layout

\begin_layout LyX-Code
>>> for core_concept in SNOMEDCT.CORE_problem_list(): [...]
\end_layout

\begin_layout Subsection
Signes cliniques associées à un concept
\end_layout

\begin_layout Standard
La méthode associated_clinical_findings() permet de lister tous les signes
 cliniques associés à un concept de structure anatomique (
\emph on
body structure
\emph default
) ou de morphologie, y compris leurs descendants et leur parties descendantes.
 Par exemple pour lister toutes les maladies des structures cardiaques :
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[80891009]
\end_layout

\begin_layout LyX-Code
SNOMEDCT[80891009]  # Heart structure (body structure)
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[80891009].associated_clinical_findings()
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  SNOMEDCT[250981008]  # Abnormal aortic cusp (disorder)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[250982001]  # Commissural fusion of aortic cusp (disorder)
\end_layout

\begin_layout LyX-Code
, SNOMEDCT[250984000]  # Torn aortic cusp (disorder)
\end_layout

\begin_layout LyX-Code
,...]
\end_layout

\begin_layout Section
CIM10
\end_layout

\begin_layout Subsection
Chargement des modules
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino import * 
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino.icd10 import *
\end_layout

\begin_layout Subsection
Concepts
\end_layout

\begin_layout Standard
L'objet ICD10 permet d'accéder aux concepts de la CIM10.
 Cet objet fonctionne de manière très proche de la terminologie SNOMED CT
 décrite précédemment.
\end_layout

\begin_layout LyX-Code
>>> ICD10["E10"]
\end_layout

\begin_layout LyX-Code
ICD10[u"E10"]  # diabète sucré insulino-dépendant
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> ICD10["E10"].parents
\end_layout

\begin_layout LyX-Code
[ICD10[u"E10-E14"]  # diabète sucré
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> list(ICD10["E10"].ancestors())
\end_layout

\begin_layout LyX-Code
[ ICD10[u"E10-E14"]  # diabète sucré
\end_layout

\begin_layout LyX-Code
, ICD10[u"IV"]  # maladies endocriniennes, nutritionnelles et métaboliques
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout Standard
La CIM10 étant monoaxiale, la liste parents contient au plus un seul concept
 parent.
\end_layout

\begin_layout Subsection
Traduction
\end_layout

\begin_layout Standard
La CIM10 est disponible en plusieurs langues.
 La méthode get_translation() permet d'obtenir la traduction dans une langue
 donnée :
\end_layout

\begin_layout LyX-Code
>>> print(ICD10["E10"].get_translation("fr"))
\end_layout

\begin_layout LyX-Code
diabète sucré insulino-dépendant
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> print(ICD10["E10"].get_translation("en"))
\end_layout

\begin_layout LyX-Code
Insulin-dependent diabetes mellitus
\end_layout

\begin_layout Standard
La langue utilisée par défaut est défini par pymedtermino.LANGUAGE (qui doit
 être défini AVANT de charger les concepts).
\end_layout

\begin_layout Subsection
Relations
\end_layout

\begin_layout Standard
Les relations incluent les relations d'inclusion et d'exclusion de la CIM10.
\end_layout

\begin_layout LyX-Code
>>> ICD10["E10"].relations
\end_layout

\begin_layout LyX-Code
set([u'inclusion', u'exclusion', u'modifierlink'])
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> ICD10["E10"].exclusion
\end_layout

\begin_layout LyX-Code
[Text(ICD10[u"E10"]  # diabète sucré insulino-dépendant
\end_layout

\begin_layout LyX-Code
, 'exclusion', u'diabetes mellitus (in) malnutrition-related E12.-', 0, ICD10[u"E
12"]  # diabète sucré de malnutrition
\end_layout

\begin_layout LyX-Code
)...]
\end_layout

\begin_layout Section
UMLS
\end_layout

\begin_layout Subsection
Chargement des modules
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino import * 
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino.umls import * 
\end_layout

\begin_layout Standard
Une fois les modules importées, il faut se connecter à la base de données
 MySQL contenant les données de l'UMLS, de la manière suivante :
\end_layout

\begin_layout LyX-Code
>>> connect_to_umls_db(hôte, utilisateur, mot_de_passe, nom_de_la_base =
 "umls", encodage = "latin1")
\end_layout

\begin_layout Standard
Hôte, utilisateur, mot_de_passe doivent être précisés.
\end_layout

\begin_layout Subsection
Concepts UMLS (CUI)
\end_layout

\begin_layout Standard
Dans UMLS, les CUI correspondent à des concepts : un même concept rassemble
 des termes et des codes équivalent de différentes terminologies.
\end_layout

\begin_layout Standard
PyMedTermino permet d'accéder aux CUI via la terminologie UMLS_CUI :
\end_layout

\begin_layout LyX-Code
>>> UMLS_CUI[u"C0085580"]
\end_layout

\begin_layout LyX-Code
UMLS_CUI[u"C0085580"] # Hypertension artérielle essentielle (MDRJPN, SNOMEDCT,
 ICD10, BI, CCS, MDRPOR, COSTAR, ICD10DUT, KCD5, RCD, MDRGER, AOD, MDRFRE,
 MDRCZE, SCTSPA, DMDICD10, ICPC2P, OMIM, MDRITA, MDR, MEDCIN, ICD10CM, MDRDUT,
 ICD10AM, MTH, CSP, MDRSPA, SNM, DXP, NCI, PSY, SNMI, ICD9CM, CCPSS)
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> UMLS_CUI[u"C0085580"].term
\end_layout

\begin_layout LyX-Code
u'Hypertension art
\backslash
xe9rielle essentielle'
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> UMLS_CUI[u"C0085580"].terms
\end_layout

\begin_layout LyX-Code
['Hypertension art
\backslash
xe9rielle essentielle', 'Hypertension primitive', 'Hypertension essentielle,
 non pr
\backslash
xe9cis
\backslash
xe9e', 'Hypertension essentielle non pr
\backslash
xe9cis
\backslash
xe9e']
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> UMLS_CUI[u"C0085580"].original_terminologies
\end_layout

\begin_layout LyX-Code
set(['MDRJPN', 'SNOMEDCT', 'ICD10', 'BI', 'CCS', 'MDRPOR', 'COSTAR', 'ICD10DUT',
 'KCD5', 'RCD', 'MDRGER', 'AOD', 'MDRFRE', 'MDRCZE', 'SCTSPA', 'DMDICD10',
 'ICPC2P', 'OMIM', 'MDRITA', 'MDR', 'MEDCIN', 'ICD10CM', 'MDRDUT', 'ICD10AM',
 'MTH', 'CSP', 'MDRSPA', 'SNM', 'DXP', 'NCI', 'PSY', 'SNMI', 'ICD9CM', 'CCPSS'])
\end_layout

\begin_layout LyX-Code

\end_layout

\begin_layout Standard
Il est possible de manipuler les relations des CUI de la même manière que
 pour les concepts SNOMED CT (voir section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sub:Autres-relations-SNOMEDCT"

\end_inset

), par exemple :
\end_layout

\begin_layout LyX-Code
>>> UMLS_CUI[u"C0085580"].relations
\end_layout

\begin_layout LyX-Code
set(['has_finding_site', 'INVERSE_translation_of', 'SIB', 'INVERSE_has_alias',
 'may_be_a', None, 'RQ', 'INVERSE_mapped_from',...])
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> UMLS_CUI[u"C0085580"].has_finding_site
\end_layout

\begin_layout LyX-Code
[UMLS_CUI[u"C0459964"]  # Systemic arterial structure (RCD, SCTSPA, SNOMEDCT)
\end_layout

\begin_layout Subsection
Concept UMLS issus des terminologies sources (AUI)
\end_layout

\begin_layout Standard
La terminologie UMLS_AUI permet d'accéder aux atomes de l'UMLS.
 Un atome UMLS correspond à un concept dans une terminologie source donnée
 ; 
\begin_inset Quotes eld
\end_inset

diabète de type 2 dans la CIM10
\begin_inset Quotes erd
\end_inset

 est un atome différent de 
\begin_inset Quotes eld
\end_inset

diabète de type 2 dans la SNOMED CT
\begin_inset Quotes erd
\end_inset

.
\end_layout

\begin_layout LyX-Code
>>> UMLS_AUI[u"A0930328"]
\end_layout

\begin_layout LyX-Code
UMLS_AUI[u"A0930328"] # Essential (primary) hypertension (ICD10)
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> UMLS_AUI[u"A0930328"].original_terminologies
\end_layout

\begin_layout LyX-Code
set(['ICD10'])
\end_layout

\begin_layout Subsection
Extraction de terminologie de l'UMLS
\end_layout

\begin_layout Standard
PyMedTermino permet d'extraire des terminologies de l'UMLS, et de les utiliser
 avec les codes des terminologies sources (plutôt que les AUI), par exemple
 pour extraire la SNOMED CT, la CIM10 et la CISP 2 :
\end_layout

\begin_layout LyX-Code
>>> UMLS_SNOMEDCT  = UMLS_AUI.extract_terminology("SNOMEDCT", has_int_code
 = 1)
\end_layout

\begin_layout LyX-Code
>>> UMLS_ICD10     = UMLS_AUI.extract_terminology("ICD10")
\end_layout

\begin_layout LyX-Code
>>> UMLS_ICPC2EENG = UMLS_AUI.extract_terminology("ICPC2EENG")
\end_layout

\begin_layout Standard
Le premier paramètre de la fonction UMLS_AUI.extract_terminology() est le
 nom de la terminologie à extraire (que l'on peut trouver dans la liste
 des sources de l'UMLS).
 Le paramètre optionnel 
\begin_inset Quotes eld
\end_inset

has_int_code = 1
\begin_inset Quotes erd
\end_inset

 permet d'indiquer que les codes de la terminologie source sont numériques,
 ce qui évite ensuite d'avoir à les mettre entre guillemets.
\end_layout

\begin_layout Standard
Les terminologies extraites peuvent ensuite être utilisées :
\end_layout

\begin_layout LyX-Code
>>> UMLS_ICD10["I10"]
\end_layout

\begin_layout LyX-Code
UMLS_ICD10[u"I10"]  # Essential (primary) hypertension (ICD10)
\end_layout

\begin_layout Standard
Il est possible d'accéder aux relations (lorsqu'elles existent) de la même
 manière que précédemment.
\end_layout

\begin_layout Subsection
Correspondance entre terminologies de l'UMLS
\end_layout

\begin_layout Standard
PyMedTermino défini automatiquement des correspondances entre les terminologies
 extraites de l'UMLS, par exemple :
\end_layout

\begin_layout LyX-Code
>>> UMLS_ICD10["I10"] >> UMLS_SNOMEDCT
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  UMLS_SNOMEDCT[u"59621000"]  # Essential hypertension (SNOMEDCT)
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Standard
Pour plus d'information sur les correspondances, voir la section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sec:Correspondances"

\end_inset

.
\end_layout

\begin_layout Section
VCM
\end_layout

\begin_layout Subsection
Chargement des modules
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino import * 
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino.vcm import *
\end_layout

\begin_layout Standard
Les bases de données décrivant les terminologies VCM sont incluses dans
 PyMedTermino.
\end_layout

\begin_layout Subsection
Icônes VCM
\end_layout

\begin_layout Standard
L'objet VCM permet d'accéder aux icônes VCM, identifiées par leur code,
 en français ou en anglais :
\end_layout

\begin_layout LyX-Code
>>> icon = VCM["en_cours--patho--coeur"]
\end_layout

\begin_layout LyX-Code
>>> icon = VCM["current--patho--heart"]
\end_layout

\begin_layout LyX-Code
>>> icon =  VCM["en_cours--patho-vaisseau--coeur--traitement--medicament--rien--
rien"]
\end_layout

\begin_layout LyX-Code

\end_layout

\begin_layout Standard
Le code d'icône inclut jusqu'à 7 composantes, séparé par deux tirets (--)
 :
\end_layout

\begin_layout Enumerate
La couleur centrale
\end_layout

\begin_layout Enumerate
Le ou les modificateurs de forme (séparés par un seul tiret si plusieurs)
\end_layout

\begin_layout Enumerate
Le pictogramme central
\end_layout

\begin_layout Enumerate
La couleur en exposant
\end_layout

\begin_layout Enumerate
Le pictogramme en exposant
\end_layout

\begin_layout Enumerate
Le pictogramme en second exposant
\end_layout

\begin_layout Enumerate
L'ombre
\end_layout

\begin_layout Standard
Les valeurs possibles pour chaque composante sont listées dans le lexique
 graphique (voir le lexique des pictogrammes VCM, ou la terminologie VCM_LEXICON
 ci-dessous).
 Les composantes absentes dans le code de l'icône sont remplacées par la
 valeur rien / empty.
\end_layout

\begin_layout Standard
Des attributs permettent de récupérer les différentes composantes d'une
 icône :
\end_layout

\begin_layout LyX-Code
>>> icon.central_color
\end_layout

\begin_layout LyX-Code
VCM_LEXICON[496] # Red_color
\end_layout

\begin_layout LyX-Code
>>> icon.modifiers
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  VCM_LEXICON[536]  # Modifier_vessel
\end_layout

\begin_layout LyX-Code
, VCM_LEXICON[504]  # Modifier_patho
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout LyX-Code
>>> icon.central_pictogram
\end_layout

\begin_layout LyX-Code
VCM_LEXICON[549]  # Pictogramme_heart
\end_layout

\begin_layout LyX-Code
>>> icon.central_pictogram.text_code
\end_layout

\begin_layout LyX-Code
heart
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> icon.top_right_color
\end_layout

\begin_layout LyX-Code
VCM_LEXICON[690]  # Green_color
\end_layout

\begin_layout LyX-Code
>>> icon.top_right_pictogram
\end_layout

\begin_layout LyX-Code
VCM_LEXICON[697]  # Drug_top_right_pictogram
\end_layout

\begin_layout LyX-Code
>>> icon.second_top_right_pictogram
\end_layout

\begin_layout LyX-Code
VCM_LEXICON[718]  # No_second_top_right_pictogram
\end_layout

\begin_layout LyX-Code
>>> icon.shadow
\end_layout

\begin_layout LyX-Code
VCM_LEXICON[722]  # No_shadow
\end_layout

\begin_layout Standard
L'attribut 
\begin_inset Quotes eld
\end_inset

lexs
\begin_inset Quotes erd
\end_inset

 permet d'obtenir l'ensemble des composantes :
\end_layout

\begin_layout LyX-Code
>>> icon.lexs
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  VCM_LEXICON[536]  # Modifier_vessel
\end_layout

\begin_layout LyX-Code
, VCM_LEXICON[549]  # Pictogramme_heart
\end_layout

\begin_layout LyX-Code
, VCM_LEXICON[722]  # No_shadow
\end_layout

\begin_layout LyX-Code
, VCM_LEXICON[496]  # Red_color
\end_layout

\begin_layout LyX-Code
, VCM_LEXICON[504]  # Modifier_patho
\end_layout

\begin_layout LyX-Code
, VCM_LEXICON[718]  # No_second_top_right_pictogram
\end_layout

\begin_layout LyX-Code
, VCM_LEXICON[697]  # Drug_top_right_pictogram
\end_layout

\begin_layout LyX-Code
, VCM_LEXICON[690]  # Green_color
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Standard
Les attributs suivants permettent d'obtenir les modificateurs d'une catégorie
 précise : modificateur pathologique ou physiologique, étiologique,...
 :
\end_layout

\begin_layout LyX-Code
>>> icon.physio
\end_layout

\begin_layout LyX-Code
>>> icon.patho
\end_layout

\begin_layout LyX-Code
>>> icon.etiology
\end_layout

\begin_layout LyX-Code
>>> icon.quantitative
\end_layout

\begin_layout LyX-Code
>>> icon.process
\end_layout

\begin_layout LyX-Code
>>> icon.transverse
\end_layout

\begin_layout Standard
L'attribut 
\begin_inset Quotes eld
\end_inset

consistent
\begin_inset Quotes erd
\end_inset

 permet de savoir si l'icône est consistante ou non (vis-à-vis de l'ontologie
 des icônes VCM, décrite dans l'article : J-B Lamy et al., Validating the
 semantics of a medical iconic language using ontological reasoning
\begin_inset Foot
status open

\begin_layout Plain Layout
J-B Lamy et al., Validating the semantics of a medical iconic language using
 ontological reasoning, Journal of Biomedical Informatics 2013, 46(1):56-67
\end_layout

\begin_layout Plain Layout
\begin_inset CommandInset href
LatexCommand href
target "http://www.sciencedirect.com/science/article/pii/S153204641200130X"

\end_inset


\end_layout

\end_inset

) :
\end_layout

\begin_layout LyX-Code
>>> icon.consistent
\end_layout

\begin_layout LyX-Code
True
\end_layout

\begin_layout Subsection
Lexique graphique
\end_layout

\begin_layout Standard
La terminologie VCM_LEXICON décrit le lexique graphique des primitives des
 icônes VCM : pictogrammes, couleurs et formes.
 Chaque primitive est identifié par un code numérique arbitraire, par exemple
 pour le pictogramme du cœur :
\end_layout

\begin_layout LyX-Code
>>> heart = VCM_LEXICON[549]
\end_layout

\begin_layout LyX-Code
>>> heart
\end_layout

\begin_layout LyX-Code
VCM_LEXICON[549] # Pictogramme_heart
\end_layout

\begin_layout Standard
Chaque concept du lexique possède aussi des codes textuels (plus facile
 à retenir que le code numérique, disponible en français et en anglais),
 et une catégorie :
\end_layout

\begin_layout LyX-Code
>>> heart.text_code
\end_layout

\begin_layout LyX-Code
u'coeur'
\end_layout

\begin_layout LyX-Code
>>> heart.text_codes
\end_layout

\begin_layout LyX-Code
[u'heart', u'coeur'] 
\end_layout

\begin_layout LyX-Code
>>> heart.category
\end_layout

\begin_layout LyX-Code
2 
\end_layout

\begin_layout Standard
Les catégories correspondent aux différentes parties des icônes VCM :
\end_layout

\begin_layout Description
0 Couleur centrale
\end_layout

\begin_layout Description
1 Modificateur de forme
\end_layout

\begin_layout Description
2 Pictogramme central
\end_layout

\begin_layout Description
3 Couleur en exposant
\end_layout

\begin_layout Description
4 Pictogramme en exposant
\end_layout

\begin_layout Description
5 Pictogramme en second exposant
\end_layout

\begin_layout Description
6 Ombre
\end_layout

\begin_layout Standard
Il est aussi possible d'obtenir un concept du lexique à partir de sa catégorie
 et de son code textuel :
\end_layout

\begin_layout LyX-Code
>>> VCM_LEXICON[2, "heart"]
\end_layout

\begin_layout LyX-Code
VCM_LEXICON[549] # Pictogramme_heart 
\end_layout

\begin_layout Standard
Les relations sont gérés comme d'ordinaire dans PyMedTermino (voir section
 sur la SNOMED CT : parents, children, is_a(), ancestors(), descendants(),...).
 De plus la relation graphical_is_a indique les autres éléments du lexique
 qui sont réutilisés.
 Par exemple le pictogramme du rythme cardiaque reprend le pictogramme du
 cœur :
\end_layout

\begin_layout LyX-Code
>>> heart_rhythm = VCM_LEXICON[2, "heart_rhythm"]
\end_layout

\begin_layout LyX-Code
>>> heart_rhythm.graphical_is_a
\end_layout

\begin_layout LyX-Code
[VCM_LEXICON[549]  # Pictogramme_heart
\end_layout

\begin_layout LyX-Code
]
\end_layout

\begin_layout Standard
Les attributs 
\begin_inset Quotes eld
\end_inset

graphical_children
\begin_inset Quotes erd
\end_inset

 et 
\begin_inset Quotes eld
\end_inset

graphical_parents
\begin_inset Quotes erd
\end_inset

 permettent d'obtenir la liste des éléments du lexique qui réutilisent ou
 qui sont réutilisés par un autre.
\end_layout

\begin_layout Subsubsection
Créer une icône VCM à partir d'éléments du lexique
\end_layout

\begin_layout Standard
Un ensemble de concepts du lexique peut être converti en icône VCM :
\end_layout

\begin_layout LyX-Code
>>> Concepts([VCM_LEXICON[549], VCM_LEXICON[496], VCM_LEXICON[504]]) >>
 VCM
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  VCM[u"en_cours--patho--coeur"]  # 
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Subsection
Concepts médicaux
\end_layout

\begin_layout Standard
VCM_CONCEPT est une terminologie qui représente les concepts médicaux de
 VCM.
 Chaque concept médical est défini par un code arbitraire, par exemple pour
 le cœur :
\end_layout

\begin_layout LyX-Code
>>> heart = VCM_CONCEPT[266]
\end_layout

\begin_layout LyX-Code
>>> heart
\end_layout

\begin_layout LyX-Code
VCM_CONCEPT[266] # Cardiac_structure
\end_layout

\begin_layout Standard
Les relations sont gérés comme d'ordinaire dans PyMedTermino (voir section
 sur la SNOMED CT : parents, children, is_a(), ancestors(), descendants(),
 relations...).
\end_layout

\begin_layout Standard
VCM_CONCEPT_MONOAXIAL est une terminologie identique à VCM_CONCEPT, mais
 monoaxiale.
 Les concepts sont donc les mêmes, mais avec au maximum un seul parent par
 concept.
 Cette terminologie est principalement utilisé en interne pour relier VCM_CONCEP
T (multiaxial) à VCM_LEXICON (monoaxial).
\end_layout

\begin_layout Section
\begin_inset CommandInset label
LatexCommand label
name "sec:Correspondances"

\end_inset

Correspondances
\end_layout

\begin_layout Standard
Une correspondance (mapping) permet de transcoder un ou plusieurs concepts
 d'une terminologie source vers une terminologie destination.
 PyMedTermino utilise l'opérateur >> pour les correspondances, de la manière
 suivante :
\end_layout

\begin_layout LyX-Code
concept(s) >> TERMINOLOGIE_DESTINATION
\end_layout

\begin_layout Standard
ou concept(s) peut être soit un concept de la terminologie source, soit
 un ensemble de concepts (voir section 
\begin_inset CommandInset ref
LatexCommand ref
reference "sec:Ensembles-de-concepts"

\end_inset

).
 L'opérateur >> retourne un ensemble de concepts dans la terminologie destinatio
n.
 Les opérateurs >> peuvent donc être chaînés :
\end_layout

\begin_layout LyX-Code
concept(s) >> TERMINOLOGIE_INTERMEDIAIRE >> TERMINOLOGIE_DESTINATION
\end_layout

\begin_layout Standard
PyMedTermino inclut plusieurs correspondances, décrite dans les sous-sections
 suivantes.
\end_layout

\begin_layout Subsection
Correspondances UMLS
\end_layout

\begin_layout Subsubsection
UMLS_CUI <=> UMLS_AUI
\end_layout

\begin_layout Standard
PyMedTermino peut convertir les CUI en AUI et vice versa :
\end_layout

\begin_layout LyX-Code
>>> UMLS_CUI[u"C0085580"] >> UMLS_AUI
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  UMLS_AUI[u"A16015049"]  # Hypertension primitive (MDRFRE)
\end_layout

\begin_layout LyX-Code
, UMLS_AUI[u"A11101884"]  # Hypertension essentielle, non précisée (MDRFRE)
\end_layout

\begin_layout LyX-Code
, UMLS_AUI[u"A11089284"]  # Hypertension essentielle non précisée (MDRFRE)
\end_layout

\begin_layout LyX-Code
...])
\end_layout

\begin_layout Subsubsection
Terminologie extraite de l'UMLS <=> CUI ou AUI
\end_layout

\begin_layout Standard
PyMedTermino peut convertir les concepts des terminologies extraites de
 l'UMLS en CUI ou en AUI, et vice versa :
\end_layout

\begin_layout LyX-Code
>>> UMLS_ICD10["I10"] >> UMLS_CUI
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  UMLS_CUI[u"C0085580"]  # Hypertension artérielle essentielle (MDRJPN,
 SNOMEDCT, ICD10, BI, CCS, MDRPOR, COSTAR, ICD10DUT, KCD5, RCD, MDRGER,
 AOD, MDRFRE, MDRCZE, SCTSPA, DMDICD10, ICPC2P, OMIM, MDRITA, MDR, MEDCIN,
 ICD10CM, MDRDUT, ICD10AM, MTH, CSP, MDRSPA, SNM, DXP, NCI, PSY, SNMI, ICD9CM,
 CCPSS)
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Subsubsection
Terminologie extraite de l'UMLS <=> terminologie source
\end_layout

\begin_layout Standard
PyMedTermino peut convertir les concepts des terminologies extraites de
 l'UMLS vers la terminologie source, et vice versa :
\end_layout

\begin_layout LyX-Code
>>> ICD10["I10"] >> UMLS_ICD10
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  UMLS_ICD10[u"I10"]  # Essential (primary) hypertension (ICD10)
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Subsubsection
Terminologie extraite de l'UMLS <=> autre terminologie extraite de l'UMLS
 
\end_layout

\begin_layout Standard
PyMedTermino crée automatiquement des correspondances entre les terminologies
 extraites de l'UMLS avec UMLS_AUI.extract_terminology() :
\end_layout

\begin_layout LyX-Code
>>> UMLS_ICD10["I10"] >> UMLS_SNOMEDCT
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  UMLS_SNOMEDCT[u"59621000"]  # Essential hypertension (SNOMEDCT)
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Subsection
SNOMEDCT <=> VCM
\end_layout

\begin_layout Standard
Cette correspondance associe des icônes VCM aux concepts SNOMED CT.
 Elle a été construite de manière automatique à partir des correspondances
 SNOMEDCT <=> VCM_CONCEPT et VCM_CONCEPT <=> VCM_LEXICON (comme décrit dans
 l'article: J-B Lamy et al., A Semi-automatic Semantic Method for Mapping
 SNOMED CT Concepts to VCM Icons 
\begin_inset Foot
status open

\begin_layout Plain Layout
J-B Lamy et al., A Semi-automatic Semantic Method for Mapping SNOMED CT Concepts
 to VCM Icons, Studies in health technology and informatics 2013, 192:42-6
\end_layout

\begin_layout Plain Layout
\begin_inset CommandInset href
LatexCommand href
target "http://ebooks.iospress.nl/publication/33954"

\end_inset


\end_layout

\end_inset

).
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino.snomedct_2_vcm import *
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[3424008]
\end_layout

\begin_layout LyX-Code
SNOMEDCT[3424008]  # Tachycardia (finding)
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[3424008] >> VCM
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  VCM[u"en_cours--hyper--coeur_rythme"]  # 
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Subsection
VCM_LEXICON => VCM
\end_layout

\begin_layout Standard
Un ensemble d'éléments du lexique peut être converti en icône VCM :
\end_layout

\begin_layout LyX-Code
>>> Concepts([VCM_LEXICON[549], VCM_LEXICON[496], VCM_LEXICON[504]]) >>
 VCM
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  VCM[u"en_cours--patho--coeur"]  # 
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Subsection
VCM_CONCEPT <=> VCM_LEXICON
\end_layout

\begin_layout Standard
Cette correspondance permet de transformer un concept médical en élément
 du lexique VCM, et vice versa.
 Elle a été construite manuellement, et fait partie de l'ontologie des icônes
 VCM.
\end_layout

\begin_layout LyX-Code
>>> VCM_CONCEPT[266] >> VCM_LEXICON
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  VCM_LEXICON[549]  # Pictogramme_heart
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout LyX-Code
>>> VCM_LEXICON[549] >> VCM_CONCEPT
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  VCM_CONCEPT[266]  # Structure_cardiaque
\end_layout

\begin_layout LyX-Code
, VCM_CONCEPT[102]  # Fonction_cardiaque
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Subsection
SNOMEDCT <=> VCM_CONCEPT
\end_layout

\begin_layout Standard
Cette correspondance associe les concepts SNOMED CT (principalement ceux
 de structures anatomiques et morphologies) aux concepts VCM.
 Elle a été construite manuellement.
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[302509004]
\end_layout

\begin_layout LyX-Code
SNOMEDCT[302509004] # Entire heart (body structure)
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[302509004] >> VCM_CONCEPT
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  VCM_CONCEPT[266] # Structure_cardiaque
\end_layout

\begin_layout LyX-Code
, VCM_CONCEPT[239] # Région_du_thorax
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Standard
\begin_inset Note Comment
status open

\begin_layout Subsection
SNOMEDCT <=> ICD10
\end_layout

\begin_layout Plain Layout
Cette correspondance associe les concepts de la SNOMED CT aux concepts de
 la CIM10.
 Elle a été construite à partir de la correspondance SNOMEDCT => CIM10 de
 la SNOMED CT, en ne retenant que les correspondances qui ne demandent pas
 l'intervention d'un expert (elle n'est donc pas complète).
 Il faut l'installer à l'aide du programme scripts/import_snomedct_2_icd10.py.
\end_layout

\begin_layout LyX-Code
>>> from pymedtermino.snomedct_2_icd10 import *
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> SNOMEDCT[3424008] >> ICD10
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  ICD10[u"R00.0"]  # tachycardie, sans précision
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Subsection
ICD10 <=> VCM
\end_layout

\begin_layout Plain Layout
Cette correspondance associe des icônes VCM aux concepts de la CIM10.
 Elle a été construite de manière automatique à partir des correspondances
 SNOMEDCT <=> VCM et SNOMEDCT <=> ICD10.
\end_layout

\begin_layout LyX-Code
from pymedtermino.icd10_2_vcm import *
\end_layout

\end_inset


\end_layout

\begin_layout Subsection
Exemples
\end_layout

\begin_layout Standard
En chaînant plusieurs correspondances, il est possible de convertir un concept
 CIM10 en SNOMED CT via l'UMLS :
\end_layout

\begin_layout LyX-Code
>>> ICD10["I10"] >> UMLS_ICD10 >> UMLS_SNOMEDCT >> SNOMEDCT
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  SNOMEDCT[59621000]  # Essential hypertension (disorder)
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Standard
Si vous souhaitez utiliser cette méthode par défaut pour les correspondances
 de la CIM10 vers la SNOMED CT, vous pouvez enregistrer cette correspondance
 de la manière suivante :
\end_layout

\begin_layout LyX-Code
>>> (ICD10 >> UMLS_ICD10 >> UMLS_SNOMEDCT >> SNOMEDCT).register()
\end_layout

\begin_layout LyX-Code
 
\end_layout

\begin_layout LyX-Code
>>> ICD10["I10"] >> SNOMEDCT
\end_layout

\begin_layout LyX-Code
Concepts([
\end_layout

\begin_layout LyX-Code
  SNOMEDCT[59621000]  # Essential hypertension (disorder)
\end_layout

\begin_layout LyX-Code
])
\end_layout

\begin_layout Section
\begin_inset CommandInset label
LatexCommand label
name "sec:Ensembles-de-concepts"

\end_inset

Ensembles de concepts
\end_layout

\begin_layout Standard
La classe Concepts() peut être utilisée pour représenter des ensembles de
 concepts (à la manière des set() de Python).
 Un tel ensemble ne peut contenir chaque concept qu'en un seul exemplaire,
 et il hérite des set() Python les méthodes permettant d'obtenir l'intersection,
 l'union, la différence, ..., de deux ensembles.
 Il propose aussi les méthodes suivantes :
\end_layout

\begin_layout Itemize
Concepts.find(concept_parent) : retourne le premier concept de l'ensemble
 qui est un descendant de concept_parent (y compris le concept_parent lui-même).
\end_layout

\begin_layout Itemize
Concepts.extract(concept_parent) : retourne tous les concepts de l'ensemble
 qui sont des descendants de concept_parent (y compris le concept_parent
 lui-même).
\end_layout

\begin_layout Itemize
Concepts.subtract(concept_parent) : retourne un nouvel ensemble après avoir
 retiré tous les concepts de l'ensemble qui sont des descendants de concept_pare
nt (y compris le concept_parent lui-même).
\end_layout

\begin_layout Itemize
Concepts.subtract_update(concept_parent) : comme subtract(), mais modifie
 l'ensemble 
\begin_inset Quotes eld
\end_inset

en place
\begin_inset Quotes erd
\end_inset

.
\end_layout

\begin_layout Itemize
Concepts.imply(concepts2) : retourne vrai si chaque concept de l'ensemble
 est le descendant d'au moins un concept de l'ensemble concepts2.
\end_layout

\begin_layout Itemize
Concepts.keep_most_specific() : garde uniquement les concepts les plus spécifique
s, c'est à dire que l'on enlève tous les concepts plus généraux qu'un autre.
\end_layout

\begin_layout Itemize
Concepts.keep_most_generic() : garde uniquement les concepts les plus généraux,
 c'est à dire que l'on enlève tous les concepts plus spécifiques qu'un autre.
 
\end_layout

\begin_layout Itemize
Concepts.lowest_common_ancestors() : retourne les plus petits parents communs
 à l'ensemble des concepts.
\end_layout

\begin_layout Itemize
Concepts.all_subsets() : retourne tous les sous-ensembles inclus dans l'ensemble.
\end_layout

\begin_layout Section
Utiliser PyMedTermino sans Python
\end_layout

\begin_layout Standard
PyMedTermino peut aussi être utilisé sans Python, simplement pour convertir
 les données XML de la SNOMED CT et de la CIM10 en bases de données.
 Les bases de données SQLite3 ainsi créées peuvent ensuite être interrogé
 avec la plupart des langages de programmation, cependant vous n'aurez pas
 accès aux fonctions de plus haut niveau proposées par PyMedTermino (comme
 les fonctions ancestors() et descendants() par exemple).
\end_layout

\begin_layout Standard
La définition des tables des bases de données peut être consultée dans les
 fichiers scripts/import_sonmedct.py et scripts/import_icd10.py.
\end_layout

\end_body
\end_document
