Está en la página 1de 28

Procesamiento

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.

Julio de 2023 Procesamiento de Lenguaje Natural


Reconocimiento de Entidades
Marcación de palabras en el texto que facilitan la lectura y asimilación de la información:

Palabras
Claves

Julio de 2023 Procesamiento de Lenguaje Natural


Reconocimiento de Entidades
Paso 1: Importar librerías de Python
import os

Usar funcionalidades dependientes del sistema operativo, sobre todo información del
entorno

import spacy

Procesamiento avanzado de lenguaje natural y reconocimiento de entidades

import warnings

Emisión de mensajes de advertencia

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

Facilita la limpieza y análisis de datos a través de la generación de estructuras (por


ejemplo, tablas)

import seaborn as sns


import plotly.express as px
import matplotlib.pyplot as plt
import plotly.graph_objects as go

Librerías especializadas en la visualización de datos y creación de objetos

Julio de 2023 Procesamiento de Lenguaje Natural


Reconocimiento de Entidades
Paso 1: Importar librerías de Python
!pip install -U -q PyDrive

pip: Es el administrador de paquetes para Python y permite instalar y administrar


paquetes que no forman parte de la biblioteca estándar de Python

PyDrive: Es una biblioteca que contiene funciones comunes de Google Drive

from pydrive.auth import GoogleAuth

Es la librería que permite la autenticación en las cuentas de Google

from pydrive.drive import GoogleDrive

Leer o cargar archivos desde GoogleDrive

Julio de 2023 Procesamiento de Lenguaje Natural


Reconocimiento de Entidades
Paso 1: Importar librerías de Python
from google.colab import auth

Permite que la autorización sea simple, escalable y potente

from oauth2client.client import GoogleCredentials

Permite que la autenticación mediante el ingreso de las credenciales de Google

Julio de 2023 Procesamiento de Lenguaje Natural


.

Reconocimiento de Entidades
Paso 2: Autenticación del E-mail
auth.authenticate_user()

Genera el llamado a los servicios de Google para autorizar la autenticación en la


cuenta seleccionada

gauth = GoogleAuth()

Crea un servidor web local y gestiona automáticamente la autenticación

gauth.credentials = GoogleCredentials.get_application_default()

Devuelve las credenciales predeterminadas de la aplicación que se utilizan para identificar


y autorizar toda la aplicación

drive = GoogleDrive(gauth)

Accede a los archivos en Drive


Julio de 2023 Procesamiento de Lenguaje Natural
.

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’)

Lectura de la información de los archivos .csv

sqrs = pd.read_csv('Base_SQRs_act.csv',encoding='latin1',sep=";")

encoding: Facilita la lectura de caracteres usualmente implementados en el idioma


español

Julio de 2023 Procesamiento de Lenguaje Natural


.

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()

Julio de 2023 Procesamiento de Lenguaje Natural


.

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()

Julio de 2023 Procesamiento de Lenguaje Natural


.

Reconocimiento de Entidades
Paso 5: Análisis de la información
patients_notes['pn_history'][1]

Lectura del primer registro de la columna pn_history

17 yo male with recurrent palpitations for the past 3 mo lasting about 3


- 4 min, it happened about 5 - 6 times since the beginning. One time
durign a baskeball game two days ago light headedness, pressure in the
chest, catching breath, but no fainting. During teh episodes no
sweating. No diarrhea, no heat intolerance, no weight loss. Has tried
aterol to be able to better concentrate, has received it from his
roommate.

sqrs[‘Description'][1]

transaccion fue anulada en el establecimiento 2022-05-30 2022-05-30


409 409074822150000f 748 COMPRA NAL.FALABELLA TDAS DPTO CC
080010 $48,292.00 sin embargo, se desconto el valor

Julio de 2023 Procesamiento de Lenguaje Natural


.

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

Julio de 2023 Procesamiento de Lenguaje Natural


.

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

Julio de 2023 Procesamiento de Lenguaje Natural


.

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.

Julio de 2023 Procesamiento de Lenguaje Natural


.

Reconocimiento de Entidades
Paso 5: Análisis de la información

Julio de 2023 Procesamiento de Lenguaje Natural


.

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.

Julio de 2023 Procesamiento de Lenguaje Natural


.

Reconocimiento de Entidades
Paso 5: Análisis de la información

Julio de 2023 Procesamiento de Lenguaje Natural


.

Reconocimiento de Entidades
Paso 6: Reconocimiento de Entidades
import spacy
from spacy import displacy

text = "When Sebastian Thrun started working on self-


driving cars at Google in 2007, few people outside of the company took him ser
iously."

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.

Julio de 2023 Procesamiento de Lenguaje Natural


.

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})

Ejemplo de Reconocimiento de entidades en el idioma Inglés de un texto en español

Julio de 2023 Procesamiento de Lenguaje Natural


.

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_)

displacy.render(doc, style='dep', jupyter=True, options={'distance': 140})

Ejemplo de Reconocimiento de entidades en el idioma Español de un texto en español


directamente asociado a las Solicitudes, Quejas y Reclamos, en este caso con el estilo = 'dep'

Julio de 2023 Procesamiento de Lenguaje Natural


.

Reconocimiento de Entidades
Paso 6: Reconocimiento de Entidades

pron verb pron prep sust verb prep sust verb

Julio de 2023 Procesamiento de Lenguaje Natural


.

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"))

Julio de 2023 Procesamiento de Lenguaje Natural


.

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"
))

Ejemplo de Reconocimiento de entidades en el idioma Español de un texto en español


directamente asociado a las Solicitudes, Quejas y Reclamos, en este caso con el estilo = 'dep'

Julio de 2023 Procesamiento de Lenguaje Natural


Pregunta

¿ Tienes alguna
pregunta ?
cnavarroperez@campuseseit.edu.co
cnavarrop@unal.edu.co
+57 3175341629
Prepared by Analytics Latam - The Storytelling & Analytics Workshop
Proprietary & Confidential

También podría gustarte