Está en la página 1de 44

ASIGNATURA: TALLER DE ANALÍTICA II

UNIDAD I: ANÁLISIS DE TEXTO


Índice de Contenidos

Introducción 3

1.1. Estrategias para el preprocesamiento de texto 4

1.2. Detección de términos relevantes 26

1.3. Detección de temas 38

Conclusión 42

Bibliografía 43

2
Introducción
Ya se ha aprendido a trabajar con datos estructurados, este tipo de datos se caracteriza por tener una estructura
altamente organizada, formateados de manera amigable para el manejo y análisis de datos. Algunos ejemplos
de este tipo de datos son los archivos Excel, archivos separados por coma (csv), datos extraídos y leídos por
medio de consultas SQL, por indicar algunos. Estos datos son amigables para el manejo y análisis dada su
naturaleza estructurada. Se dice que el 20% de los datos que uno puede encontrar se presentan de forma
estructurada. En tanto el 80% se presenta de forma no estructurada. Actualmente internet está llena de este
tipo de datos, tales como texto, imágenes, videos y audio1. Todo un desafío para los analistas y científicos de
datos en el uso, manejo y extracción de información necesaria para la toma de decisiones

En esta asignatura abordaremos el manejo y uso de dos tipos de data no estructurada: análisis de texto y análisis
de imágenes. En esta primera unidad, realizaremos una introducción al procesamiento de lenguaje natural,
iniciando con el preprocesamiento de los datos, donde abordaremos conceptos como tokenización, parser,
lematización, entre otros, los cuales son esenciales para realizar este tipo de tarea. Luego continuaremos con la
detección de términos relevantes y finalizaremos con una introducción a algoritmos de detección de temas.

1
Pure Storage. (2022). Datos estructurados frente a datos no estructurados. Disponible en:
https://www.purestorage.com/la/knowledge/big-data/structured-vs-unstructured-data.html
3
1.1. Estrategias para el preprocesamiento de texto

Al igual que en el tratamiento de datos estructurados, en data no estructurada la tarea de preprocesamiento de


datos es fundamental. Esto se debe a que la información contenida no presenta un patrón claro a simple vista
para el procesamiento de una computadora, no así para un humano.

Por ejemplo, si escribimos “Estoy esperando sentado en el banco de la plaza” nosotros entendemos que se trata
de un asiento. En cambio, sí escribimos “Estoy esperando en el banco a que me paguen un cheque” entendemos
que se trata de un banco comercial. Sin embargo, esta sencilla tarea para un computador no es tan simple, dado
que si no conoce el contexto puede entender que “banco” se refiere a la misma palabra.

Además, se nos presenta otro desafío como es la tarea de búsqueda y la tarea de descubrimiento.

En el caso de la data estructurada, las tareas de búsqueda se enfocan en la recuperación de datos por medio de
alguna condición o característica de los datos a buscar, tal como puede ser la fecha de ingreso de un cliente, por
medio de consultas SQL. En cambio, para datos no estructurados, la forma de recuperación de información se
basa en uso de palabras claves, tal como cuando realizamos búsquedas por medio de éstas en algún buscador.
Por ejemplo, cuando buscamos el término “procesamiento lenguaje natural” en Google, Yahoo u otro buscador
que utilizamos de manera habitual.

En tanto, para la tarea de descubrimientos, en el caso de data estructurada, usualmente tenemos alguna idea
en mente. Por ejemplo, dada una base de datos con información médica, buscamos identificar por medio de
características similares (patrón), la posibilidad de tener o no tener una enfermedad. En tanto, en datos no
estructurados, también debemos tener en mente alguna tarea de descubrimiento para aplicar técnicas de
minería de texto que nos ayuden a encontrar patrones para la toma de decisiones. Por ejemplo, tenemos una
base de datos con reseñas de películas y nos gustaría conocer que cosas son las que prefieren y no prefieren las
personas que han visto un tipo de película. Esto nos puede ayudar a encontrar por medio de patones, conexiones
no evidentes entre los comentarios y así poder agruparlas para generar recomendaciones a guionistas en la
producción de nuevos guiones cinematográficos.

De acuerdo con lo anterior, el manejo de data no estructurada ha generado una necesidad de poder contar con
técnicas para su recopilación (búsqueda) y análisis (descubrimiento) para la creación de valor dentro de las
organizaciones ya que estos pueden generar nuevas oportunidades de negocios, tal como la señalada en el
ejemplo indicado en párrafo anterior. Además, se debe considerar que el volumen de este tipo de datos
representa prácticamente el 80% de los datos existentes.

4
Por lo tanto, este tipo de dato no puede ser analizado directamente con las técnicas de minería de datos que
hemos revisado en módulos anteriores, debido a su naturaleza lingüística y forma de ser expresada.
Consiguientemente, el manejo de este tipo de dato debe ser abordado con técnicas computacionales de análisis
de datos que permitan realizar esta labor.

El análisis de texto busca resolver problemas de información textual, proveniente de diversas fuentes de datos,
tales como páginas de noticias, Twitter, mensajería de WhatsApp o cualquiera que produzca información bajo
esta estructura. Para lograr resolver lo anterior se recurre al uso de herramientas y algoritmos de minería de
texto. Entendemos por minería de texto al proceso de conocimiento y aprendizaje, donde el usuario interactúa
con diversos documentos a lo largo del tiempo, utilizando técnicas computacionales para descubrir patrones que
puedan ser interesantes y útiles para el usuario. Sin embargo, el analista de datos se ve enfrentado a algunos
desafíos que presenta el análisis de textos, los cuales pueden ser clasificados de la siguiente forma:

- Ambigüedad: El lenguaje natural por esencia tiene un alto grado de ambigüedad. Más de alguna vez, hemos
expresado o escuchado una frase y puede tener distintas connotaciones o interpretaciones. La fuente de
ambigüedad puede venir dada por una palabra con más de un significado (léxica), por una oración que posee
varias interpretaciones (semántica) o bien, por una oración que posee varios contextos posibles
(pragmática).

Ejemplo
Considere una búsqueda en Google de la palabra vaso. Note que los dos primeros resultados nos
arrojan dos resultados distintos. Por un lado, nos muestra como resultado vaso de un recipiente
que sirve para beber líquido. En cambio, el segundo resultado tiene relación a un vaso sanguíneo.

5
- Dimensionalidad: Un texto escrito en lenguaje natural es altamente dimensional, ya que posee muchas
características o dimensiones que pueden describirlo. Cada dimensión podría ser una palabra (vaso), término
(vaso sanguíneo), o una frase. Imagine ahora que usted dispone de una colección de mensajes de WhatsApp
o de Twitter. Cada una de las palabras, emojis, símbolos son las dimensiones de un mensaje y si considera la
cantidad de mensajes o tweets (¿miles, millones?) la cantidad de dimensiones comienzan a incrementar de
gran manera que dificultan su manejo.

- Conocimiento Lingüístico: Para usted es simple poder entender frases como:

“desde tu casa, el cielo se ve celeste”

“el cielo de tu casa es celeste”

Sin embargo, para un método computacional no lo es, ya que necesita contar con mucho conocimiento léxico
(¿Conozco la palabra?), sintáctico (¿Está bien formada la oración?), semántico (¿Cuál es el significado de la
oración?) y pragmático (¿Qué intenta comunicar dicha frase como un todo?)

Para lograr extraer información relevante, la minería de texto combina tres áreas: Procesamiento de Lenguaje
Natural, Aprendizaje Automático y Recuperación de Información. A continuación, definiremos cada una de
estas áreas:

- Procesamiento de Lenguaje Natural (NLP): El NLP proporciona teorías, modelos y métodos para lograr que
un computador pueda entender lenguaje natural haciendo uso de análisis fonético, morfológico, léxico,
sintáctico, semántico, discursivo y pragmático.

- Aprendizaje Automático: a través de técnicas computacionales un computador puede aprender tareas a


partir de la experiencia. Estos modelos utilizados en el Aprendizaje Automático son capaces de generalizar
comportamientos para casos desconocidos, mejorando la realización de ciertas tareas.

- Recuperación de Información2: es la ciencia de la búsqueda de información en documentos electrónicos y


cualquier tipo de colección documental digital, encargada de la búsqueda dentro de estos mismos, búsqueda
de metadatos que describan documentos, o también la búsqueda en bases de datos relacionales, ya sea a
través de internet, una intranet, y como objetivo realiza la recuperación en textos, imágenes, sonido o datos
de otras características, de manera pertinente y relevante.

2
Wikipedia. (2022). Búsqueda y recuperación de información. Disponible en :
https://es.wikipedia.org/wiki/B%C3%BAsqueda_y_recuperaci%C3%B3n_de_informaci%C3%B3n
6
La recuperación de información es un estudio interdisciplinario. Cubre tantas disciplinas que eso genera
normalmente un conocimiento parcial desde tan solo una u otra perspectiva. Algunas de las disciplinas que
se ocupan de estos estudios son la psicología cognitiva, la arquitectura de la información, diseño de la
información, inteligencia artificial, lingüística, semiótica, informática, biblioteconomía, archivística y
documentación.

Sabias que…
o Fonética y fonología: conocimiento sobre los sonidos lingüísticos.

o Morfología: conocimiento de los componentes significativos de las palabras.

o Léxico: conocimiento de un conjunto de palabras que conforma un determinado


lecto.

o Sintaxis: conocimiento de las relaciones estructurales entre palabras.

o Semántica: conocimiento del significado.

o Discurso: conocimiento sobre unidades lingüísticas más grandes que un solo


enunciado.

o Pragmática: conocimiento de la relación del significado con los objetivos y las


intenciones.

A continuación, abordaremos las técnicas más populares de procesamiento para análisis de texto.

Tokenizer

Los tokens son componentes textuales mínimos e independientes que tienen una sintaxis y una semántica
definidas. Un párrafo de texto o documento de texto tiene varios componentes, como las oraciones, que a su
vez pueden dividirse en frases y palabras.

Para esto, aprenderemos a utilizar técnicas de tokenización, esto es, el proceso de dividir un texto en una lista
más pequeña, tales como frases, palabras. El resultado de esta tarea es generar una lista de tokens.

7
Ejemplo
A continuación puede observar dos tipos de tokenizador.

- Tokenización en frase

- Tokenización en palabras

Tokenización en frases

La tokenización en frases es el proceso de dividir un documento (corpus) de texto en frases que actúan como el
primer nivel de tokens del que se compone el corpus. También se conoce como segmentación de oraciones, ya
que busca segmentar en frases con sentido. Existen varias formas de realizar la tokenización de frases. Las
técnicas básicas incluyen la búsqueda de delimitadores entre oraciones, como un punto (.) o un carácter de nueva
línea (\n), e incluso un punto y coma (;).

Para esta labor utilizaremos la librería NLTK, que ofrece varias funciones para realizar la tokenización de frases.
Las funciones que usaremos son las siguientes:

- sent_tokenize
- tokenize
- PunktSentenceTokenizer
- Expresiones Regulares.

8
i. sent_tokenize

La función de tokenización por defecto, recomendada por la librería nltk es sent_tokenize. Esta función utiliza
internamente una instancia de clase PunktSentenceTokenizer.

Esta función ha sido pre-entrenada en varios modelos lingüísticos y funciona realmente bien en muchos idiomas
populares, además del inglés, idioma por defecto.

Ejemplo
A continuación mostraremos el uso de esta función.

Hemos obtenido como resultado un vector con token por cada frase. En este caso, el vector contiene dos
tokens.

El problema que presenta esta función es que no es escalable, ya que si se opera con grandes volúmenes
de texto esta forma no resulta efectiva. En este caso utilizaremos la función tokenize de la misma librería
nltk.

ii. tokenize
A continuación, replicaremos el ejemplo anterior utilizando esta librería.

Ejemplo
A continuación mostraremos el uso de esta función.

9
En bajo volúmenes de datos, el rendimiento es similar, sin embargo, tal como se ha señalado, para grandes
volúmenes de datos es recomendable el uso de esta función.

iii. PunktSentenceTokenizer
Una solución para realizar tokenización es usar la librería punkt Tokenizer en vez de sent_tokenize, dado que
esta es la instancia de dicha función.

