Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save sanchezcarlosjr/f103bb5b19b6d84bdc0829384da6f441 to your computer and use it in GitHub Desktop.
Save sanchezcarlosjr/f103bb5b19b6d84bdc0829384da6f441 to your computer and use it in GitHub Desktop.
ICD Coding of Clinical Records by Few Shot Training
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "c1c691fb-094a-4b23-a83a-cffd3c7455fc",
"metadata": {},
"source": [
"# ICD Coding of Clinical Records \n",
"\n",
"CodiEsp aims at three sub tasks:\n",
" and \n",
"\n",
"* CodiEsp **Diagnosis** Coding sub-task (CodiEsp-**D**). ICD-10-Clinical Modification and \"Manual de Codificación CIE-10-ES Diagnósticos 2018\".\n",
"http://www.mscbs.gob.es/estadEstudios/estadisticas/normalizacion/CIE10/CIE10ES_2018_norm_MANUAL_CODIF_DIAG_.pdf\n",
"\n",
"* CodiEsp **Procedure** Coding main sub-task (CodiEsp-**P**). ICD-10-Procedure and \"Manual de Codificación CIE-10-ES Procedimientos 2018\".\n",
"http://www.mscbs.gob.es/estadEstudios/estadisticas/normalizacion/CIE10/CIE10ES_2018_norm_MANUAL_CODIFICACION_PROCEDIMIENTOS_EDICION_2018.pdf\n",
"\n",
"* CodiEsp **Explainable** AI exploratory sub-task (CodiEsp-**X**)\n",
"\n",
"\n",
"Antonio Miranda-Escalada, Aitor Gonzalez-Agirre, Jordi Armengol-Estapé and Martin Krallinger. Overview of automatic clinical coding: annotations, guidelines, and solutions for non-English clinical cases at CodiEsp track of CLEF eHealth 2020. In CLEF (Working Notes). 2020"
]
},
{
"cell_type": "markdown",
"id": "2dd04e9a-9ff5-47a1-a00d-04e1ca5d442e",
"metadata": {},
"source": [
"## Load data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "9bbc84f4-3a40-4568-9425-4d9f1636cb27",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['codiesp\\\\final_dataset_v4_to_publish\\\\dev\\\\devD.tsv',\n",
" 'codiesp\\\\final_dataset_v4_to_publish\\\\test\\\\testD.tsv',\n",
" 'codiesp\\\\final_dataset_v4_to_publish\\\\train\\\\trainD.tsv']"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import glob\n",
"import re\n",
"import os\n",
"datasets = glob.glob(os.path.join('codiesp', 'final_dataset_v4_to_publish', '**', '*.tsv'))\n",
"diagnosis_dataset = list(filter(lambda x: re.match('.*D.tsv', x),datasets))\n",
"procedure_dataset = list(filter(lambda x: re.match('.*P.tsv', x),datasets))\n",
"explanation_dataset = list(filter(lambda x: re.match('.*X.tsv', x),datasets))\n",
"diagnosis_dataset"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "9230be93-41be-4cc3-bdee-4dee40f2d6be",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>articleID</th>\n",
" <th>ICD10</th>\n",
" <th>file_content</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>S0004-06142005000900016-1</td>\n",
" <td>q62.11</td>\n",
" <td>Mujer de 29 años con antecedentes de ulcus duo...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>S0004-06142005000900016-1</td>\n",
" <td>n28.89</td>\n",
" <td>Mujer de 29 años con antecedentes de ulcus duo...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>S0004-06142005000900016-1</td>\n",
" <td>n39.0</td>\n",
" <td>Mujer de 29 años con antecedentes de ulcus duo...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>S0004-06142005000900016-1</td>\n",
" <td>r31.9</td>\n",
" <td>Mujer de 29 años con antecedentes de ulcus duo...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>S0004-06142005000900016-1</td>\n",
" <td>n23</td>\n",
" <td>Mujer de 29 años con antecedentes de ulcus duo...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5634</th>\n",
" <td>S2340-98942015000100005-1</td>\n",
" <td>r69</td>\n",
" <td>Presentamos el caso de una paciente de 62 años...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5635</th>\n",
" <td>S2340-98942015000100005-1</td>\n",
" <td>r06.00</td>\n",
" <td>Presentamos el caso de una paciente de 62 años...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5636</th>\n",
" <td>S2340-98942015000100005-1</td>\n",
" <td>c56.2</td>\n",
" <td>Presentamos el caso de una paciente de 62 años...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5637</th>\n",
" <td>S2340-98942015000100005-1</td>\n",
" <td>r97.1</td>\n",
" <td>Presentamos el caso de una paciente de 62 años...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5638</th>\n",
" <td>S2340-98942015000100005-1</td>\n",
" <td>r55</td>\n",
" <td>Presentamos el caso de una paciente de 62 años...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>11158 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" articleID ICD10 \\\n",
"0 S0004-06142005000900016-1 q62.11 \n",
"1 S0004-06142005000900016-1 n28.89 \n",
"2 S0004-06142005000900016-1 n39.0 \n",
"3 S0004-06142005000900016-1 r31.9 \n",
"4 S0004-06142005000900016-1 n23 \n",
"... ... ... \n",
"5634 S2340-98942015000100005-1 r69 \n",
"5635 S2340-98942015000100005-1 r06.00 \n",
"5636 S2340-98942015000100005-1 c56.2 \n",
"5637 S2340-98942015000100005-1 r97.1 \n",
"5638 S2340-98942015000100005-1 r55 \n",
"\n",
" file_content \n",
"0 Mujer de 29 años con antecedentes de ulcus duo... \n",
"1 Mujer de 29 años con antecedentes de ulcus duo... \n",
"2 Mujer de 29 años con antecedentes de ulcus duo... \n",
"3 Mujer de 29 años con antecedentes de ulcus duo... \n",
"4 Mujer de 29 años con antecedentes de ulcus duo... \n",
"... ... \n",
"5634 Presentamos el caso de una paciente de 62 años... \n",
"5635 Presentamos el caso de una paciente de 62 años... \n",
"5636 Presentamos el caso de una paciente de 62 años... \n",
"5637 Presentamos el caso de una paciente de 62 años... \n",
"5638 Presentamos el caso de una paciente de 62 años... \n",
"\n",
"[11158 rows x 3 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"def read_file(path):\n",
" content = \"\"\n",
" with open(path,encoding=\"utf-8\") as f:\n",
" content = f.read()\n",
" return content\n",
"\n",
"def preprocess(path):\n",
" df = pd.read_csv(path, sep=\"\\t\", header=None, names=['articleID', 'ICD10'])\n",
" directory = path.split(os.sep)[-2]\n",
" df['file_content'] = df['articleID'].apply(\n",
" lambda file: read_file(os.path.join('codiesp', 'final_dataset_v4_to_publish', directory, 'text_files', f\"{file}.txt\"))\n",
" )\n",
" return df\n",
"\n",
"df = pd.concat(map(preprocess, diagnosis_dataset), ignore_index=False)\n",
"df"
]
},
{
"cell_type": "markdown",
"id": "d12bc377-62aa-412e-a7c7-3fa3c1783389",
"metadata": {},
"source": [
"# Data exploration"
]
},
{
"cell_type": "markdown",
"id": "98311a2a-f6d7-4618-a701-a8d918b69ef0",
"metadata": {},
"source": [
"### How many classes exist?"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "76c2a011-7068-4531-8a0e-bc2e8f3b7f4f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>articleID</th>\n",
" </tr>\n",
" <tr>\n",
" <th>ICD10</th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>r52</th>\n",
" <td>219</td>\n",
" </tr>\n",
" <tr>\n",
" <th>r69</th>\n",
" <td>198</td>\n",
" </tr>\n",
" <tr>\n",
" <th>r50.9</th>\n",
" <td>191</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i10</th>\n",
" <td>161</td>\n",
" </tr>\n",
" <tr>\n",
" <th>r59.9</th>\n",
" <td>136</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i69.354</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i67.89</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i67.82</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>i67.2</th>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>z99.89</th>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>2557 rows × 1 columns</p>\n",
"</div>"
],
"text/plain": [
" articleID\n",
"ICD10 \n",
"r52 219\n",
"r69 198\n",
"r50.9 191\n",
"i10 161\n",
"r59.9 136\n",
"... ...\n",
"i69.354 1\n",
"i67.89 1\n",
"i67.82 1\n",
"i67.2 1\n",
"z99.89 1\n",
"\n",
"[2557 rows x 1 columns]"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.groupby('ICD10').count().sort_values('articleID', ascending=False)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "8687c865-0d4e-43bd-b1c7-5d19cbd8fc70",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGwCAYAAACD0J42AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABTcUlEQVR4nO3deVxU5f4H8M+AgKCI4gKSpLhki1b30qJWbrnetH21unmzW/6y0qxrWV0lb1lZ2aJlmrtmlqltrrihuCAqJIoLIijbiCAM+wAzz+8PZZwZZmeGeYb5vF8vXi9m5jnnPGf/nmc7CiGEABEREZFEfNydASIiIiJjDFCIiIhIOgxQiIiISDoMUIiIiEg6DFCIiIhIOgxQiIiISDoMUIiIiEg6zdydAUdotVrk5uYiODgYCoXC3dkhIiIiGwghUFpaioiICPj4WC4j8cgAJTc3F5GRke7OBhERETkgKysLnTp1spjGIwOU4OBgAJdXsFWrVm7ODREREdmipKQEkZGRuvu4JR4ZoNRV67Rq1YoBChERkYexpXkGG8kSERGRdBigEBERkXQYoBAREZF0PLINiq00Gg1qamrcnQ2ywM/PD76+vu7OBhERSaZJBihCCCiVShQXF7s7K2SD1q1bIzw8nGPaEBGRTpMMUOqCkw4dOiAoKIg3PkkJIVBRUYH8/HwAQMeOHd2cIyIikkWTC1A0Go0uOGnbtq27s0NWBAYGAgDy8/PRoUMHVvcQERGAJthItq7NSVBQkJtzQraq21dsL0RERHWaXIBSh9U6noP7ioiIjDXZAIWIiIg8FwMUIiIikg4DlCasS5cu+PLLL21Ku3TpUrRu3dql+SEiIrIVA5QmwFxwkZiYiBdffNFlyzUOgLp06QKFQgGFQoHAwEB06dIFjz/+OHbs2OGyPBAR2auyWuPuLJANGKB4OEs9X9q3b9/ovZlmzJiBvLw8nDp1CsuXL0fr1q0xZMgQfPjhh42aDyIiU77ZeQY3TNuM2NQL7s4KWeEVAYoQAhXVtW75E0LYldfNmzfj7rvvRuvWrdG2bVuMGjUK6enpAIDMzEwoFAr8/PPPGDhwIJo3b46VK1fiX//6F1Qqla70IiYmBkD9Eo7i4mK8+OKLCAsLQ/PmzdGrVy/8+eefZvPyxx9/IDo6Gs2bN0fXrl3x/vvvo7a21mL+g4ODER4ejmuvvRb9+/fHggUL8N///hfTpk3DqVOn7NoWRETO9umWy9ehqeuOujknZE2TG6jNlMoaDW6ctsUty06dMRxB/rZv5vLyckyePBm9e/dGeXk5pk2bhoceegjJycm6NG+99RY+//xzLFmyBL6+vvjyyy8NAoCWLVvWm69Wq8XIkSNRWlqKlStXolu3bkhNTTU7MNqWLVvwzDPP4Ouvv8Y999yD9PR0XXXR9OnT7dgCwMSJE/G///0Pv/32G6ZMmWLXtERE5J28IkDxJI888ojB50WLFqFDhw5ITU3VBR6TJk3Cww8/rEsTEhIChUKB8PBws/Pdtm0bDh48iBMnTuC6664DAHTt2tVs+g8//BBvv/02nnvuOV3a//3vf5gyZYrdAUpoaCg6dOiAzMxMu6YjIiLv5RUBSqCfL1JnDHfbsu2Rnp6O//73vzhw4AAKCgqg1WoBAOfPn8eNN94IALjtttvszkdycjI6deqkC06sOXz4MBITEw3ajmg0GlRVVaGiosLuti1CCA7IRkTSsLP2ndzAKwIUhUJhVzWLO40ePRqRkZH4/vvvERERAa1Wi169eqG6ulqXpkWLFnbPt+6dN7bSarV4//33DUpq6jRv3tyueRUWFuLixYuIioqyazoiIvJennHX9hKFhYU4ceIE5s+fj3vuuQcAEB8fb3U6f39/aDSWu83dfPPNyM7OxunTp20qRfn73/+OU6dOoXv37rZl3oKvvvoKPj4+ePDBBxs8LyIi8g4MUCTSpk0btG3bFgsWLEDHjh1x/vx5vP3221an69KlC8rKyrB9+3bccsstCAoKqlcFM2DAAPTv3x+PPPIIZs+eje7du+PkyZNQKBQYMWJEvXlOmzYNo0aNQmRkJB577DH4+Pjg6NGjSElJwQcffGA2L6WlpVAqlaipqUFGRgZWrlyJhQsX4qOPPnJKsENERN7BK7oZewofHx+sXr0ahw8fRq9evfD666/j008/tTpdv379MH78eDzxxBNo3749Zs2aZTLd2rVrcfvtt+Opp57CjTfeiClTppgteRk+fDj+/PNPxMbG4vbbb0efPn0we/ZsdO7c2WJepk2bho4dO6J79+549tlnoVKpsH37drz11lvWNwAREdEVCmHvQB0SKCkpQUhICFQqFVq1amXwW1VVFTIyMhAVFWV3WwlyD+4zImosXd7eAABo28Ifh/871M258T6W7t/GWIJCRERE0mGAQkREXsfjqg68EAMUIiIikk6TDVA8sGmN1+K+IqLGxmEj5dfkAhQ/Pz8AQEVFhZtzQraq21d1+46IyNX4WCS/JjcOiq+vL1q3bo38/HwAQFBQEIdYl5QQAhUVFcjPz0fr1q3NvriQiIi8T5MLUADoXppXF6SQ3Fq3bm3xRYdEROR9mmSAolAo0LFjR3To0AE1NTXuzg5Z4Ofnx5ITIiKqp0kGKHV8fX158yMiIvJATa6RLBEREXk+BihEREQkHQYoRETkdTj+kvwYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdOwKUD766CPcfvvtCA4ORocOHfDggw/i1KlTBmmEEIiJiUFERAQCAwMxcOBAHD9+3CCNWq3Gq6++inbt2qFFixa4//77kZ2d3fC1ISIisgH78MjPrgAlLi4OEyZMwIEDBxAbG4va2loMGzYM5eXlujSzZs3C7NmzMXfuXCQmJiI8PBxDhw5FaWmpLs2kSZOwfv16rF69GvHx8SgrK8OoUaOg0Wict2ZERETksRSiAZ3BL168iA4dOiAuLg79+/eHEAIRERGYNGkS3nrrLQCXS0vCwsLwySef4KWXXoJKpUL79u2xYsUKPPHEEwCA3NxcREZGYuPGjRg+fHi95ajVaqjVat3nkpISREZGQqVSoVWrVo5mn4iIvEyXtzcAANoE+SFp2jA358b7lJSUICQkxKb7d4PaoKhUKgBAaGgoACAjIwNKpRLDhl3d6QEBARgwYAD27dsHADh8+DBqamoM0kRERKBXr166NMY++ugjhISE6P4iIyMbkm0iIiKSnMMBihACkydPxt13341evXoBAJRKJQAgLCzMIG1YWJjuN6VSCX9/f7Rp08ZsGmNTp06FSqXS/WVlZTmabSIiIrZB8QAOv834lVdewdGjRxEfH1/vN4VCYfBZCFHvO2OW0gQEBCAgIMDRrBIREVm0+VgeYlPz8eFDvdDcz9fd2SE4WILy6quv4vfff8fOnTvRqVMn3ffh4eEAUK8kJD8/X1eqEh4ejurqahQVFZlNQ0RE1JjGrzyCtUeysWxfpruzQlfYFaAIIfDKK69g3bp12LFjB6Kiogx+j4qKQnh4OGJjY3XfVVdXIy4uDv369QMAREdHw8/PzyBNXl4ejh07pktDRETkDhdL1dYTUaOwq4pnwoQJWLVqFX777TcEBwfrSkpCQkIQGBgIhUKBSZMmYebMmejRowd69OiBmTNnIigoCGPGjNGlHTduHN544w20bdsWoaGhePPNN9G7d28MGTLE+WtIREREHseuAGXevHkAgIEDBxp8v2TJEowdOxYAMGXKFFRWVuLll19GUVER7rzzTmzduhXBwcG69F988QWaNWuGxx9/HJWVlbj33nuxdOlS+Pqy3o+IiIjsDFBsGTJFoVAgJiYGMTExZtM0b94cc+bMwZw5c+xZPBEREXkJvouHiIi8juNDlFJjYYBCRERE0mGAQkRERNJhgEJERETSYYBCRERE0mGAQkREXkfLVrLSY4BCRERep7Sq1t1ZICsYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQERGRdBigEBERkXQYoBAREZF0GKAQEZFXEEK4OwtkBwYoREREJB0GKERERCQdBihERERXKBTuzgHVYYBCRER0BZupyIMBChEREUmHAQoRERFJhwEKERF5BVbfeBYGKERERCQdBihEREQkHQYoREREJB0GKERERCQdBihEREQkHQYoRE3Q9hMXMHVdCqpqNO7OCpE02InHszRzdwaIyPnGLTsEAOjcNgjjB3Rzc26IiOzHEhSiJkypqnJ3FoiIHMIAhYiI6Aq+LFAeDFCIiIiu4Giz8mCAQkRERNJhgEJERETSYYBCREReQbD+xqMwQCEiIiLpMEAhIiIi6TBAISIiuoLdjOXBAIWIiOgKNlORBwMUIiIikg4DFCIi8gosHPEsDFCIiIhIOnYHKLt378bo0aMREREBhUKBX3/91eD3sWPHQqFQGPz16dPHII1arcarr76Kdu3aoUWLFrj//vuRnZ3doBUhIiKipsPuAKW8vBy33HIL5s6dazbNiBEjkJeXp/vbuHGjwe+TJk3C+vXrsXr1asTHx6OsrAyjRo2CRqOxfw2IiIichL145NHM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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df.groupby('ICD10').count().plot();"
]
},
{
"attachments": {
"41a7dc48-7d87-4679-9fa5-6be325807080.png": {
"image/png": "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fBPAZM94bxi++WamubeLfJNZ53wP94/hx/BLQQGt83okJszMWuvzXmuW81nvz+ezPktERCQhKSEWERERERGRhKSEWERERERERBKSEmIRERERERFJSEqIRUREREREJCEpIRYREREREZGEpIRYREREREREEpISYhEREREREUlISohFREREREQkISkhFhERERERkYSkhFhEREREREQSkhJiERERERERSUhKiEVERERERCQhKSEWERERERGRhKSEWERERERERBKSEmIRERERERFJSEqIRUREREREJCEpIRYREREREZGEpIRYREREREREEtIv5/rg//n/hukI/tNyxiIiIvJM+9d/+1fVjSIiIs+YB//vEP/6b/+DX/7iLxe87pwJ8d/81b/jf/mblU8UmIiIyPPE/td/Ud0oIiLyjPmf/uqvH3vdORNi59/8z/yv/37NY29YRETkefM3xl9DwcSMAAAgAElEQVSrbhQREXnG/F//d/dj9Q6D7iEWERERERGRBKWEWERERERERBKSEmIRERERERFJSEqIRUREREREJCEpIRYREREREZGENOcs049l+DrlJSfxWVPfdphO3J50sgu38kZJHinGHOvbw3SeP87Rxh7CGGTWtdD0WvIsC44w8NUnXGz8Dl9wGAsTV0o6RWX72LttDUlLGqtNqPsmjS03uds9SChsg+nEnZbDzsp9lGXN/jiOkYFv+bThGu3dDwiFrYl19tYfo3C2XRQRkedG7/md7GkIEo17z+FKITVrK3trXsebPFfFuMiCn1Oy8wJDWb/ljxdfwbk8pYqIiDyzFjchDg8SsGa+HbUiBPwdBPwdNDds4PC5M5RlTE1b7eDX1Nf+PTcG7PF3sKMztwUjdJ8pp7Ix/sLCIjzQxdW6HnyBz2iqXsMjLy0eM9bIV4d4ra6LKataEQK+m5zy9RC43ERd1tR9C31ziPLaDoZmWafZd5DCbfNK4UVE5Gfqp1CIKCZpBXmkmQA2YX8Xd9suUNndy5nmMxQuR3YaDhGOghWOYIESYhERSXiLmxDHMbP38V7pasAmHOjiVtNtfGEbwj2cqjqC2XKe4rGeUbv3LK9VXCMwawI8zcAVjo8nw+4cKqq24gl3cPmj2wSiNv1N79NadomSBdTyC4nVCgxjOZLJLtxCQdZaTKuH1obr+MIAw7Q2dHAg65XJXurgHzhUN5YM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EpISYhEREREREUlISohFREREREQkISkhFhERERERkYSkhFhEREREREQSkhJiERERERERSUhKiEVERERERCQhKSEWERERERGRhKSEWERERERERBKSEmIRERERERFJSEqIRUREREREJCEpIRYREREREZGEpIRYREREREREEpISYhEREREREUlISohFREREREQkISkhFhERERERkYSkhFhEREREREQSkhJiERERERERSUhKiEVERERERCQhKSEWERERERGRhKSEWERERERERBKSEmIRERERERFJSEqIRUREREREJCH9xejo6OhsH5T8n+/g+puVyx2PiIjIMyv8339U3SgiIvKMCf/3H/nsP/5nkoy/XvC6v5zrg7yUv2Xf3775RIGJiIg8Tyr/eJRLr9Y/7TBEREQkzj90X+Pf/dJ4rHU1ZFpEREREREQSkhJiERERERERSUhKiEVERERERCQhKSEWERERERGRhKSEWERERERkgUZ6/0DtziKy1m0ka3MZp7tHnnZI8P1xNq3LpfyLH592JCI/G3POMv1Yhq9TXnISnzX1bYfpxO1JJ7twK2+U5JHysAnARn6gruQ33AjZsdfmFj5oO0F+Utwy9gPuXPqET+/0MBCKEMXEk5rD9qp3KN+UvKi7JCIismgi92i5dI3mznsEIlEwnHgycygu283OTck83vyYsqiCn1Oy8wJDWb/ljxdfwfm045Gna67zwb7HqZr3uRV2kl24g1X2A6yI/fTPn6iFjY0VjS53ySI/W4vbQxweJGDNfDtqRQj4O2g+fYhXi6po7J27BW3g8vuTyTCAFSEc/3/a7uNcWSn7G27jD0SIRoGoRcB/m7NV5dR+oxYxERF59ox0f0hpcSXHWzoI2E5SMzPIdMNQ53VOVZWwp2n4aYf49Az/gdKNuRSe6XvakUA4RDgKVjjCLJc0S6Lz2GYyNlbT+gx0MMo0c50P/tvcDYOr5D0+OvUu9WcvUf/yyqdy/ojIk1ncHuI4ZvY+3itdDdiEA13carqNL2xDuIdTVUcwW85TPL0zN/I151qCgIHDYTNb49bApeNcHoglzKu8+6gpW4sjcJOz528TiEa4dfpjdua/S5aa2UVE5FkxfJ39NVfwW05ya89wpjSd8YFPduQeradPcjkwDCToKKdoBCtqE43aj152qWUdpKl5K7ZrLSnLUqCNbUUhamNH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"
}
},
"cell_type": "markdown",
"id": "9f008c15-ebfe-409b-8713-b34326078c22",
"metadata": {},
"source": [
"### Which are related with Cancer?\n",
"\n",
"**Neoplasia maligna**\n",
"\n",
"Término que describe las enfermedades en las que hay células anormales que se multiplican sin control e invaden los tejidos cercanos. Es posible que las células de las neoplasias malignas también se diseminen a otras partes del cuerpo a través de los sistemas sanguíneo y linfático. Hay varios tipos de neoplasias malignas. El carcinoma es una neoplasia maligna que empieza en la piel o en los tejidos que revisten o cubren los órganos internos. El sarcoma empieza en el hueso, el cartílago, la grasa, el músculo, los vasos sanguíneos u otro tejido conjuntivo o de sostén. La leucemia afecta los tejidos donde se forman las células sanguíneas, como la médula ósea, y hace que se produzcan muchas células sanguíneas anormales. El linfoma y el mieloma múltiple afectan las células del sistema inmunitario. Las neoplasias malignas del sistema nervioso central empiezan en los tejidos del encéfalo y la médula espinal. **También se llama cáncer**.\n",
"\n",
"https://www.cancer.gov/espanol/publicaciones/diccionarios/diccionario-cancer/def/neoplasia-maligna\n",
"\n",
"**Taxonomía**\n",
"\n",
"![image.png](attachment:41a7dc48-7d87-4679-9fa5-6be325807080.png)\n",
"\n",
"https://www.sanidad.gob.es/estadEstudios/estadisticas/normalizacion/CIE10/CIE10ES_2018_norm_MANUAL_CODIF_DIAG_.pdf\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1e9f7f07-ef2b-4a63-aa67-a01a9d7b53cf",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([['S0004-06142005000900016-1', 'd18.09',\n",
" 'Mujer de 29 años con antecedentes de ulcus duodenal y estreñimiento que consulta por dolor en fosa renal derecha compatible con crisis renoureteral. No antecedentes de nefrolitiasis ni hematuria ni infecciones del tracto urinario. En la exploración sólo destaca una puñopercusión renal derecha positiva. La ecografía objetiva ectasia pielocalicial renal derecha con adelgazamiento del parénquima. La UIV muestra una anulación funcional de la unidad renal derecha siendo normal el resto de la exploración. Una pielografía retrograda muestra estenosis en la unión pieloureteral derecha, siendo la citología urinaria selectiva del uréter derecho negativa. Ante la disyuntiva de practicar una cirugía reconstructiva o una exerética se realiza gammagrafía renal que demuestra captación relativa del 33% para el riñón derecho y del 67% para el izquierdo.\\n\\nSe realiza pieloplastia renal derecha según técnica de Anderson-Hynes.\\nEl examen anatomopatológico de la estenosis de la vía urinaria descubre un hemangioma cavernoso como causante de la obstrucción, el cual no permitía pasar ninguna cánula. El control postoperatorio urográfico a los 3 meses objetiva captación y eliminación renal derecha de contraste con ligero retraso respecto a riñón izquierdo.\\n\\nLa paciente fue dada de alta de consultas externas a los tres años de la cirugía tras haber sido practicados otros dos controles urográficos; 7 años después de la pieloplastia no ha vuelto a consultar por clínica urológica.\\n'],\n",
" ['S0004-06142006000200011-1', 'd49.59',\n",
" 'Paciente varón de 22 años de edad, sin antecedentes de interés salvo ser fumador habitual de marihuana, acude a urgencias refiriendo aumento de tamaño de la bolsa escrotal izquierda tras un esfuerzo físico 24 horas antes, con dolor de inicio brusco y moderada intensidad. Sin fiebre ni síndrome miccional, ni irradiación del dolor. No presentaba cortejo neurovegetativo asociado, así como tampoco alteraciones del ritmo intestinal.\\nA la exploración física se presenta apirético y normotenso, con buena coloración de piel y mucosas. El abdomen es blando y depresible, no doloroso y sin masas. Las fosas renales se encuentran libres. El testículo derecho no presenta alteraciones mientras que en el testículo izquierdo se aprecia una tumoración de consistencia pétrea de 2-3cm de diámetro, no móvil, en el polo superior del teste izquierdo, con transiluminación negativa.\\nAnalíticamente no presentaba ningún parámetro fuera de la normalidad.\\nEn la ecografía testicular ambos testículos muestran una ecoestructura normal con flujo-doppler conservado, evidenciando una masa sólida extratesticular, en contacto con el polo superior del teste izquierdo de 25mm con vasos en su periferia.\\nSe ingresa para completar estudio y filiar dicha lesión.\\nSiguiendo el protocolo oncológico se completó el estadiaje preoperatorio con radiografía de tórax; marcadores tumorales de testículo y analítica general; y TAC abdómino- pélvico sin encontrar alteraciones patológicas en ninguna de las pruebas.\\nA continuación se realizó una exploración quirúrgica vía inguinal donde se apreció una masa paratesticular izquierda ligeramente abollonada con curvas suaves, nacarada y de consistencia pétrea, de fácil disección con plano de clivaje entre esta y el polo superior del testículo izquierdo y cordón espermático del mismo lado, con algunos vasos venosos en su periferia. Se tomó una biopsia peroperatoria que resultó en tejido fibroso sin de celularidad maligna. Se completó la exéresis de la lesión, dejando indemnes teste y epidídimo, evitando al paciente una orquiectomía radical.\\nCon un postoperatorio sin incidencias fue dado de alta a los dos días de la intervención.\\nEl dictamen anatomopatológico de la pieza quirúrgica es de tumor fibroso solitario de la túnica vaginal.\\n\\nEn el control postoperatorio a los dos años de la intervención, el paciente se encuentra asintomático sin evidencia de recidiva y libre de enfermedad.\\n\\n'],\n",
" ['S0004-06142006000200011-1', 'd29.8',\n",
" 'Paciente varón de 22 años de edad, sin antecedentes de interés salvo ser fumador habitual de marihuana, acude a urgencias refiriendo aumento de tamaño de la bolsa escrotal izquierda tras un esfuerzo físico 24 horas antes, con dolor de inicio brusco y moderada intensidad. Sin fiebre ni síndrome miccional, ni irradiación del dolor. No presentaba cortejo neurovegetativo asociado, así como tampoco alteraciones del ritmo intestinal.\\nA la exploración física se presenta apirético y normotenso, con buena coloración de piel y mucosas. El abdomen es blando y depresible, no doloroso y sin masas. Las fosas renales se encuentran libres. El testículo derecho no presenta alteraciones mientras que en el testículo izquierdo se aprecia una tumoración de consistencia pétrea de 2-3cm de diámetro, no móvil, en el polo superior del teste izquierdo, con transiluminación negativa.\\nAnalíticamente no presentaba ningún parámetro fuera de la normalidad.\\nEn la ecografía testicular ambos testículos muestran una ecoestructura normal con flujo-doppler conservado, evidenciando una masa sólida extratesticular, en contacto con el polo superior del teste izquierdo de 25mm con vasos en su periferia.\\nSe ingresa para completar estudio y filiar dicha lesión.\\nSiguiendo el protocolo oncológico se completó el estadiaje preoperatorio con radiografía de tórax; marcadores tumorales de testículo y analítica general; y TAC abdómino- pélvico sin encontrar alteraciones patológicas en ninguna de las pruebas.\\nA continuación se realizó una exploración quirúrgica vía inguinal donde se apreció una masa paratesticular izquierda ligeramente abollonada con curvas suaves, nacarada y de consistencia pétrea, de fácil disección con plano de clivaje entre esta y el polo superior del testículo izquierdo y cordón espermático del mismo lado, con algunos vasos venosos en su periferia. Se tomó una biopsia peroperatoria que resultó en tejido fibroso sin de celularidad maligna. Se completó la exéresis de la lesión, dejando indemnes teste y epidídimo, evitando al paciente una orquiectomía radical.\\nCon un postoperatorio sin incidencias fue dado de alta a los dos días de la intervención.\\nEl dictamen anatomopatológico de la pieza quirúrgica es de tumor fibroso solitario de la túnica vaginal.\\n\\nEn el control postoperatorio a los dos años de la intervención, el paciente se encuentra asintomático sin evidencia de recidiva y libre de enfermedad.\\n\\n'],\n",
" ...,\n",
" ['S2254-28842014000200009-1', 'd69.6',\n",
" 'Mujer de 33 años, que llega a urgencias con un cuadro de astenia, antecedentes de alergias no conocidas, lupus cutáneo con eritema malar sin tratamiento desde hace 8 años y en seguimiento por reumatología. Tiroiditis de Hashimoto. Apendicectomía. Exfumadora desde hace 7 años. No bebedora. No hábitos tóxicos, excepto en tomas de bebidas con quinina (tónicas). Episodios de anemia tras los 2 partos. Cesárea y ligadura de trompas en el 3o.\\nEnfermedad actual:\\nConsulta por intensa astenia y presíncopes (de una semana de evolución), que dificultan la deambulación, junto con anorexia sin pérdida de peso. Menstruación muy duradera (8 días) y abundante. No heces melénicas, palidez cutánea y mucosa. Epistaxis y gingivorragia.\\nLa analítica destaca anemia con 6.7 gr / dl de hemoglobina, trombopenia con plaquetas de 6.000/ mm3. LDH 1696 UI/l. Frotis sanguíneo con presencia de esquistocitos. Resto de exploraciones normales.\\nDiagnóstico: Según los datos clínicos y de laboratorio, la paciente presenta un cuadro compatible de PTT en el contexto del LES.\\nA su ingreso se transfunde un concentrado de hematíes y otro de plaquetas. Una hora después de pasar las plaquetas, la paciente comienza con un cuadro de afasia global y desviación de la comisura bucal a la izquierda sin otra focalidad neurológica. Posteriormente habla con lenguaje normal sin focalidad evidente.\\nDado el añadido síntoma neurológico se ingresa en hematología para su estudio.\\nAl presentar la paciente microangiopatía trombótica y crisis convulsivas, nos solicitan desde ese servicio la realización de plasmaféresis. Debido al empeoramiento clínico de la paciente, ingresa en UCI.\\nPlan de sesiones de plasmaféresis:\\nEl volumen de recambio debe situarse entre 1-1,5 veces el volumen plasmático.\\nEl tratamiento se prolongará hasta 48 h. después de conseguir la respuesta.\\nLa paciente pesa 75 kgr., y por tablas de relación, le corresponden un total de 3.500 cc. de volumen a reinfundir, por lo que se programan: 1.750 cc. de plasma fresco + 350 cc. de albúmina humana al 20% + 1.400 cc. solución Dianeal® 1,36% de diálisis peritoneal.\\nIncidencia de las sesiones:\\nPara la realización de la 1a plasmaféresis en UCI se intenta implantar un catéter en yugular derecha, pero debido a su dificultad y exceso de sangrado, se coloca un catéter doble luz en femoral izquierda.\\nEl monitor utilizado para la técnica fue un PRISMA CRRT-TPE (Hospal®), con filtro PTE-2000.\\nLa dosis de heparina fue de 15-5-5-5 mgr, siendo la duración de las sesiones de unos 210 minutos, con una infusión media de 980 ml/h, unos flujos de sangre entre 120-140 ml/min.y unas presiones de (PA. - 85 a -170 mmHg, y PV de 70 a 90 mmHg, manteniéndose una PTM entre 25-55 mmHg).\\nLa paciente en UCI presenta un mal estado general (sedada), con las constantes mantenidas. Se le realizaron un total de 17 sesiones.\\nIncidencia de las mismas:\\nLa 1a sesión la pasó muy agitada.\\nEn la 5a y 6a sufre hipotensión y convulsiones importantes, que ceden con diazepam y salino fisiológico, terminando el tratamiento.\\nEn la 16a hay un aumento de PTM hasta 55 mm Hg faltando 50 minutos, finalizando la sesión.\\nEn la 17a, hay un fallo del test de aire cuando faltan 90 minutos, por lo que hubo que cambiar el SET.\\nEl resto de las sesiones se realizaron sin problemas, siendo bien toleradas por la paciente.\\n\\n'],\n",
" ['S2340-98942015000100005-1', 'c78.7',\n",
" 'Presentamos el caso de una paciente de 62 años que en diciembre de 2010 es intervenida por un carcinoma seroso papilar en ovario izquierdo con afectación de un ganglio de la cadena aorto-cava (estadio IIIC). Posteriormente recibió quimioterapia adyuvante con carboplatino y paclitaxel, finalizando en junio de 2011. Más tarde, inició seguimiento permaneciendo asintomática hasta abril 2013, cuando se detectó una elevación de CA 125 de 88.4 U/ml (0-35 U/ml). En el TAC se pudo apreciar una imagen adyacente al colon y se le practicó resección anterior de recto superior con biopsia intraoperatoria de una lesión hepática que confirmó la naturaleza metastásica.\\nSe instauró una segunda línea de tratamiento con carboplatino y paclitaxel, evidenciando un valor de CA 125 de 123.3 U/ml. Tras un primer ciclo con buena tolerancia, programamos el segundo y durante los primeros minutos de la infusión de carboplatino, presentó un cuadro brusco de disnea, vómitos, pérdida de conocimiento y TAS/TAD de 70/50 mmHg. Se detuvo la infusión y posteriormente a la administración de corticoides el cuadro comenzó a remitir. La Unidad de Alergología, recomendó esquema de desensibilización5 con enlentecimiento de la velocidad de infusión. Para ello, se utilizaron tres disoluciones con concentraciones de 0,02, 0,2 y 2 mg/ml respectivamente, además de la premedicación la noche anterior y media hora antes de la infusión con:\\n- Cetirizina 10 mg - Prednisona 1 mg/kg - Ranitidina 150 mg - Montelukast 10 mg\\nA pesar de ello, a los pocos minutos comenzó con disnea, sudoración y tensiones de 85/60 mmHg, obligando a detener la infusión y recomendándose no volver a usar ninguna sal de platino.\\nEn Septiembre de 2013, se decidió iniciar 3a línea de quimioterapia con trabectedina y adriamicina liposomal pegilada. Tras el tercer ciclo, se normalizaron los marcadores y se completó hasta el sexto, manteniéndose en estos momentos libre de enfermedad.\\n\\n'],\n",
" ['S2340-98942015000100005-1', 'c56.2',\n",
" 'Presentamos el caso de una paciente de 62 años que en diciembre de 2010 es intervenida por un carcinoma seroso papilar en ovario izquierdo con afectación de un ganglio de la cadena aorto-cava (estadio IIIC). Posteriormente recibió quimioterapia adyuvante con carboplatino y paclitaxel, finalizando en junio de 2011. Más tarde, inició seguimiento permaneciendo asintomática hasta abril 2013, cuando se detectó una elevación de CA 125 de 88.4 U/ml (0-35 U/ml). En el TAC se pudo apreciar una imagen adyacente al colon y se le practicó resección anterior de recto superior con biopsia intraoperatoria de una lesión hepática que confirmó la naturaleza metastásica.\\nSe instauró una segunda línea de tratamiento con carboplatino y paclitaxel, evidenciando un valor de CA 125 de 123.3 U/ml. Tras un primer ciclo con buena tolerancia, programamos el segundo y durante los primeros minutos de la infusión de carboplatino, presentó un cuadro brusco de disnea, vómitos, pérdida de conocimiento y TAS/TAD de 70/50 mmHg. Se detuvo la infusión y posteriormente a la administración de corticoides el cuadro comenzó a remitir. La Unidad de Alergología, recomendó esquema de desensibilización5 con enlentecimiento de la velocidad de infusión. Para ello, se utilizaron tres disoluciones con concentraciones de 0,02, 0,2 y 2 mg/ml respectivamente, además de la premedicación la noche anterior y media hora antes de la infusión con:\\n- Cetirizina 10 mg - Prednisona 1 mg/kg - Ranitidina 150 mg - Montelukast 10 mg\\nA pesar de ello, a los pocos minutos comenzó con disnea, sudoración y tensiones de 85/60 mmHg, obligando a detener la infusión y recomendándose no volver a usar ninguna sal de platino.\\nEn Septiembre de 2013, se decidió iniciar 3a línea de quimioterapia con trabectedina y adriamicina liposomal pegilada. Tras el tercer ciclo, se normalizaron los marcadores y se completó hasta el sexto, manteniéndose en estos momentos libre de enfermedad.\\n\\n']],\n",
" dtype=object)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cancer_dataset = df[df['ICD10'].str.startswith('c') | df['ICD10'].str.startswith('d')].to_numpy()\n",
"cancer_dataset"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "96c28901-a64e-4caf-a99e-1ed2b4e5dc28",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"902"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import math\n",
"math.floor(len(cancer_dataset)*0.8)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "f234eb23-2de6-407e-8f81-a0b0cb023577",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"('d18.09',\n",
" 'Mujer de 29 años con antecedentes de ulcus duodenal y estreñimiento que consulta por dolor en fosa renal derecha compatible con crisis renoureteral. No antecedentes de nefrolitiasis ni hematuria ni infecciones del tracto urinario. En la exploración sólo destaca una puñopercusión renal derecha positiva. La ecografía objetiva ectasia pielocalicial renal derecha con adelgazamiento del parénquima. La UIV muestra una anulación funcional de la unidad renal derecha siendo normal el resto de la exploración. Una pielografía retrograda muestra estenosis en la unión pieloureteral derecha, siendo la citología urinaria selectiva del uréter derecho negativa. Ante la disyuntiva de practicar una cirugía reconstructiva o una exerética se realiza gammagrafía renal que demuestra captación relativa del 33% para el riñón derecho y del 67% para el izquierdo.\\n\\nSe realiza pieloplastia renal derecha según técnica de Anderson-Hynes.\\nEl examen anatomopatológico de la estenosis de la vía urinaria descubre un hemangioma cavernoso como causante de la obstrucción, el cual no permitía pasar ninguna cánula. El control postoperatorio urográfico a los 3 meses objetiva captación y eliminación renal derecha de contraste con ligero retraso respecto a riñón izquierdo.\\n\\nLa paciente fue dada de alta de consultas externas a los tres años de la cirugía tras haber sido practicados otros dos controles urográficos; 7 años después de la pieloplastia no ha vuelto a consultar por clínica urológica.\\n')"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cancer_dataset[0][1], cancer_dataset[0][2]"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "43579246-1061-447b-b58d-f704682dfa08",
"metadata": {},
"outputs": [],
"source": [
"import functools\n",
"\n",
"acc = \"\"\n",
"for instance in cancer_dataset[:3]:\n",
" acc += f\"\"\"Nota médica:\n",
" {instance[2]}\n",
" CIE-10:\n",
" {instance[1]}\n",
" \"\"\""
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6b587b71-b945-466e-8da4-bd0c44e18720",
"metadata": {},
"outputs": [],
"source": [
"cancer_dataset[:2]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "380d04eb-b907-4ca8-9429-b4a3e62736f3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'C62.9'"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from langchain.prompts import PromptTemplate\n",
"\n",
"\n",
"prompt = PromptTemplate.from_template(\n",
"f\"\"\"\n",
"Como médico de habla hispana especializado en la detección de neoplasias y familiarizado con el Manual de Codificación CIE-10-ES Diagnósticos 2018, \n",
" hoy tienes una lista de pacientes que requieren tu análisis experto. Cada paciente presenta síntomas que podrían indicar la presencia de una neoplasia, y \n",
" es tu responsabilidad usar tu conocimiento y experiencia para proporcionar el CIE-10 correspondiente:\n",
"Ejemplos:\n",
"{acc}\n",
"\"\"\"+\"\"\"\n",
"Nota médica: \n",
"{note}\n",
"CIE-10-ES Diagnósticos 2018:\n",
"\"\"\")\n",
"\n",
"from langchain.llms import OpenAI\n",
"from langchain.chains import LLMChain\n",
"\n",
"OPENAI_API_KEY=\"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\"\n",
"llm = OpenAI(openai_api_key=OPENAI_API_KEY,temperature=0)\n",
"chain = LLMChain(llm=llm, prompt=prompt)\n",
"\n",
"chain.run(cancer_dataset[3][2])"
]
},
{
"cell_type": "code",
"execution_count": 78,
"id": "55bcb1b4-d54b-41c2-bf25-f95741959a97",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>File</th>\n",
" <th>CIE-10-ES Diagnósticos 2018</th>\n",
" <th>Nota médica</th>\n",
" <th>LLM Predicción</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>S0004-06142006000500002-3</td>\n",
" <td>c79.9</td>\n",
" <td>Paciente de 35 años que nos fue remitido al se...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>S0004-06142006000500002-3</td>\n",
" <td>d49.59</td>\n",
" <td>Paciente de 35 años que nos fue remitido al se...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>S0004-06142006000700008-1</td>\n",
" <td>d29.1</td>\n",
" <td>Se presenta el caso de un paciente de 76 años ...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>S0004-06142007000300012-1</td>\n",
" <td>c64.9</td>\n",
" <td>Paciente de 52 años con antecedentes personale...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>S0004-06142007000600011-1</td>\n",
" <td>d30.3</td>\n",
" <td>Paciente de 27 años de edad sin alergias ni an...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>112</th>\n",
" <td>S0365-66912011000700004-1</td>\n",
" <td>c64.2</td>\n",
" <td>Varón de 26 años de edad que presenta disminuc...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>113</th>\n",
" <td>S0365-66912012000300003-1</td>\n",
" <td>c92.3</td>\n",
" <td>Varón de 69 años de edad con antecedentes pers...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>114</th>\n",
" <td>S0376-78922007000400008-1</td>\n",
" <td>d68.9</td>\n",
" <td>Varón de 38 años de edad alérgico a Penicilina...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>115</th>\n",
" <td>S0376-78922007000400008-1</td>\n",
" <td>d72.829</td>\n",
" <td>Varón de 38 años de edad alérgico a Penicilina...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>S0376-78922012000100001-1</td>\n",
" <td>c50.912</td>\n",
" <td>Paciente diagnosticada a los 38 años de edad d...</td>\n",
" <td></td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>117 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" File CIE-10-ES Diagnósticos 2018 \\\n",
"0 S0004-06142006000500002-3 c79.9 \n",
"1 S0004-06142006000500002-3 d49.59 \n",
"2 S0004-06142006000700008-1 d29.1 \n",
"3 S0004-06142007000300012-1 c64.9 \n",
"4 S0004-06142007000600011-1 d30.3 \n",
".. ... ... \n",
"112 S0365-66912011000700004-1 c64.2 \n",
"113 S0365-66912012000300003-1 c92.3 \n",
"114 S0376-78922007000400008-1 d68.9 \n",
"115 S0376-78922007000400008-1 d72.829 \n",
"116 S0376-78922012000100001-1 c50.912 \n",
"\n",
" Nota médica LLM Predicción \n",
"0 Paciente de 35 años que nos fue remitido al se... \n",
"1 Paciente de 35 años que nos fue remitido al se... \n",
"2 Se presenta el caso de un paciente de 76 años ... \n",
"3 Paciente de 52 años con antecedentes personale... \n",
"4 Paciente de 27 años de edad sin alergias ni an... \n",
".. ... ... \n",
"112 Varón de 26 años de edad que presenta disminuc... \n",
"113 Varón de 69 años de edad con antecedentes pers... \n",
"114 Varón de 38 años de edad alérgico a Penicilina... \n",
"115 Varón de 38 años de edad alérgico a Penicilina... \n",
"116 Paciente diagnosticada a los 38 años de edad d... \n",
"\n",
"[117 rows x 4 columns]"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_cancer_cases = pd.DataFrame(cancer_dataset, columns=['File', 'CIE-10-ES Diagnósticos 2018', 'Nota médica'])[3:120]\n",
"df_cancer_cases['LLM Predicción'] = \"\"\n",
"df_cancer_cases[df_cancer_cases['Nota médica'].apply(lambda x: len(x)/4 <= 4096)].reset_index().drop(columns=['index'])"
]
},
{
"cell_type": "code",
"execution_count": 83,
"id": "917f9fa7-84e4-4f63-af81-dc1a7b7cdb67",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error in 74\n",
"Error in 75\n",
"Error in 76\n",
"Error in 77\n",
"Error in 78\n",
"Error in 79\n",
"Error in 89\n",
"Error in 91\n",
"Error in 92\n",
"Error in 93\n",
"Error in 98\n",
"Error in 99\n",
"Error in 100\n",
"Error in 101\n",
"Error in 102\n",
"Error in 119\n"
]
}
],
"source": [
"for i in range(60,120):\n",
" try:\n",
" df_cancer_cases['LLM Predicción'][i] = chain.run(df_cancer_cases['Nota médica'][i])\n",
" except:\n",
" print(\"Error in\", i)"
]
},
{
"cell_type": "code",
"execution_count": 82,
"id": "3ab0220d-b14f-401e-b17c-e15f4ab88059",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>File</th>\n",
" <th>CIE-10-ES Diagnósticos 2018</th>\n",
" <th>Nota médica</th>\n",
" <th>LLM Predicción</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>S0004-06142006000500002-3</td>\n",
" <td>c79.9</td>\n",
" <td>Paciente de 35 años que nos fue remitido al se...</td>\n",
" <td>C62.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>S0004-06142006000500002-3</td>\n",
" <td>d49.59</td>\n",
" <td>Paciente de 35 años que nos fue remitido al se...</td>\n",
" <td>C62.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>S0004-06142006000700008-1</td>\n",
" <td>d29.1</td>\n",
" <td>Se presenta el caso de un paciente de 76 años ...</td>\n",
" <td>d29.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>S0004-06142007000300012-1</td>\n",
" <td>c64.9</td>\n",
" <td>Paciente de 52 años con antecedentes personale...</td>\n",
" <td>C81.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>S0004-06142007000600011-1</td>\n",
" <td>d30.3</td>\n",
" <td>Paciente de 27 años de edad sin alergias ni an...</td>\n",
" <td>D30.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115</th>\n",
" <td>S0365-66912011000700004-1</td>\n",
" <td>c64.2</td>\n",
" <td>Varón de 26 años de edad que presenta disminuc...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>S0365-66912012000300003-1</td>\n",
" <td>c92.3</td>\n",
" <td>Varón de 69 años de edad con antecedentes pers...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>117</th>\n",
" <td>S0376-78922007000400008-1</td>\n",
" <td>d68.9</td>\n",
" <td>Varón de 38 años de edad alérgico a Penicilina...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>S0376-78922007000400008-1</td>\n",
" <td>d72.829</td>\n",
" <td>Varón de 38 años de edad alérgico a Penicilina...</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>119</th>\n",
" <td>S0376-78922012000100001-1</td>\n",
" <td>c50.912</td>\n",
" <td>Paciente diagnosticada a los 38 años de edad d...</td>\n",
" <td></td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>117 rows × 4 columns</p>\n",
"</div>"
],
"text/plain": [
" File CIE-10-ES Diagnósticos 2018 \\\n",
"3 S0004-06142006000500002-3 c79.9 \n",
"4 S0004-06142006000500002-3 d49.59 \n",
"5 S0004-06142006000700008-1 d29.1 \n",
"6 S0004-06142007000300012-1 c64.9 \n",
"7 S0004-06142007000600011-1 d30.3 \n",
".. ... ... \n",
"115 S0365-66912011000700004-1 c64.2 \n",
"116 S0365-66912012000300003-1 c92.3 \n",
"117 S0376-78922007000400008-1 d68.9 \n",
"118 S0376-78922007000400008-1 d72.829 \n",
"119 S0376-78922012000100001-1 c50.912 \n",
"\n",
" Nota médica LLM Predicción \n",
"3 Paciente de 35 años que nos fue remitido al se... C62.9 \n",
"4 Paciente de 35 años que nos fue remitido al se... C62.9 \n",
"5 Se presenta el caso de un paciente de 76 años ... d29.8 \n",
"6 Paciente de 52 años con antecedentes personale... C81.00 \n",
"7 Paciente de 27 años de edad sin alergias ni an... D30.2 \n",
".. ... ... \n",
"115 Varón de 26 años de edad que presenta disminuc... \n",
"116 Varón de 69 años de edad con antecedentes pers... \n",
"117 Varón de 38 años de edad alérgico a Penicilina... \n",
"118 Varón de 38 años de edad alérgico a Penicilina... \n",
"119 Paciente diagnosticada a los 38 años de edad d... \n",
"\n",
"[117 rows x 4 columns]"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_cancer_cases"
]
},
{
"cell_type": "code",
"execution_count": 85,
"id": "d3a02031-f621-4533-a33d-e50e5c73947d",
"metadata": {},
"outputs": [],
"source": [
"df_cancer_cases[df_cancer_cases['LLM Predicción'] != \"\"].reset_index().drop(columns=['index'])[0:60].to_csv('cie10-con-predicciones.csv', encoding='utf-8', index=False)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "e05a6b3b-6c67-4f32-9343-ace968daf32f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Paciente de 35 años que nos fue remitido al servicio de urgencias de nuestro hospital por urólogo de zona ante hallazgo ecográfico compatible con neoplasia de testículo.\\nDestacaban entre sus antecedentes personales: criptorquidia bilateral que fue tratada con orquidopexia, a los 6 y 8 años respectivamente, en otro centro. Uretrotomía endoscópica a los 20 años. Había presentado cólicos nefríticos de repetición con expulsión de litiasis e incluso había precisado tratamiento con LEOC. Ureterolitectomía a los 28 años de edad. Fumador de 1 paquete de cigarrillos/día.\\nUn mes antes, consultó al urólogo de zona por esterilidad y nódulo en testículo izquierdo de meses de evolución que había aumentado de tamaño en las últimas semanas. El espermiograma presentaba una azoospermia total. La ecografía-doppler testicular fue informada como testículo derecho con masa de 19 x 23 mm en polo superior con flujo aumentado, compatible con tumor testicular y quiste de cordón izquierdo.\\nEn la exploración física se palpaba un testículo izquierdo sin alteraciones, con quiste de epidídimo en cabeza. El testículo derecho no se pudo explorar puesto que se encontraba en el canal inguinal.\\nSe procedió a completar el estudio. La Rx de tórax era normal y en la TAC toraco-abdómino-pélvico no se observaban metástasis. La analítica tampoco mostraba alteraciones, tanto en los valores séricos hormonales como los marcadores tumorales (alfa-fetoproteina 2,2 ng/ml, beta-HCG 0,0 ng/ml).\\nSe llevó a cabo una orquiectomía radical inguinal derecha y biopsia del testículo izquierdo vía inguinal. El informe macroscópico de la pieza nos fue informada como: testículo derecho de 3,2 x 3 cm. La superficie testicular es lisa sin observarse infiltración de túnica vaginalis. Al corte, se identifica un nódulo sólido bien delimitado de 1,5 cm de diámetro de coloración parda con área amarillenta central. El tejido testicular restante es de color anaranjado. El cordón espermático no presenta alteraciones. La biopsia del testículo izquierdo es un fragmento de 0,3 cm de coloración parda.\\nEl informe histopatológico refería: Tumor de células de Leydig de 3,2 x 3 cm sin objetivarse infiltración del epidídimo, túnica albugínea ni invasión vascular. Resto de parénquima testicular con atrofia, hiperplasia de células de Leydig en el intersticio y práctica ausencia de espermiogénesis. Bordes quirúrgicos libres. La biopsia del teste izquierdo fue informada como atrofia testicular con ausencia de espermiogénesis e hiperplasia de células de Leydig intersticial.\\nA los 30 meses de controles evolutivos, el paciente presenta un buen estado general sin evidencia radiológica de metástasis y marcadores tumorales dentro de los valores de la normalidad.\\n'"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_cancer_cases['Nota médica'][0]"
]
},
{
"cell_type": "code",
"execution_count": 162,
"id": "e2daf4fc-7df7-480a-89f2-805db5f36a92",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>articleID</th>\n",
" <th>ICD10</th>\n",
" <th>file_content</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>54</th>\n",
" <td>S0004-06142006000500002-3</td>\n",
" <td>c79.9</td>\n",
" <td>Paciente de 35 años que nos fue remitido al se...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>56</th>\n",
" <td>S0004-06142006000500002-3</td>\n",
" <td>d49.59</td>\n",
" <td>Paciente de 35 años que nos fue remitido al se...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" articleID ICD10 \\\n",
"54 S0004-06142006000500002-3 c79.9 \n",
"56 S0004-06142006000500002-3 d49.59 \n",
"\n",
" file_content \n",
"54 Paciente de 35 años que nos fue remitido al se... \n",
"56 Paciente de 35 años que nos fue remitido al se... "
]
},
"execution_count": 162,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cancer_dataset2 = df[df['ICD10'].str.startswith('c') | df['ICD10'].str.startswith('d')]\n",
"cancer_dataset2[cancer_dataset2['articleID'] == 'S0004-06142006000500002-3']"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "1c57c981-bdc1-4cf5-b481-cf4e85c38f79",
"metadata": {},
"outputs": [],
"source": [
"from langchain import FewShotPromptTemplate\n",
"\n",
"# create our examples\n",
"examples = [\n",
" {\n",
" \"query\": \"How are you?\",\n",
" \"answer\": \"I can't complain but sometimes I still do.\"\n",
" }, {\n",
" \"query\": \"What time is it?\",\n",
" \"answer\": \"It's time to get a watch.\"\n",
" }\n",
"]\n",
"\n",
"# create a example template\n",
"example_template = \"\"\"\n",
"Nota médica: {query}\n",
"CIE-10-ES Diagnósitico: {answer}\n",
"\"\"\"\n",
"\n",
"# create a prompt example from above template\n",
"example_prompt = PromptTemplate(\n",
" input_variables=[\"query\", \"answer\"],\n",
" template=example_template\n",
")\n",
"\n",
"# now break our previous prompt into a prefix and suffix\n",
"# the prefix is our instructions\n",
"prefix = \"\"\"Como médico de habla hispana especializado en la detección de neoplasias y familiarizado con el Manual de Codificación CIE-10-ES Diagnósticos 2018, \n",
" hoy tienes una lista de pacientes que requieren tu análisis experto. Cada paciente presenta síntomas que podrían indicar la presencia de una neoplasia, y \n",
" es tu responsabilidad usar tu conocimiento y experiencia para proporcionar el CIE-10 correspondiente.\n",
" Los siguientes son ejemplos de nota médica y su correspondiente CIE-10-ES Diagnósitico:\n",
"\"\"\"\n",
"# and the suffix our user input and output indicator\n",
"suffix = \"\"\"\n",
"Nota Médica: {query}\n",
"CIE-10-ES Diagnósitico: \"\"\"\n",
"\n",
"# now create the few shot prompt template\n",
"few_shot_prompt_template = FewShotPromptTemplate(\n",
" examples=examples,\n",
" example_prompt=example_prompt,\n",
" prefix=prefix,\n",
" suffix=suffix,\n",
" input_variables=[\"query\"],\n",
" example_separator=\"\\n\\n\"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f3d5cfb0-5172-43e7-922d-2e3c93e09919",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment