Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semana 7, Reconocimiento de Entidades PLN 21-07
Semana 7, Reconocimiento de Entidades PLN 21-07
de Lenguaje Natural:
Reconocimiento de Entidades
Escuela Superior
Prepared by Analytics
de Empresa,
Latam - The
Ingeniería
Storytelling
y Tecnología
& Analytics Workshops
Proprietary
Cristina Navarro
& Confidential
Pérez
Reconocimiento de Entidades
Subrayar palabras que faciliten la comprensión del mensaje y su clasificación,
es decir, detectar posibles entidades nombradas y, posteriormente, clasificarlas
entre un conjunto de categorías predefinidas. Algunos ejemplos de entidades
nombradas son los nombres de personas, lugares, cantidades, empresas.
Palabras
Claves
Usar funcionalidades dependientes del sistema operativo, sobre todo información del
entorno
import spacy
import warnings
import numpy as np
Permite una generación y manejo de datos extremadamente rápido por medio del uso
de matrices y matrices multidimensionales. Garantizando cálculos eficientes
Julio de 2023 Procesamiento de Lenguaje Natural
Reconocimiento de Entidades
Paso 1: Importar librerías de Python
import pandas as pd
Reconocimiento de Entidades
Paso 2: Autenticación del E-mail
auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
Reconocimiento de Entidades
Paso 3: Tomar el archivo del Drive usando el ID del archivo
downloaded = drive.CreateFile({'id’:
'1QUYgHqpigWu8q25WhwR1oJct3zZAHVA3’})
id
https://drive.google.com/file/d/
1QUYgHqpigWu8q25WhwR1oJct3zZAHVA3/view?
usp=sharing
downloaded.GetContentFile('Base_SQRs_act.csv')
Julio de 2023 Procesamiento de Lenguaje Natural
.
Reconocimiento de Entidades
Paso 4: Leer el archivo csv
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
features = pd.read_csv('features.csv')
patients_notes = pd.read_csv('patient_notes.csv')
submission = pd.read_csv('sample_submission.csv’)
sqrs = pd.read_csv('Base_SQRs_act.csv',encoding='latin1',sep=";")
Reconocimiento de Entidades
Paso 5: Análisis de la información
print(f'\033[92mNumero de filas en la data de entrenamiento: {train.shape[0]}’) filas
Numero de filas en la data de entrenamiento: 14300
print(f'\033[94mNumero de columnas en la data de entrenamiento: {train.shape[1]}’) columnas
Numero de columnas en la data de entrenamiento: 6
print(f'\033[91mNumero de valores en la data de entrenamiento: {train.count().
Valores
sum()}’)
Numero de valores en la data de entrenamiento: 85800
totales
print(f'\033[93mNumero de nulos en la data de entrenamiento: {sum(train.isna().
sum())}’) Valores
Numero de valores nulos en la data de entrenamiento: 0 nulos
train.head()
Reconocimiento de Entidades
Paso 5: Análisis de la información
print(f'\033[92mNumero de filas en la data: {sqrs.shape[0]}’) filas
Numero de filas en la data: 18180
print(f'\033[94mNumero de columnas en la data: {sqrs.shape[1]}’) columnas
Numero de columnas en la data: 12
print(f'\033[91mNumero de valores en la data: {sqrs.count().sum()}’) Valores totales
Numero de valores en la data: 216541
print(f'\033[93mNumero de nulos en la data: {sum(sqrs.isna().sum())}’) Valores nulos
Numero de valores nulos en la data: 1619
sqrs.head()
Reconocimiento de Entidades
Paso 5: Análisis de la información
patients_notes['pn_history'][1]
sqrs[‘Description'][1]
Reconocimiento de Entidades
Paso 5: Análisis de la información
notes_counts = patients_notes.groupby("case_num").count()
fig = px.bar(data_frame =notes_counts,
x = notes_counts.index,
y = 'pn_num' ,
color = "pn_num",
color_continuous_scale = "Emrld")
fig.update_layout(title={'text':'Distribution of patient notes for each case',
'y':0.95,
'x':0.48,
'xanchor': 'center',
'yanchor': 'top’} , xaxis = dict(
tickmode = 'array',
tickvals = [0, 1,2, 3, 4,5, 6,7,8,9],
ticktext = ['Case 0', 'Case 1', 'Case 2', 'Case 3', 'Case 4’,
'Case 5', 'Case 6', 'Case 7', 'Case 8', 'Case 9']), template = "plotly_white")
fig.show()
Distribución de la cantidad de sentencias de texto de acuerdo con una variable categórica; los
casos.
Julio de 2023 Procesamiento de Lenguaje Natural
.
Reconocimiento de Entidades
Paso 5: Análisis de la información
Reconocimiento de Entidades
Paso 5: Análisis de la información
notes_sqrs = sqrs.groupby("Categoria").count()
fig = px.bar(data_frame =notes_sqrs,
x = notes_sqrs.index,
y = 'Numero de la solicitud' ,
color = "Numero de la solicitud",
color_continuous_scale="Emrld")
fig.update_layout(title = {'text': 'Distribucion de las SQRs por Categorias',
'y':0.95,
'x':0.48,
'xanchor': 'center',
'yanchor': 'top'} , xaxis = dict(
tickmode = 'array',
tickvals = ['Solicitud', 'Reclamo', 'Operativa', 'Consulta', 'Requerim
iento Interno', 'Legales'],
ticktext =
['Solicitud', 'Reclamo', 'Operativa', 'Consulta', 'Requerimiento Interno', 'Le
gales’], template = "plotly_white")
fig.show()
Distribución de la cantidad de sentencias de texto de acuerdo con una variable categórica: las
Julio de 2023 Procesamiento de Lenguaje Natural
.
Reconocimiento de Entidades
Paso 5: Análisis de la información
Reconocimiento de Entidades
Paso 5: Análisis de la información
all_notes = []
all_notes_len = []
for notes in patients_notes['pn_history']:
all_notes.append(notes)
all_notes_len.append(len(notes))
print("Average length of Patient History - ",np.mean(all_notes_len))
fig = px.histogram(x = all_notes_len, marginal =
"violin",nbins = 100)
fig.update_xaxes(title = "Lenght of patient Notes")
fig.show()
Realiza una agrupación de las notas entorno a su extensión, determinada por el número de
caracteres.
Reconocimiento de Entidades
Paso 5: Análisis de la información
Reconocimiento de Entidades
Paso 5: Análisis de la información
all_sqrs = []
all_sqrs_len = []
for sqr in sqrs['Descripcion']:
all_sqrs.append(sqr)
all_sqrs_len.append(len(str(sqr)))
print("Largo Promedio de la Descripcion de las SQRs - ",np.mean(all_s
qrs_len))
fig = px.histogram(x = all_sqrs_len, marginal="violin",nbins = 100)
fig.update_xaxes(title = "Largo de la Descripcion de las SQRs")
fig.show()
Realiza una agrupación de las SQRs entorno a su extensión, determinada por el número de
caracteres.
Reconocimiento de Entidades
Paso 5: Análisis de la información
Reconocimiento de Entidades
Paso 6: Reconocimiento de Entidades
import spacy
from spacy import displacy
nlp = spacy.load("en_core_web_sm")
doc = nlp(text)
displacy.render(doc, style='ent', jupyter=True, options={'distance': 90})
Implementación de la librería spacy para el reconocimiento de entidades por medio del uso de una
fuente de información o Pipeline ("en_core_web_sm") entrenado en texto escrito en el idioma
inglés, la inclusión de Jupyter mejora la visualización de dicho reconocimiento.
Reconocimiento de Entidades
Paso 6: Reconocimiento de Entidades
text = sqrs_test['Descripcion'][3]
for ent in doc.ents:
print(ent.label_, ent.text)
nlp = spacy.load("en_core_web_sm")
doc = nlp(text)
displacy.render(doc, style='ent', jupyter=True, options={'distance': 90})
Reconocimiento de Entidades
Paso 6: Reconocimiento de Entidades
! pip install spacy~=3.1
! python -m spacy download es_core_news_sm
doc = nlp(text)
print(doc.text)
for token in doc:
print(token.text, token.pos_, token.dep_)
Reconocimiento de Entidades
Paso 6: Reconocimiento de Entidades
Reconocimiento de Entidades
Paso 6: Reconocimiento de Entidades
import es_core_news_sm
import es_core_news_md
nlp_md = es_core_news_md.load()
article_text = '''La ONG Fundación del Río explicó este viernes que la decisión de la Organización
de la ONU para la Educación, la Ciencia y la Cultura (Unesco) de declarar como geoparque el río Coco, ub
icado en el norte de Nicaragua, obliga a las autoridades nicaragüenses a proteger su ecosistema, ya que
se encuentra en el área más deforestada de la cuenca. La Unesco está reconociendo la importancia del río
Coco, pero también está haciendo un llamado al Gobierno a que actúe en la protección y la conservación
de esos ecosistemas, dijo a Efe el presidente de la Fundación del Río, Amaru Ruiz.'''
doc = nlp_md(article_text)
SVG(data = displacy.render(doc, style="ent"))
Reconocimiento de Entidades
Paso 6: Reconocimiento de Entidades
! pip install spacy~=3.1
! python -m spacy download es_core_news_sm
from IPython.display import SVG
nlp_md = es_core_news_md.load()
text = sqrs_test['Descripcion’][14915]
doc = nlp_md(text)
SVG(data = displacy.render(doc, style="ent"
))
¿ Tienes alguna
pregunta ?
cnavarroperez@campuseseit.edu.co
cnavarrop@unal.edu.co
+57 3175341629
Prepared by Analytics Latam - The Storytelling & Analytics Workshop
Proprietary & Confidential