Ejemplo
A continuación mostraremos el uso de esta función.

Hemos logrado el mismo resultado de la librería sent_tokenizer. Sin embargo, ¿qué ocurre si tenemos alguna
abreviación en nuestro texto tal como “Sr. Tomás”? En este caso la tokenización la hará separando por el
“punto” que no es lo deseado en este caso. Para eso utilizaremos expresiones regulares.

iv. Expresiones Regulares

A continuación realizaremos tokenización realizando un pre-procesamiento de palabras abreviadas antes de


tokenizarlas. Para esto procederemos a eliminar la puntuación de palabras abreviadas.

10
Sabias que…
Tratabajar con expresiones regulares puede ser algo tedioso. A continuación te dejo un
“torpedo” de las principales expresiones regulares usadas. Además, te recomiendo que
revises el jupiter notebook de este tema (1.1.Expresiones Regulares).

Ejemplo
A continuación mostraremos el uso de esta función.

11
Podemos ver que esta forma de tokenización ad-hoc evita que los puntos sean tokenizados.

Tokenización por palabras

La tokenización por palabras consiste en dividir las frases en las palabras que la componen, incluido símbolos de
puntuación. El proceso de tokenización de palabras es fundamental en procesos de limpieza y normalización de
texto, donde operaciones como el stemming y la lematización actuan sobre cada palabra basándose en sus stems
y lemma. El paquete nltk proporciona varias interfaces útiles para la tokenización de palabras, las cuales
revisaremos a continuación.

- word_tokenize
- TreebankWordTokenizer
- RegexpTokenizer
- Inherited tokenizers from RegexpTokenizer

i. word_tokenize

La función word_tokenize es el tokenizador de palabras por defecto y recomendado por nltk. Este tokenizador
es una instancia u objeto de la clase TreebankWordTokenizer en su implementación interna y actúa como una
envoltura de esa clase principal. A continuación revisaremos su uso.

Ejemplo
A continuación mostraremos el uso de esta función.

12
ii. TreebankWordTokenizer

El TreebankWordTokenizer se basa en el Penn Treebank y utiliza varias expresiones regulares para tokenizar el
texto. Algunas de las principales características de este tokenizador son las siguientes.

- Divide y separa los puntos que aparecen al final de una frase.


- Divide y separa las comas y las comillas simples cuando van seguidas de espacios en blanco.
- La mayoría de los caracteres de puntuación se dividen y separan en tokens independientes.
- Divide las palabras con contracciones estándar. Por ejemplo: don't para hacer y n't.

Ejemplo
A continuación mostraremos el uso de esta función.

El resultado obtenido es similar a word_tokenize ya que ambos usan el mismo mecanismo de tokenización.

iii. Expresiones Regulares.

La función RegexpTokenizer es útil para tokenizar palabras por medio de expresiones regulares. Esta función
presenta dos parámetros:

- pattern: se indica el patrón de expresión regular para tokenizar.


- gaps:True se usa para encontrar los espacios entre token, False se usa para encontrar los propios token.

A continuación se observa el uso de esta función.

13
Ejemplo
A continuación mostraremos el uso de esta función.

Procederemos a graficar uno de los resultados obtenidos de la tokenización de los texto con el objetivo de
conocer cuál es la palabra más utilizada.

Ejemplo
A continuación mostraremos el uso de esta función.

14
Tagger o Etiquetado

Ahora bien que ya hemos separado nuestras oraciones en palabras, el paso siguiente es etiquetar las mismas. En
la lingüística de corpus, el etiquetado gramatical, llamado POS taggingg (Part-Of_Speech tagging), es el proceso
para identificar las diferentes partes de la oración, sobre la cual se debe asignar una etiqueta (tag) a cada una de
las palabras de un texto. Esta etiqueta corresponde a la categoría gramatical de dichas palabras. Una forma
simplificada de esto es estudiada en los colegios, donde se enseña la identificación de palabras como sustantivos,
verbos, adjetivos, adverbios, etc.

Las principales categorías del etiquetado es identificar sustantivo, verbo, adjetivo, pronombre, adverbio,
conjunción, preposición, determinante y artículo, así como otros elementos funcionales como partículas,
números y signos de puntuación. Este proceso puede ser algo simple cuando trabajamos con un bajo volumen
de datos. Sin embargo, cuando uno quiere realizar esta tarea de forma manual en grandes volúmenes de texto,
dicha labor se hace prácticamente imposible de ejecutar por persona. Además, existe una alta posibilidad de
error en elección del etiquetado. Considere lo anterior en un idioma distinto al nuestro. Por lo tanto, necesitamos
de métodos computacionales para realizar esta tarea.

El etiquetado POS pone a nuestra disposición parte de la estructura inherente al lenguaje sin necesidad de
entender o codificar toda la jerarquía sintáctica o el contenido semántico.

El primer corpus con etiquedo POS en habla inglesa fue el Brown Corpus, creado en los años 60 por Kuĉera y
Francis, y que utilizó un conjunto de 87 marcas. Esto proporcionó el patrón para muchos conjuntos de etiquetas
posteriores para el inglés; por ejemplo, el conjunto de etiquetas Penn Treebank3 (36 etiquetas) y Claws C5 (57
etiquetas) utilizadas en el British National Corpus4, el Susanne Corpus5 y LOB corpora6. Generalmente el conjunto
de etiquetas dependerá del lenguaje empleado y nivel de granularidad, ya que algunas ocasiones solo nos puede
interesas aspectos generales de la palabra.

3
Alphabetical list of part-of-speech tags used in the Penn Treebank Project. Disponible en:
https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html
4
Guidelines to wordclass tagging. Disponible en : https://ucrel.lancs.ac.uk/bnc2/bnc2guide.htm#tagset
5
Lexical Computing CZ s.r.o. (s.f.). English tagsets. Disponible en: https://www.sketchengine.eu/susanne-corpus-part-of-
speech-tagset/
6
Appendix 4: List of tags. Disponible en: http://korpus.uib.no/icame/manuals/LOBMAN/LOBAPP4.HTM
15
Ejemplo
A continuación realizaremos un ejemplo utilizando el analizador FreeLing 4.2.

https://nlp.lsi.upc.edu/freeling/demo/demo.php

