Bibliothèque de client Azure Cognitive Services Health Insights Sur le profilage du cancer pour Python - version 1.0.0b1
Health Insights est un service Azure Applied AI créé avec Azure Cognitive Services Framework, qui tire parti de plusieurs Cognitive Services, services d’API santé et autres ressources Azure.
Le modèle de profilage du cancer reçoit les enregistrements cliniques des patients en oncologie et produit la mise en lots du cancer, comme les catégories TNM de stade clinique et les catégories TNM de stade pathologique, ainsi que le site de tumeur, l’histologie.
| Code sourcePackage (PyPI) | Documentation de référence sur les | API | Documentation produitÉchantillons
Prise en main
Prérequis
- Python 3.7 ou version ultérieure est requis pour utiliser ce package.
- Vous avez besoin d’un abonnement Azure pour utiliser ce package.
- Un instance Cognitive Services Health Insights existant.
Installer le package
pip install azure-healthinsights-cancerprofiling
Ce tableau montre la relation entre les versions du kit de développement logiciel (SDK) et les versions d’API prises en charge du service :
Version du SDK | Version d’API prise en charge du service |
---|---|
1.0.0b1 | Préversion du 01/03/2023 |
Authentifier le client
Obtenir le point de terminaison
Vous pouvez trouver le point de terminaison de votre ressource de service Health Insights à l’aide du portail Azure ou d’Azure CLI.
# Get the endpoint for the Health Insights service resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "properties.endpoint"
Obtenir la clé API
Vous pouvez obtenir la clé API à partir de la ressource du service Health Insights dans le portail Azure. Vous pouvez également utiliser l’extrait de code Azure CLI ci-dessous pour obtenir la clé API de votre ressource.
az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>
Créer un CancerProfilingClient avec des informations d’identification de clé API
Une fois que vous avez la valeur de la clé API, vous pouvez la passer sous forme de chaîne dans un instance d’AzureKeyCredential. Utilisez la clé comme paramètre d’informations d’identification pour authentifier le client :
import os
from azure.core.credentials import AzureKeyCredential
from azure.healthinsights.cancerprofiling.aio import CancerProfilingClient
KEY = os.environ["HEALTHINSIGHTS_KEY"]
ENDPOINT = os.environ["HEALTHINSIGHTS_ENDPOINT"]
cancer_profiling_client = CancerProfilingClient(endpoint=ENDPOINT, credential=AzureKeyCredential(KEY))
opérations Long-Running
Les opérations de longue durée sont des opérations qui se composent d’une demande initiale envoyée au service pour démarrer une opération, suivie d’une interrogation du service à intervalles réguliers pour déterminer si l’opération s’est terminée ou a échoué, et si elle a réussi, pour obtenir le résultat.
Les méthodes qui prennent en charge l’analyse des soins de santé, l’analyse de texte personnalisée ou plusieurs analyses sont modélisées comme des opérations de longue durée.
Le client expose une begin_<method-name>
méthode qui retourne un objet polleur. Les appelants doivent attendre la fin de l’opération en appelant result()
sur l’objet poller retourné par la begin_<method-name>
méthode .
Des exemples d’extraits de code sont fournis pour illustrer l’utilisation d’opérations de longue durée ci-dessous.
Concepts clés
Le modèle de profilage du cancer vous permet de déduire des attributs du cancer tels que le site de tumeur, l’histologie, les catégories TNM de stade clinique et les catégories TNM de stade pathologique à partir de documents cliniques non structurés.
Exemples
La section suivante fournit plusieurs extraits de code couvrant certaines des tâches les plus courantes du service Health Insights - Profilage du cancer, notamment :
Profilage du cancer
Déduire les attributs clés du cancer tels que le site de tumeur, l’histologie, les catégories TNM de stade clinique et les catégories TNM de stade pathologique à partir des documents cliniques non structurés d’un patient.
import asyncio
import os
import datetime
from azure.core.credentials import AzureKeyCredential
from azure.healthinsights.cancerprofiling.aio import CancerProfilingClient
from azure.healthinsights.cancerprofiling import models
KEY = os.environ["HEALTHINSIGHTS_KEY"]
ENDPOINT = os.environ["HEALTHINSIGHTS_ENDPOINT"]
# Create an Onco Phenotype client
# <client>
cancer_profiling_client = CancerProfilingClient(endpoint=ENDPOINT,
credential=AzureKeyCredential(KEY))
# </client>
# Construct patient
# <PatientConstructor>
patient_info = models.PatientInfo(sex=models.PatientInfoSex.FEMALE, birth_date=datetime.date(1979, 10, 8))
patient1 = models.PatientRecord(id="patient_id", info=patient_info)
# </PatientConstructor>
# Add document list
# <DocumentList>
doc_content1 = """
15.8.2021
Jane Doe 091175-8967
42 year old female, married with 3 children, works as a nurse
Healthy, no medications taken on a regular basis.
PMHx is significant for migraines with aura, uses Mirena for contraception.
Smoking history of 10 pack years (has stopped and relapsed several times).
She is in c/o 2 weeks of productive cough and shortness of breath.
She has a fever of 37.8 and general weakness.
Denies night sweats and rash. She denies symptoms of rhinosinusitis, asthma, and heartburn.
On PE:
GENERAL: mild pallor, no cyanosis. Regular breathing rate.
LUNGS: decreased breath sounds on the base of the right lung. Vesicular breathing.
No crackles, rales, and wheezes. Resonant percussion.
PLAN:
Will be referred for a chest x-ray.
======================================
CXR showed mild nonspecific opacities in right lung base.
PLAN:
Findings are suggestive of a working diagnosis of pneumonia. The patient is referred to a
follow-up CXR in 2 weeks."""
patient_document1 = models.PatientDocument(type=models.DocumentType.NOTE,
id="doc1",
content=models.DocumentContent(
source_type=models.DocumentContentSourceType.INLINE,
value=doc_content1),
clinical_type=models.ClinicalDocumentType.IMAGING,
language="en",
created_date_time=datetime.datetime(2021, 8, 15))
doc_content2 = """
Oncology Clinic
20.10.2021
Jane Doe 091175-8967
42-year-old healthy female who works as a nurse in the ER of this hospital.
First menstruation at 11 years old. First delivery- 27 years old. She has 3 children.
Didn't breastfeed.
Contraception- Mirena.
Smoking- 10 pack years.
Mother- Belarusian. Father- Georgian.
About 3 months prior to admission, she stated she had SOB and was febrile.
She did a CXR as an outpatient which showed a finding in the base of the right lung-
possibly an infiltrate.
She was treated with antibiotics with partial response.
6 weeks later a repeat CXR was performed- a few solid dense findings in the right lung.
Therefore, she was referred for a PET-CT which demonstrated increased uptake in the right
breast, lymph nodes on the right a few areas in the lungs and liver.
On biopsy from the lesion in the right breast- triple negative adenocarcinoma. Genetic
testing has not been done thus far.
Genetic counseling- the patient denies a family history of breast, ovary, uterus,
and prostate cancer. Her mother has chronic lymphocytic leukemia (CLL).
She is planned to undergo genetic tests because the aggressive course of the disease,
and her young age.
Impression:
Stage 4 triple negative breast adenocarcinoma.
Could benefit from biological therapy.
Different treatment options were explained- the patient wants to get a second opinion."""
patient_document2 = models.PatientDocument(type=models.DocumentType.NOTE,
id="doc2",
content=models.DocumentContent(
source_type=models.DocumentContentSourceType.INLINE,
value=doc_content2),
clinical_type=models.ClinicalDocumentType.PATHOLOGY,
language="en",
created_date_time=datetime.datetime(2021, 10, 20))
doc_content3 = """
PATHOLOGY REPORT
Clinical Information
Ultrasound-guided biopsy; A. 18 mm mass; most likely diagnosis based on imaging: IDC
Diagnosis
A. BREAST, LEFT AT 2:00 4 CM FN; ULTRASOUND-GUIDED NEEDLE CORE BIOPSIES:
- Invasive carcinoma of no special type (invasive ductal carcinoma), grade 1
Nottingham histologic grade: 1/3 (tubules 2; nuclear grade 2; mitotic rate 1;
total score; 5/9)
Fragments involved by invasive carcinoma: 2
Largest measurement of invasive carcinoma on a single fragment: 7 mm
Ductal carcinoma in situ (DCIS): Present
Architectural pattern: Cribriform
Nuclear grade: 2-
-intermediate
Necrosis: Not identified
Fragments involved by DCIS: 1
Largest measurement of DCIS on a single fragment: Span 2 mm
Microcalcifications: Present in benign breast tissue and invasive carcinoma
Blocks with invasive carcinoma: A1
Special studies: Pending"""
patient_document3 = models.PatientDocument(type=models.DocumentType.NOTE,
id="doc3",
content=models.DocumentContent(
source_type=models.DocumentContentSourceType.INLINE,
value=doc_content3),
clinical_type=models.ClinicalDocumentType.PATHOLOGY,
language="en",
created_date_time=datetime.datetime(2022, 1, 1))
patient_doc_list = [patient_document1, patient_document2, patient_document3]
patient1.data = patient_doc_list
# <\DocumentList>
# Set configuration to include evidence for the cancer staging inferences
configuration = models.OncoPhenotypeModelConfiguration(include_evidence=True)
# Construct the request with the patient and configuration
cancer_profiling_data = models.OncoPhenotypeData(patients=[patient1], configuration=configuration)
poller = await cancer_profiling_client.begin_infer_cancer_profile(cancer_profiling_data)
cancer_profiling_result = await poller.result()
if cancer_profiling_result.status == models.JobStatus.SUCCEEDED:
results = cancer_profiling_result.results
for patient_result in results.patients:
print(f"\n==== Inferences of Patient {patient_result.id} ====")
for inference in patient_result.inferences:
print(
f"\n=== Clinical Type: {str(inference.type)} Value: {inference.value}\
ConfidenceScore: {inference.confidence_score} ===")
for evidence in inference.evidence:
data_evidence = evidence.patient_data_evidence
print(
f"Evidence {data_evidence.id} {data_evidence.offset} {data_evidence.length}\
{data_evidence.text}")
else:
errors = cancer_profiling_result.errors
if errors is not None:
for error in errors:
print(f"{error.code} : {error.message}")
Dépannage
Général
La bibliothèque cliente Health Insights Cancer Profiling déclenche des exceptions définies dans Azure Core.
Journalisation
Cette bibliothèque utilise la bibliothèque de journalisation standard pour la journalisation.
Les informations de base sur les sessions HTTP (URL, en-têtes, etc.) sont enregistrées au INFO
niveau.
La journalisation détaillée DEBUG
au niveau, y compris les corps de requête/réponse et les en-têtes non expurgées, peut être activée sur le client ou par opération avec l’argument logging_enable
mot clé.
Consultez la documentation complète sur la journalisation du KIT de développement logiciel (SDK) avec des exemples ici.
Configuration facultative
Les arguments mot clé facultatifs peuvent être passés au niveau du client et par opération. La documentation de référence azure-core décrit les configurations disponibles pour les nouvelles tentatives, la journalisation, les protocoles de transport, etc.
Étapes suivantes
Documentation complémentaire
Pour obtenir une documentation plus complète sur le profilage du cancer d’Azure Health Insights, consultez la documentation sur le profilage du cancer sur docs.microsoft.com.
Contribution
Ce projet accepte les contributions et les suggestions. La plupart des contributions vous demandent d’accepter un contrat de licence de contribution (CLA) déclarant que vous avez le droit de nous accorder, et que vous nous accordez réellement, les droits d’utilisation de votre contribution. Pour plus d’informations, visitez https://cla.microsoft.com.
Quand vous envoyez une demande de tirage (pull request), un bot CLA détermine automatiquement si vous devez fournir un contrat CLA et agrémenter la demande de tirage de façon appropriée (par exemple, avec une étiquette ou un commentaire). Suivez simplement les instructions fournies par le bot. Vous ne devez effectuer cette opération qu’une seule fois sur tous les dépôts utilisant notre contrat CLA.
Ce projet a adopté le Code de conduite Open Source de Microsoft. Pour plus d’informations, consultez la FAQ sur le code de conduite ou contactez opencode@microsoft.com pour toute question ou tout commentaire supplémentaire.
Azure SDK for Python