Los algoritmos de etiquetado POS pueden ser abordado por medio de cuatro enfoques computacionales

a. Etiquetadores basados en reglas.: Usan reglas definidas por expertos. Sigue un proceso de dos etapas. En la
primera etapa, el texto es tokenizado, y etiquetado con todas las etiquetas POS posibles utilizando un léxico
o un analizador morfológico. Se requiere un analizador morfológico de amplia cobertura para proporcionar
análisis de todos los rasgos. En la segunda etapa, se desarrollan reglas creadas manualmente y
lingüísticamente motivadas que buscan seleccionar la etiqueta más apropiada o eliminar las etiquetas
inapropiadas, dejando idealmente la etiqueta POS correcta para el token apropiado para el contexto. El
etiquetador aplica las reglas a los textos y los resultados se evalúan. Este método no es robusto, ya que el
uso de las reglas puede cambiar dependiendo el contexto, dificultando su mantención (recursos financieros
y humanos son limitados) y escalabilidad.
b. Etiquetadores estadísticos: Los etiquetadores estadísticos supervisados, basados en el aprendizaje
automático, requieren una cantidad sustancial de datos de entrenamiento etiquetados con precisión.
Calculan las probabilidades de las etiquetas en nuevos textos, basándose en los datos de frecuencia
observados en un corpus de entrenamiento etiquetado manualmente. Esto es posible porque, aunque una
palabra puede tener más de una categoría POS posible, no todas tienen la misma probabilidad de ocurrir,
especialmente si se tiene en cuenta el contexto local. Los principales inconvenientes de los etiquetadores
estadísticos es que no considera el contexto de las palabras en las oraciones, por lo tanto, siempre se asignará
la misma etiqueta que tiene mayor probabilidad a una palabra, independiente del contexto.

16
c. Métodos estocásticos: Estos utilizan modelos supervisados de predicción de secuencias basados en
enfoques de inferencia probabilísticas bayesiana. Generalmente usan modelos ocultos de Markov (HMM) y
una generalización llamada Conditional Random Field (CRF). Lo que realizan estos métodos es que a partir
de un texto de entrada y un conjunto de textos de entrenamiento, puede generar la secuencia más probable
de etiquetas POS asociadas a la palabra de dicho texto.
d. Métodos basados en aprendizaje automático: Modelos de secuencias que utilizan técnicas de aprendizaje
supervisado a partir de una colección de textos de entrenamiento anotados con las etiquetas correctas, para
luego predecir la mejor secuencia de etiquetas para un texto de entrada. A diferencia de los modelos
estocásticos, que asumen que los datos presentan cierta distribución probabilística, este tipo de enfoque
aprende a modelar secuencias de entrada que se transforman en secuencia de salida, por medio de métodos
basados en redes neuronales artificiales recurrentes y métodos de Memoria a corto plazo (LSTM), los cuales
permiten capturar el contexto que de la palabra a etiquetar realizando predicciones de roles.

A continuación revisaremos algunas librerías que nos ayudan al proceso de etiquetado POS7.

i. pos_tag()

Este será el primer método a usar. Está basado en Pen Treebank. Actualmente, ésta librería solo soporta
idioma ínglés y ruso.

Ejemplo

7
Puede acceder a los tipos de POS Tagging por medio de la función nltk.help.upenn_tagset()
17
La salida donde se agrega tagset=”universal” muestra la etiqueta POS de forma más entendible, sin necesidad
de acudir a la ayuda para identificar el POS Tagging,

ii. pattern

Módulo que contiene POS tagging tanto en Ingles pattern.en(), como en Español pattern.es() que identifica
sustantivos, adjetivos, verbos, etc. en una oración. Revisaremos su versión en español.

Ejemplo

Este tipo de etiquetado sigue el formato Penn Treebank, especificando la forma de adjetivo, sustantivo o verbo
con más detalle.

Procederemos a graficar uno de los resultados obtenidos del etiquetado POS de los texto con el objetivo de
conocer cuál es tagging con más presencia.

Ejemplo
Usaremos el resultado obtenido desde la librería pos_tag()

18
Ejemplo (continuación)
Se observa que tenemos token y etiquetas dentro de un mismo arreglo. Para esto, procederemos a
capturar solamente las etiquetas y sobre éste realizaremos el conteo de valores.

19
Parser

Hemos visto que el etiquetado POS se refiere a las palabras; el siguiente nivel de anotación del corpus, el análisis
superficial (o parcial), se refiere a unidades sintácticas mayores como son las frases, cláusulas y oraciones. Este
análisis implica realizar un análisis sintáctico determinando la forma en que las palabras y sus roles dan cuenta
de las relaciones gramaticales. Un programa que lleva a cabo este nivel de análisis se conoce como analizador
o parser.

El parser es una tarea más compleja que el etiquetado POS, ya que debe ocuparse de un mayor número de
estructuras, es decir, no sólo de palabras, sino también de frases y cláusulas.

Los parsers pueden realizar análisis en profundidad y análisis parcial. Ambos producen distintos tipos de
estructura.

a. Análisis en Profundidad (Full Parsing): El parser toma una gramática y genera una estructura en forma de
árbol sintáctico intentando detectar todas las relaciones “coincidentes” con las reglas gramaticales para todo
el texto de entrada.
b. Análisis Superficial (Chunking): El proceso de búsqueda se realiza para todo el texto, por lo tanto, se intenta
encontrar una estructura recursiva en profundidad que cubra toda la entrada, o sea, parsing completo. Sin
embargo, el tiempo computacional que toma analizar un texto más complejo puede ser muy alto.

Ejemplo
A continuación realizaremos un ejemplo de Shallow parsing (análisis supericial) utilizando el
analizador FreeLing 4.2.

https://nlp.lsi.upc.edu/freeling/demo/demo.php

20
A continuación revisaremos algunas librerías que ayudan a realizar el parser de dato. Mayor detelle revisar el
jupyter notebook.

i. parse() ibrería patter

Analizador sintáctico para varios idiomas. A continuación revisaremos su versión en Español.

Ejemplo

ii. StanfordParser
Muestra un árbol separando el texto en frases y luego hace el proceso de parseo, colocando en el mismo nivel
aquellas palabras que son parte de la misma familia. Realiza un Análisis Superficial (Chunking):

Debe estar instalado java en el computador, junto con los paquetes necesarios para el parseo
https://stanfordnlp.github.io/CoreNLP/download.html.

21
Ejemplo

iii. StanfordDependencyParser

Permite generar árboles de análisis de dependencias para las frases con el objetivo de analizar y comprender
las relaciones y dependencias entre los tokens. Realiza un Análisis en Profundidad (Full Parsing). La
visualización la realizaremos en un árbol simplificado.

22
Ejemplo

Lemmatizer

La lematización es el proceso lingüístico que sustituye una palabra con forma flexionada (plurales, femeninos,
verbos conjugados, etc.) por su lema; es decir, por una palabra válida en el idioma, la palabra que encontraríamos
en el diccionario. Por ejemplo, los verbos en su forma conjugada “juegan” o “jugarán”, compartirían el lema
“jugar” y serian considerados como un mismo rasgo dentro del vocabulario.

23
i. spacy

Para esta parte usaremos la librería spacy, dado que la librería nltk no ofrece un lematizador. Procederemos a
cargar los diccionarios, tanto en inglés como español.

Ejemplo

Procederemos a graficar los resultados obtenidos para conocer el lemma con mayor frecuencia.

24
Ejemplo

25
1.2. Detección de términos relevantes

Hemos realizado las tareas de tokenización, etiquetado, parser y lematización. Sin embargo, nuestros textos
presentan palabras con poca relevancia para nuestros análisis. Por lo tanto, es necesario poder realizar algunas
tareas previas antes de continuar. Una de estas tareas es la detección ¿y eliminación? de palabras con bajo valor
conocidas como las stopwords.

StopWords

En este proceso se eliminan aquellas palabras que se emplean para articular el discurso, tales como artículos,
preposiciones, conjunciones,… , pero que no tienen por sí solas una semántica relevante en el contenido de un
texto. Se considera que este tipo de palabras no tienen capacidad discriminante, o dicho de otro modo, no
aportan semántica a la temática del discurso.

La librería nltk incluye un diccionario de stopwords cargado en varios idiomas; entre ellos, el español. Para cargar
este diccionario y realizar la limpieza utilizaremos el siguiente código.

La idea de eliminar estas palabras surgió de un trabajo de G. Salton, A. Wong y C. Yang, en el que se constató que
se obtenían mejores resultados en tareas de IR cuando los documentos eran menos similares entre sí, es decir,
si se les quitaban muchas de las palabras que compartían, logrando reducir así la densidad del espacio de los
documentos.

Una vez que los datos han sido tokenizados, podemos proceder a quitar las llamadas ''palabras vacías'' o
''stopwords''. Estas son palabras que no son útiles para el análisis.

A continuación revisaremos la librería nltk para eliminación de stopwords. En cuadero jupyter también puedes
revisar el uso de la librería spacy para remover stopwords.

26
Ejemplo

Agregaremos una función que elimine stopwords, puntuación, números y tokens vacíos.

27
Lematización y Radicalización

i. Lematización

Tal como se indicó anteriormente

El proceso de lematización es aquel en el que a cada forma flexiva se le asigna su lema. Es decir, se eliminan los
afijos de la palabra para llegar a la forma base de la palabra. La palabra raíz, también conocida como lema,
siempre estará presente en el diccionario.

ii. Radicaclización (Steamming)

Para entender el proceso de separación de palabras es necesario comprender lo que representan las de las
palabras. Los morfemas se componen de stems (troncos) y afijos. Los afijos son unidades como prefijos, sufijos,
etc., que se unen al stems de una palabra para cambiar su significado o para crear una palabra nueva. Los stems
de las palabras también se conocen como la forma base de una palabra, y podemos crear nuevas palabras
añadiéndoles afijos en un proceso conocido como inflexión. El proceso inverso consiste en obtener la forma base
de una palabra a partir de su forma flexionada, lo que se conoce como stemming.

El truncado (stemming), tiene el mismo objetivo que le lematización: reducir el número de rasgos del
vocabulario. Con el truncado se pretende aproximar un proceso de lematización de un modo sencillo y sin
necesidad de contar con un analizador morfológico ni recursos lingüísticos. La idea en la que reposa este proceso
es la misma que en el proceso de lematización: diferentes palabras construidas sobre un mismo lexema suelen
representar un mismo concepto. En este caso, a cada rasgo encontrado en un documento se le eliminan
caracteres de los prefijos o sufijos para lograr así agrupar diferentes palabras con una misma forma. De este
modo, formas diferentes como “comunicación”, “comunicante” o “comunicado”, compartirían el stem
“comunic-” y serían considerados como un mismo rasgo dentro del vocabulario.

Existen diferentes algoritmos de truncado (stemmers) para diferentes idiomas. Para el inglés el más utilizado es
el de Porter, aunque existen otros como el de Lovins o el de Dawson. También existen stemmers para otros
idiomas como el francés, castellano, árabe, holandés, etc. Una alternativa a la eliminación de sufijos es el
aprendizaje de reglas de truncado a partir de grandes colecciones de documentos. Analizando un conjunto de
palabras que forman parte de un idioma, se detectan los prefijos y sufijos que las forman, seleccionando después
como raíz de cada palabra el prefijo más probable.

28
iii. Diferencias entre Lematización y Steams

Podemos observar que el proceso de lematización es muy similar al de steams: se eliminan los afijos de la palabra
para llegar a la forma base de esta. La diferencia entre ambos es que en el caso de la lematización la palabra raíz
estará presente en el diccionario, en cambio la palabra truncada (steams) puede no estar presente.

El proceso de lematización es considerablemente más lento que el de la determinación del steam, ya que hay un
paso adicional en el que la forma de la raíz o lema se forma eliminando el afijo de la palabra si y sólo si el lema
está presente en el diccionario.

A continuación, revisaremos el uso de esta técnica de detección de términos utilizando las funciones de
lematizado y steamming de la librería nltk.

Ejemplo

29
Vectorización de términos

Existen varias técnicas de extracción de características que pueden aplicarse a los datos de texto. En un conjunto
de datos suele haber muchos puntos de datos. Normalmente, las filas del conjunto de datos y las columnas son
diversas características o propiedades del conjunto de datos, con valores específicos para cada fila u observación.
En la terminología de ML, las características son atributos o propiedades únicas y medibles para cada observación
en un conjunto de datos. Los rasgos suelen ser de naturaleza numérica o categóricos los cuales pueden
codificarse mediante un proceso denominado codificación one-hot. Para el proceso de extracción y selección de
se introducen en algoritmos de ML para aprender patrones que puedan aplicarse a nuevos para obtener
información. Estos algoritmos suelen esperar características en forma de vectores numéricos porque cada
algoritmo es en el fondo una operación matemática de optimización y minimización de pérdidas y errores cuando
intenta aprender patrones a partir de observaciones. Por tanto, con los datos textuales existe el reto añadido de
averiguar cómo transformar los datos textuales y extraer características numéricas de ellos.

A continuación, veremos algunos conceptos y técnicas de extracción de características especialmente orientados


a los datos textuales. El modelo de espacio vectorial es un concepto y un modelo muy útil cuando se trata de
datos textuales y es muy popular en la recuperación de información y la clasificación de documentos. El Modelo
de Espacio Vectorial, también conocido como Modelo de Vectores de Términos, se define como un modelo
matemático y algebraico para transformar y representar documentos de texto como vectores numéricos de
términos específicos que forman las dimensiones del vector. Matemáticamente se puede definir como sigue.
Digamos que tenemos un documento 𝐷 en un espacio vectorial de documentos 𝑉𝑆 El número de dimensiones o
columnas de cada documento será el número total de términos o palabras distintas de todos los documentos del
espacio vectorial. Por lo tanto, el espacio vectorial puede denotarse como.

𝑉𝑆 = {𝑊1 , 𝑊2 , 𝑊3 , … , 𝑊𝑛 }

Donde existen 𝑛 palabras distintas en todos los documentos. Ahora podemos representar el documento

𝐷 en este espacio vectorial como:

𝐷 = {𝑤𝐷1 , 𝑤𝐷2 , 𝑤𝐷3 … , 𝑤𝐷𝑛 }

Donde existen 𝑤𝐷𝑛 representa el peso de las palabras dentro del documento 𝐷.

Este peso es un valor numérico y puede representar: frecuencia de esa palabra en el documento, frecuencia
media de aparición, o el peso TF-IDF (será abordado en este capítulo).

A continuación, estudiaremos las siguientes técnicas de extracción de características:

30
Bag of Word

El modelo Bag of Word (BOW, bolsa de palabras) es una de las técnicas más sencillas, pero más potentes para
extraer características de los documentos de texto. La esencia de este modelo es convertir los documentos de
texto en vectores, de manera que cada documento se convierte en un vector que representa la frecuencia de
todas las palabras distintas que están presentes en el espacio vectorial del documento para ese documento
específico. Así, considerando nuestro vector de ejemplo de la notación matemática anterior para 𝐷, el peso de
cada palabra es igual a su frecuencia de aparición en ese documento. Lo interesante es que incluso podemos
crear el mismo modelo para las ocurrencias de palabras individuales, así como para las ocurrencias de n-gramas,
lo que lo convertiría en un modelo de bolsa de palabras de n-gramas, de manera que también se consideraría la
frecuencia de n-gramas distintos en cada documento.

Este modelo realiza limpieza de los datos, removiendo espacios en blanco, números y stopword. Sin embargo,
las stopwords que trae el modelo están en idioma inglés, por lo tanto, debemos cargar nuestro propio
diccionario. A continuación, aplicaremos este modelo a un corpus con textos en español.

Ejemplo

31
Ejemplo

Esta salida muestra cómo se ha convertido cada documento de texto en vectores. Cada fila representa un
documento de nuestro corpus, y hacemos lo mismo para nuestros dos corpus. El vector se construye utilizando
los documentos del CORPUS ingresado. Extraemos características de él y también utilizamos este vector
construido para extraer características de un documento nuevo. Cada columna de un vector representa las

32
palabras representadas en el nombre de la característica, y el valor es la frecuencia de esa palabra en el
documento representado por el vector.

Consideremos el tercer documento de CORPUS, representado por la segunda fila de la primera tabla. Puede ver
que "Hermoso está el cielo ya que está soleado" tiene el valor 1 para el rasgo cielo, 1 para hermoso, y 1 para
soleado. Los valores 0 se asignan a las palabras que no están presentes en el documento. Observe que, para el
nuevo documento, no hay valores para las palabras amo, día, hoy, mirar, soleado, ve. El motivo es que, para el
proceso de extracción de características, tanto el modelo como el vocabulario siempre se basan en los datos de
entrenamiento y nunca cambiarán o se verán influenciados por los nuevos documentos, que se predecirán más
tarde como parte de las pruebas. La única forma en que esto cambie es reconstruir el modelo incorporando
nuevos textos. Por lo tanto, las características del modelo están limitadas al espacio de vectores de documentos
del corpus de entrenamiento.

TF-IDF

El modelo de bolsa de palabras es bueno, pero los vectores se basan completamente en las frecuencias absolutas
de las palabras, es decir, cada palabra tiene un mismo peso. El problema de lo anterior tiene relación a que las
palabras que aparecen mucho en todos los documentos del corpus tendrán frecuencias más altas y por lo tanto,
eclipsarán a otras palabras que pueden no aparecer con tanta frecuencia pero pueden ser más interesantes y
eficaces como características para identificar categorías específicas para los documentos. Aquí es donde entra
en juego el TF-IDF (Term Frequency-Inverse Document Frequency) que es una combinación de dos métricas:

- La frecuencia de términos
- La frecuencia inversa de los documentos.

Esta técnica se desarrolló originalmente como una métrica para funciones de clasificación para mostrar los
resultados de los motores de búsqueda en función de las consultas de los usuarios y ha pasado de formar parte
de la recuperación de información. a formar parte de la recuperación de información y la extracción de
características de texto.

El TF-IDF es el producto de dos métricas y puede representarse como

𝑡𝑓𝑖𝑑𝑓 = 𝑡𝑓 ∗ 𝑖𝑑𝑓

donde 𝑡𝑓es la frecuencia de términos y 𝑖𝑑𝑓es la frecuencia inversa de documentos. La primera métrica es la
calculada por medio del algoritmo de BOW.

33
La frecuencia de términos en cualquier vector de documentos se denota por el valor de la frecuencia bruta de
ese término en un documento concreto. Matemáticamente puede representarse como 𝑡𝑓(𝑤, 𝐷) = 𝑓𝑤𝐷 , donde
𝑓𝑤𝐷 denota la frecuencia de la palabra 𝑤 en el documento 𝐷, que se convierte en el término 𝑡𝑓.

Existen varias otras representaciones y cálculos para la frecuencia de términos como la conversión de la
frecuencia en una característica binaria en la que 1 significa que el término ha aparecido en el documento y 0
que no. A veces también se puede normalizar la frecuencia absoluta en bruto utilizando logaritmos o
promediando la frecuencia. Aquí usaremos la frecuencia bruta.

La frecuencia inversa del documento 𝑖𝑑𝑓, es la inversa de la frecuencia del documento para cada término. Se
calcula dividiendo el número total de documentos de nuestro corpus por la frecuencia de documentos de cada
término y aplicando una escala logarítmica al resultado. En nuestra aplicación, añadiremos 1 para evitar posibles
errores de división por cero y suavizar las frecuencias inversas de los documentos. También añadimos 1 al
resultado de nuestro cálculo de 𝑖𝑑𝑓, para evitar ignorar por completo los términos que puedan tener un 𝑖𝑑𝑓
cero. Su representación matemática es la siguiente:

𝐶
𝑖𝑑𝑓(𝑡) = 1 + 𝑙𝑜𝑔
1 + 𝑑𝑓(𝑡)

donde 𝑖𝑑𝑓(𝑡) representa el 𝑖𝑑𝑓 para cada término 𝑡, 𝐶 representa la cantidad total de números de documentos
presentes en el corpus, y 𝑑𝑓(𝑡) representa la frecuencia del número de documentos en el cual el termino 𝑡 está
presente.

Por lo tanto, la TF-IDF puede calcularse multiplicando las dos medidas anteriores. La métrica final TF-IDF que
utilizaremos es una versión normalizada de la matriz 𝑡𝑓𝑖𝑑𝑓 que obtenemos del producto de 𝑡𝑓 e 𝑖𝑑𝑓 .
Normalizaremos la matriz 𝑡𝑓𝑖𝑑𝑓 dividiéndola por la norma L2 de la matriz, también conocida como norma
euclidiana, que es la raíz cuadrada de la suma del cuadrado del peso 𝑡𝑓𝑖𝑑𝑓 de cada término. Matemáticamente
podemos representar el vector de características 𝑡𝑓𝑖𝑑𝑓 final como:

𝑡𝑓𝑖𝑑𝑓
𝑡𝑓𝑖𝑑𝑓 =
||𝑡𝑓𝑖𝑑𝑓||

donde ||𝑡𝑓𝑖𝑑𝑓|| representa la norma L2 euclidiana para la matriz 𝑡𝑓𝑖𝑑𝑓.

A continuación, procederemos a implementar 𝑡𝑓𝑖𝑑𝑓, considerando que ya hemos obtenido previamente el


vector de características del método BOW.

34
Ejemplo

Los resultados obtenidos muestran los vectores de características 𝑡𝑓𝑖𝑑𝑓 para todos los documentos de la
muestra.

35
Vectores de palabras

A continuación, revisaremos un modelo de vectores de palabras conocido como Word2VEC.

Word2Vec

Uno de los mayores avances para el uso de representaciones distribuidas con textos fue el desarrollo de los
modelos word2vec por parte de Tomas Mikolov en Google. Estos modelos usan redes neuronales para obtener
las representaciones de cada palabra a una velocidad mayor que otros modelos propuestos con anterioridad.

Estas representaciones se están usando con gran éxito combinadas con redes neuronales para distintas
aplicaciones que trabajan con textos.

Además, Google ha puesto a disposición de quien lo quiera utilizar, modelos preentrenados de word2vec sobre
grandes colecciones de texto (100 mil millones de palabras). La información y el enlace de descarga están en
https://code.google.com/archive/p/word2vec/.

Haciendo uso de estos embeddings podemos hacer pruebas sobre la similitud entre palabras. Podemos ver
cuáles son las palabras más similares a una dada y con qué valor de similitud. Para ello usamos la función

También podemos buscar una palabra que está a la misma distancia que la que hay entre otras dos palabras. Por
ejemplo, queremos encontrar la palabra que está a la misma distancia de mujer que la que hay de rey a hombre.
Podemos interpretarlo como que reina es a mujer lo que rey es a hombre. Para ver más ejemplos puedes visitar
el Google Colad dispuesto por los autores del paquete Word2Vec8.

A continuación, revisaremos un ejemplo.

8
The TensorFlow. (2020). Licensed under the Apache License, Version 2.0 (the "License"). Disponible en:
https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/text/word2vec.ipynb#scrollTo=
m_LmdzqIGr5L
36
Ejemplo

37
1.3. Detección de temas

A continuación, revisaremos un modelo de vectores de palabras conocido como Word2VEC.

WordNet

Este corpus es una base de datos léxica orientada a la semántica para la lengua inglesa. Se creó en la Universidad
de Princeton en 1985 bajo la supervisión de George Armitage. El corpus consta de de palabras y conjuntos de
sinónimos (synsets). Además de esto, consta de definiciones de palabras, relaciones y ejemplos de uso de
palabras y conjuntos de sinónimos.

El corpus WordNet es tal vez uno de los más utilizados, ya que consiste en un vasto corpus de palabras y
conjuntos sintéticos semánticamente vinculados para cada palabra. Algunas de las características presentes en
el corpus WordNet, son los synsets, sinopsis, lemas, hipónimos, hiperónimos, entre otros. A continuación,
mostraremos el funcionamiento de esta librería.

Ejemplo

38
El fragmento de código anterior muestra un ejemplo interesante con la palabra love y sus synsets, que incluyen
sinónimos, así como verbos con distintos significados. WordNet facilita la vinculación semántica de las palabras
con sus sinónimos, así como recuperar fácilmente significados y ejemplos de varias palabras. El ejemplo love
puede significar “una fuerte emoción positiva de agradecimiento y afecto” así como también puede significar
“cualquier objeto de cálido afecto o devoción”.

También, hemos realizado la lematización de uno de los symset a nuestro idioma.

Ejemplo

DBPedia

DBpedia es un esfuerzo de la comunidad de crowdsourcing para extraer contenido estructurado de la


información creada en varios proyectos de Wikimedia. Esta información estructurada se asemeja a un grafo de
conocimiento abierto (OKG) que está disponible para todos en la Web. Un grafo de conocimiento es un tipo
especial de base de datos que almacena el conocimiento en una forma legible por la máquina y proporciona un
medio para recoger, organizar, compartir, buscar y utilizar la información. Google utiliza un enfoque similar para
crear esas fichas de conocimiento durante la búsqueda. Esperamos que este trabajo facilite el uso de la enorme
cantidad de información de los proyectos de Wikimedia de formas nuevas e interesantes.

Los datos de DBpedia se sirven como Linked Data, lo que está revolucionando la forma en que las aplicaciones
interactúan con la Web. Se puede navegar por esta Web de hechos con navegadores web estándar, rastreadores
automatizados o plantear consultas complejas con lenguajes de consulta tipo SQL (por ejemplo, SPARQL). ¿Ha
pensado en preguntar en la web por todas las ciudades con baja criminalidad, clima cálido y puestos de trabajo
abiertos? Ese es el tipo de consulta es la que busca resolver esta comunidad.

El proyecto fue iniciado en 2007 por Sören Auer y Jens Lehmann de la Universidad de Leipzig y Christian Bizer de
la FU de Berlín (ahora Universidad de Mannheim) junto con el apoyo de OpenLink. A lo largo de su historia ha
sido mantenido principalmente por la Universidad de Leipzig, Universidad de Mannheim y OpenLink.

39
Revisaremos el uso de DBPedia por medio de la interfaz dbpedia_spotlight, donde buscaremos algunas frases.

Ejemplo

A continuación, puedes revisar un artículo publicado medium.com9 donde muestran el uso de esta herramienta
de recuperación de datos a través de la interfaz que ofrece DBPedia.

Concept Net

ConceptNet es una red semántica de libre acceso, diseñada para ayudar a los computadores a entender el
significado de las palabras que utilizamos. Su origen tiene relación con el proyecto de colaboración abierta
(crowdsourcing) Open Mind Common Sense lanzado en 1999 por el MIT Media Lab.

9
Heard – Mills, Daniel. (2020). Running Basic SPARQL Queries Against DBpedia. Disponible en:
https://medium.com/virtuoso-blog/dbpedia-basic-queries-bc1ac172cc09
40
ConceptNet se utiliza para crear embeddings de palabras: representaciones de los significados de las palabras
tales como vectores, similares a word2vec, GloVe o fastText, pero mejor.

Estas embedding de palabras son libres, multilingües, alineadas entre idiomas y diseñadas para evitar la
representación de estereotipos perjudiciales. Su rendimiento en cuanto a la similitud de las palabras, dentro y
entre los idiomas, demostró ser el más avanzado en Wokshop Internacional de evaluación semaántica SemEval-
2017.

Para conocer el funcionamiento de esta red semántica te invito a revisar el jupyter notebook de esta sesión.

41
Conclusión
Hemos trabajado en esta unidad distintas etapas del procesamiento de lenguaje natural, pasando por etapas de
pre-procesado de texto, donde hemos aprendido a separar las oraciones presentes en los textos y entender la
diferencia de cada una de estas técnicas. Junto con lo anterior, hemos realizado visualizaciones para conocer que
tokens, tags, lemmas, steams, por mencionar algunos son los que más aparecen dentro de nuestros textos.

Luego continuamos aprendiendo técnicas de detección de términos claves, como es la vectorización del texto y
palabras junto a sus modelos respectivos.

Finamente revisamos la detección de temas por medios de algoritmos más sofisticados, los cuales no todos están
presentes en nuestro idioma. Sin embargo, conocer cómo trabajan estos nos ayuda a comprender y entender la
riqueza que este tipo de procesamiento nos puede ayudar en nuestro desarrollo profesional. Junto con lo
anterior, dejar en cada uno de ustedes el deseo de explorar y aprender más de este mundo del análisis de texto.

42
Bibliografía
Alphabetical list of part-of-speech tags used in the Penn Treebank Project. Disponible en:
https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html

Atkinson – Abutridy, John. (2020). Analítica Textual. John Atkinson – Abutridy (Independently published)

Albrecht, Jens; Ramachandran, Sidharth; Winkler, Christian. (2020). Blueprints for Text Analytics Using Python.
California. EE.UU. O’Reilly Media, Inc.

Appendix 4: List of tags. Disponible en: http://korpus.uib.no/icame/manuals/LOBMAN/LOBAPP4.HTM

Bengfort, Benjamin; Bilbro, Rebecca; Ojeda, Tony. (2018). Applied Text Analysis with Python. California. EE.UU.
O’Reilly Media, Inc.

freeLing 4.2.

Guidelines to wordclass tagging. Disponible en: https://ucrel.lancs.ac.uk/bnc2/bnc2guide.htm#tagset

Pure Storage. (2022). Datos estructurados frente a datos no estructurados. Disponible en:
https://www.purestorage.com/la/knowledge/big-data/structured-vs-unstructured-data.html

Raschka, Sebastián; Mirjalili, Vahid. (2019). Aprendizaje automático con Python. España. MARCOMBO, S.A.

Sarkar, Dipanjan. (2016). Text Analytics with Python. California. EE.UU. Apress Media, LLC.

Wikipedia. (2022). Búsqueda y recuperación de información. Disponible en:


https://es.wikipedia.org/wiki/B%C3%BAsqueda_y_recuperaci%C3%B3n_de_informaci%C3%B3n

Lexical Computing CZ s.r.o. (s.f.). English tagsets. Disponible en: https://www.sketchengine.eu/susanne-corpus-


part-of-speech-tagset/

43
44

También podría gustarte