24. Tokenización y Análisis de Texto: Dividiendo el Discurso Histórico#
“El lenguaje es el instrumento más importante de la cooperación humana. Es el medio por el cual transmitimos información sobre el mundo, pero, más importante aún, nos permite transmitir información sobre cosas que no existen en absoluto.”
—Yuval Noah Harari, De animales a dioses (2014)
Información del Capítulo
Tiempo estimado: 90 minutos
Nivel: Intermedio
Prerrequisitos: Capítulo 21 - Funciones con Parámetros, conocimientos básicos de listas y strings
24.1. Objetivos de Aprendizaje#
Al finalizar este capítulo, serás capaz de:
Comprender qué es la tokenización y su importancia en el análisis de textos históricos
Utilizar la biblioteca NLTK para dividir textos en oraciones y palabras
Aplicar stopwords para filtrar palabras sin contenido semántico
Personalizar listas de stopwords según el contexto histórico
Analizar discursos históricos chilenos usando técnicas de procesamiento de lenguaje natural
24.2. Introducción: El Procesamiento del Lenguaje Natural en la Historia#
El Procesamiento del Lenguaje Natural (NLP, por sus siglas en inglés) es una rama de la inteligencia artificial que permite a las computadoras entender, interpretar y manipular el lenguaje humano. Para los historiadores, esta tecnología abre posibilidades extraordinarias:
Analizar miles de documentos históricos en minutos
Detectar patrones en discursos políticos a través del tiempo
Comparar estilos de escritura de diferentes épocas
Identificar temas recurrentes en archivos históricos
Nuestro documento de estudio
En este capítulo trabajaremos con el Discurso Inaugural de Andrés Bello (1843), pronunciado en la instalación de la Universidad de Chile. Este documento es fundamental para entender la visión educativa y cultural del Chile republicano del siglo XIX.
24.2.1. Contexto Histórico: Andrés Bello y la Universidad de Chile#
Andrés Bello (1781-1865) fue un humanista venezolano-chileno, considerado uno de los intelectuales más importantes de América Latina. El 17 de septiembre de 1843, pronunció el discurso inaugural de la Universidad de Chile, institución de la cual fue su primer rector.
En su discurso, Bello defiende la importancia de las ciencias y las letras para el progreso de la nación, establece la misión de la universidad y reflexiona sobre el papel del conocimiento en la sociedad [Bello, 1843].
24.3. Preparación del Entorno: Instalando NLTK#
NLTK (Natural Language Toolkit) es la biblioteca más utilizada para procesamiento de lenguaje natural en Python. Contiene herramientas para tokenización, análisis gramatical, clasificación de textos y mucho más [Bird et al., 2009].
# Instalación de NLTK (ejecutar solo si no está instalado)
# !pip install nltk
# Importamos NLTK y descargamos los recursos necesarios
import nltk
# Descargamos los tokenizadores y stopwords
nltk.download('punkt') # Para tokenización
nltk.download('punkt_tab') # Recurso adicional de tokenización
nltk.download('stopwords') # Lista de palabras vacías
[nltk_data] Downloading package punkt to
[nltk_data] /Users/claudiorojas/nltk_data...
[nltk_data] Package punkt is already up-to-date!
[nltk_data] Downloading package punkt_tab to
[nltk_data] /Users/claudiorojas/nltk_data...
[nltk_data] Package punkt_tab is already up-to-date!
[nltk_data] Downloading package stopwords to
[nltk_data] /Users/claudiorojas/nltk_data...
[nltk_data] Unzipping corpora/stopwords.zip.
True
24.4. ¿Qué es la Tokenización?#
La tokenización es el proceso de dividir un texto en unidades más pequeñas llamadas tokens. Estos tokens pueden ser:
Oraciones: Dividir un párrafo en oraciones individuales
Palabras: Dividir una oración en palabras individuales
Caracteres: Dividir una palabra en letras individuales
Analogía histórica
Piensa en la tokenización como el trabajo de un paleógrafo que debe descifrar un manuscrito antiguo. Primero identifica los párrafos, luego las oraciones, y finalmente cada palabra. Solo así puede comprender el texto completo.
24.4.1. Tokenización en Oraciones: sent_tokenize()#
La función sent_tokenize() divide un texto en oraciones, reconociendo los puntos, signos de interrogación y exclamación como delimitadores.
from nltk.tokenize import sent_tokenize
# Fragmento del discurso de Andrés Bello
texto_bello = """
La Universidad, señores, no sería digna de ocupar un lugar en nuestras instituciones
sociales, si el cultivo de las ciencias y de las letras pudiese mirarse como peligroso
bajo un punto de vista moral, o bajo un punto de vista político. La moral es la vida
misma de la sociedad; la libertad es el estímulo que da un vigor sano y una actividad
fecunda a las instituciones sociales. ¿A qué se debe este progreso de civilización,
esta ansia de mejoras sociales, esta sed de libertad?
"""
# Tokenizamos en oraciones
oraciones = sent_tokenize(texto_bello, language='spanish')
print("="*60)
print("ORACIONES ENCONTRADAS EN EL TEXTO DE ANDRÉS BELLO")
print("="*60)
for i, oracion in enumerate(oraciones, 1):
print(f"\nOración {i}:")
print(oracion.strip())
============================================================
ORACIONES ENCONTRADAS EN EL TEXTO DE ANDRÉS BELLO
============================================================
Oración 1:
La Universidad, señores, no sería digna de ocupar un lugar en nuestras instituciones
sociales, si el cultivo de las ciencias y de las letras pudiese mirarse como peligroso
bajo un punto de vista moral, o bajo un punto de vista político.
Oración 2:
La moral es la vida
misma de la sociedad; la libertad es el estímulo que da un vigor sano y una actividad
fecunda a las instituciones sociales.
Oración 3:
¿A qué se debe este progreso de civilización,
esta ansia de mejoras sociales, esta sed de libertad?
24.4.2. Tokenización en Palabras: word_tokenize()#
La función word_tokenize() divide un texto en palabras individuales. También separa los signos de puntuación como tokens independientes.
from nltk.tokenize import word_tokenize
# Tomamos la primera oración del discurso
primera_oracion = oraciones[0].strip()
# Tokenizamos en palabras
palabras = word_tokenize(primera_oracion, language='spanish')
print("Oración original:")
print(primera_oracion)
print("\nPalabras tokenizadas:")
print(palabras)
print(f"\nTotal de tokens: {len(palabras)}")
Oración original:
La Universidad, señores, no sería digna de ocupar un lugar en nuestras instituciones
sociales, si el cultivo de las ciencias y de las letras pudiese mirarse como peligroso
bajo un punto de vista moral, o bajo un punto de vista político.
Palabras tokenizadas:
['La', 'Universidad', ',', 'señores', ',', 'no', 'sería', 'digna', 'de', 'ocupar', 'un', 'lugar', 'en', 'nuestras', 'instituciones', 'sociales', ',', 'si', 'el', 'cultivo', 'de', 'las', 'ciencias', 'y', 'de', 'las', 'letras', 'pudiese', 'mirarse', 'como', 'peligroso', 'bajo', 'un', 'punto', 'de', 'vista', 'moral', ',', 'o', 'bajo', 'un', 'punto', 'de', 'vista', 'político', '.']
Total de tokens: 46
24.5. Analizando el Discurso Completo de Andrés Bello#
Ahora trabajaremos con un fragmento más extenso del discurso inaugural para realizar un análisis más profundo.
# Fragmento extenso del Discurso Inaugural de Andrés Bello (1843)
discurso_bello = """
La Universidad, señores, no sería digna de ocupar un lugar en nuestras instituciones
sociales, si el cultivo de las ciencias y de las letras pudiese mirarse como peligroso
bajo un punto de vista moral, o bajo un punto de vista político. La moral es la vida
misma de la sociedad; la libertad es el estímulo que da un vigor sano y una actividad
fecunda a las instituciones sociales.
Lo sabéis, señores: todas las verdades se tocan, desde las que formulan el rumbo de
los mundos en el piélago del espacio; desde las que determinan las agencias maravillosas
de que dependen el movimiento y la vida en el universo de la materia; desde las que
resumen la estructura del animal, de la planta, de la masa inorgánica que pisamos;
desde las que revelan los fenómenos íntimos del alma en el teatro misterioso de la
conciencia, hasta las que expresan las acciones y reacciones de las fuerzas políticas.
Las ciencias y las letras, fuera de ese valor social, fuera de esta importancia que
podemos llamar instrumental, fuera del barniz de amenidad y elegancia que dan a las
sociedades humanas, tienen un mérito suyo, intrínseco, en cuanto aumentan los placeres
y goces del individuo que las cultiva y las ama; placeres exquisitos, a que no llega
el delirio de los sentidos.
El fomento de las ciencias eclesiásticas, destinado a formar dignos ministros del
culto, y en último resultado a proveer a los pueblos de la república de la competente
educación religiosa y moral, es el primero de estos objetos y el de mayor trascendencia.
La Universidad estudiará también las especialidades de la sociedad chilena bajo el
punto de vista económico. La Universidad examinará los resultados de la estadística
chilena, contribuirá a formarla, y leerá en sus guarismos la expresión de nuestros
intereses materiales. Porque en este, como en los otros ramos, el programa de la
Universidad es enteramente chileno: si toma prestadas a la Europa las deducciones
de la ciencia, es para aplicarlas a Chile. Todas las sendas en que se propone dirigir
las investigaciones de sus miembros, el estudio de sus alumnos, convergen a un centro:
la patria.
"""
print(f"Longitud del texto: {len(discurso_bello)} caracteres")
Longitud del texto: 2140 caracteres
# Análisis básico del discurso
oraciones_discurso = sent_tokenize(discurso_bello, language='spanish')
palabras_discurso = word_tokenize(discurso_bello, language='spanish')
print("="*60)
print("ANÁLISIS DEL DISCURSO DE ANDRÉS BELLO (1843)")
print("="*60)
print(f"\nNúmero de oraciones: {len(oraciones_discurso)}")
print(f"Número de tokens (palabras + puntuación): {len(palabras_discurso)}")
# Solo palabras (sin puntuación)
solo_palabras = [p for p in palabras_discurso if p.isalpha()]
print(f"Número de palabras (sin puntuación): {len(solo_palabras)}")
# Promedio de palabras por oración
promedio = len(solo_palabras) / len(oraciones_discurso)
print(f"Promedio de palabras por oración: {promedio:.1f}")
============================================================
ANÁLISIS DEL DISCURSO DE ANDRÉS BELLO (1843)
============================================================
Número de oraciones: 9
Número de tokens (palabras + puntuación): 399
Número de palabras (sin puntuación): 356
Promedio de palabras por oración: 39.6
24.6. Stopwords: Filtrando el Ruido del Texto#
Las stopwords (palabras vacías) son palabras muy frecuentes que generalmente no aportan significado al análisis del texto. Incluyen artículos, preposiciones, pronombres y conjunciones.
¿Por qué eliminar stopwords?
En un discurso histórico, palabras como “el”, “la”, “de”, “que” aparecen constantemente pero no nos dicen nada sobre el contenido del discurso. Al eliminarlas, podemos enfocarnos en las palabras que realmente transmiten el mensaje del autor.
from nltk.corpus import stopwords
# Obtenemos las stopwords en español
stop_words_es = set(stopwords.words('spanish'))
print(f"NLTK incluye {len(stop_words_es)} stopwords en español")
print("\nEjemplos de stopwords:")
print(list(stop_words_es)[:20])
NLTK incluye 313 stopwords en español
Ejemplos de stopwords:
['hubiesen', 'estaremos', 'estuvisteis', 'estuvieses', 'estos', 'no', 'son', 'ti', 'vuestros', 'ante', 'e', 'tendrás', 'fuerais', 'fuesen', 'sean', 'habían', 'nos', 'seas', 'seríamos', 'fuisteis']
# Filtramos las stopwords del discurso de Bello
palabras_filtradas = []
for palabra in solo_palabras:
if palabra.lower() not in stop_words_es:
palabras_filtradas.append(palabra.lower())
print("="*60)
print("COMPARACIÓN: CON Y SIN STOPWORDS")
print("="*60)
print(f"\nPalabras originales: {len(solo_palabras)}")
print(f"Palabras sin stopwords: {len(palabras_filtradas)}")
print(f"Stopwords eliminadas: {len(solo_palabras) - len(palabras_filtradas)}")
print(f"Porcentaje de reducción: {((len(solo_palabras) - len(palabras_filtradas)) / len(solo_palabras) * 100):.1f}%")
============================================================
COMPARACIÓN: CON Y SIN STOPWORDS
============================================================
Palabras originales: 356
Palabras sin stopwords: 165
Stopwords eliminadas: 191
Porcentaje de reducción: 53.7%
# Encontramos las palabras más frecuentes (sin stopwords)
from collections import Counter
frecuencias = Counter(palabras_filtradas)
palabras_mas_comunes = frecuencias.most_common(15)
print("="*60)
print("PALABRAS MÁS FRECUENTES EN EL DISCURSO DE BELLO")
print("(Sin stopwords)")
print("="*60)
for palabra, frecuencia in palabras_mas_comunes:
print(f" {palabra.ljust(20)} → {frecuencia} veces")
============================================================
PALABRAS MÁS FRECUENTES EN EL DISCURSO DE BELLO
(Sin stopwords)
============================================================
universidad → 4 veces
ciencias → 3 veces
bajo → 3 veces
punto → 3 veces
vista → 3 veces
moral → 3 veces
señores → 2 veces
instituciones → 2 veces
sociales → 2 veces
si → 2 veces
letras → 2 veces
vida → 2 veces
sociedad → 2 veces
todas → 2 veces
placeres → 2 veces
Interpretación histórica
Las palabras más frecuentes revelan los temas centrales del discurso de Bello:
“universidad”: El tema principal del discurso
“ciencias”, “letras”: La importancia del conocimiento
“sociedad”, “moral”: La función social de la educación
“Chile”, “patria”: El enfoque nacional de la institución
Este análisis cuantitativo confirma lo que sabemos cualitativamente: Bello concebía la Universidad como una institución al servicio de Chile y su desarrollo moral y científico.
24.7. Personalizando las Stopwords#
En muchos casos, necesitamos agregar stopwords específicas al contexto de nuestro análisis. Por ejemplo, en discursos del siglo XIX, hay palabras formales que se repiten mucho pero no aportan al análisis temático.
# Creamos una lista personalizada de stopwords para discursos históricos
stopwords_historicas = {
'señores', # Forma de tratamiento común en discursos
'bajo', # Preposición frecuente
'así', # Adverbio común
'puede', # Verbo auxiliar
'mismo', # Adjetivo común
'misma',
'todo', # Determinante
'toda',
'todos',
'todas',
'cada',
'sino',
'aun',
'aunque'
}
# Combinamos con las stopwords estándar
stopwords_completas = stop_words_es.union(stopwords_historicas)
print(f"Total de stopwords (estándar + históricas): {len(stopwords_completas)}")
Total de stopwords (estándar + históricas): 325
# Filtramos con las stopwords personalizadas
palabras_filtradas_v2 = []
for palabra in solo_palabras:
if palabra.lower() not in stopwords_completas:
palabras_filtradas_v2.append(palabra.lower())
# Nuevas frecuencias
frecuencias_v2 = Counter(palabras_filtradas_v2)
palabras_comunes_v2 = frecuencias_v2.most_common(15)
print("="*60)
print("PALABRAS MÁS FRECUENTES (CON STOPWORDS PERSONALIZADAS)")
print("="*60)
for palabra, frecuencia in palabras_comunes_v2:
print(f" {palabra.ljust(20)} → {frecuencia} veces")
============================================================
PALABRAS MÁS FRECUENTES (CON STOPWORDS PERSONALIZADAS)
============================================================
universidad → 4 veces
ciencias → 3 veces
punto → 3 veces
vista → 3 veces
moral → 3 veces
instituciones → 2 veces
sociales → 2 veces
si → 2 veces
letras → 2 veces
vida → 2 veces
sociedad → 2 veces
placeres → 2 veces
chilena → 2 veces
digna → 1 veces
ocupar → 1 veces
24.8. Creando una Función de Análisis Reutilizable#
Para facilitar el análisis de otros documentos históricos, crearemos una función que encapsule todo el proceso.
def analizar_texto_historico(texto, titulo="Documento", n_palabras=15, stopwords_extra=None):
"""
Analiza un texto histórico y muestra estadísticas relevantes.
Parámetros:
-----------
texto : str
El texto a analizar
titulo : str
Nombre del documento para mostrar en el reporte
n_palabras : int
Número de palabras frecuentes a mostrar
stopwords_extra : set
Stopwords adicionales específicas del contexto
Retorna:
--------
dict : Diccionario con las estadísticas del análisis
"""
# Preparamos stopwords
sw = set(stopwords.words('spanish'))
if stopwords_extra:
sw = sw.union(stopwords_extra)
# Tokenización
oraciones = sent_tokenize(texto, language='spanish')
palabras = word_tokenize(texto, language='spanish')
solo_palabras = [p for p in palabras if p.isalpha()]
# Filtrado de stopwords
palabras_filtradas = [p.lower() for p in solo_palabras if p.lower() not in sw]
# Frecuencias
frecuencias = Counter(palabras_filtradas)
# Mostramos el reporte
print("\n" + "="*60)
print(f"ANÁLISIS DE TEXTO: {titulo.upper()}")
print("="*60)
print(f"\n📊 Estadísticas generales:")
print(f" • Caracteres totales: {len(texto):,}")
print(f" • Oraciones: {len(oraciones)}")
print(f" • Palabras totales: {len(solo_palabras)}")
print(f" • Palabras únicas: {len(set([p.lower() for p in solo_palabras]))}")
print(f" • Palabras sin stopwords: {len(palabras_filtradas)}")
print(f" • Promedio palabras/oración: {len(solo_palabras)/len(oraciones):.1f}")
print(f"\n📝 Top {n_palabras} palabras más frecuentes:")
for palabra, freq in frecuencias.most_common(n_palabras):
barra = "█" * min(freq * 2, 20)
print(f" {palabra.ljust(15)} {barra} ({freq})")
# Retornamos los datos para uso posterior
return {
'oraciones': len(oraciones),
'palabras_totales': len(solo_palabras),
'palabras_unicas': len(set([p.lower() for p in solo_palabras])),
'palabras_filtradas': palabras_filtradas,
'frecuencias': frecuencias
}
# Usamos la función con el discurso de Bello
stopwords_extra = {'señores', 'bajo', 'así', 'puede', 'mismo', 'misma'}
resultado = analizar_texto_historico(
texto=discurso_bello,
titulo="Discurso Inaugural de Andrés Bello (1843)",
n_palabras=12,
stopwords_extra=stopwords_extra
)
============================================================
ANÁLISIS DE TEXTO: DISCURSO INAUGURAL DE ANDRÉS BELLO (1843)
============================================================
📊 Estadísticas generales:
• Caracteres totales: 2,140
• Oraciones: 9
• Palabras totales: 356
• Palabras únicas: 178
• Palabras sin stopwords: 159
• Promedio palabras/oración: 39.6
📝 Top 12 palabras más frecuentes:
universidad ████████ (4)
ciencias ██████ (3)
punto ██████ (3)
vista ██████ (3)
moral ██████ (3)
instituciones ████ (2)
sociales ████ (2)
si ████ (2)
letras ████ (2)
vida ████ (2)
sociedad ████ (2)
todas ████ (2)
24.9. Búsqueda de Frases y Contexto#
Una tarea común en el análisis de textos históricos es buscar frases específicas y mostrar su contexto.
def buscar_frase_contexto(texto, frase, contexto=100):
"""
Busca una frase en el texto y muestra su contexto.
Parámetros:
-----------
texto : str
El texto donde buscar
frase : str
La frase a buscar
contexto : int
Número de caracteres de contexto a mostrar
"""
texto_lower = texto.lower()
frase_lower = frase.lower()
# Contamos ocurrencias
ocurrencias = texto_lower.count(frase_lower)
print(f"\n🔍 Buscando: '{frase}'")
print(f" Ocurrencias encontradas: {ocurrencias}")
if ocurrencias > 0:
# Mostramos el contexto de cada ocurrencia
pos = 0
for i in range(ocurrencias):
pos = texto_lower.find(frase_lower, pos)
inicio = max(0, pos - contexto)
fin = min(len(texto), pos + len(frase) + contexto)
fragmento = texto[inicio:fin].replace('\n', ' ').strip()
print(f"\n Ocurrencia {i+1}:")
print(f" ...{fragmento}...")
pos += 1
return ocurrencias
# Buscamos frases relevantes en el discurso de Bello
buscar_frase_contexto(discurso_bello, "Universidad")
buscar_frase_contexto(discurso_bello, "ciencias")
buscar_frase_contexto(discurso_bello, "Chile")
🔍 Buscando: 'Universidad'
Ocurrencias encontradas: 4
Ocurrencia 1:
...La Universidad, señores, no sería digna de ocupar un lugar en nuestras instituciones sociales, si el cultivo de l...
Ocurrencia 2:
...tente educación religiosa y moral, es el primero de estos objetos y el de mayor trascendencia. La Universidad estudiará también las especialidades de la sociedad chilena bajo el punto de vista económico. La U...
Ocurrencia 3:
...d estudiará también las especialidades de la sociedad chilena bajo el punto de vista económico. La Universidad examinará los resultados de la estadística chilena, contribuirá a formarla, y leerá en sus guarism...
Ocurrencia 4:
...sión de nuestros intereses materiales. Porque en este, como en los otros ramos, el programa de la Universidad es enteramente chileno: si toma prestadas a la Europa las deducciones de la ciencia, es para aplic...
🔍 Buscando: 'ciencias'
Ocurrencias encontradas: 3
Ocurrencia 1:
...eñores, no sería digna de ocupar un lugar en nuestras instituciones sociales, si el cultivo de las ciencias y de las letras pudiese mirarse como peligroso bajo un punto de vista moral, o bajo un punto de vi...
Ocurrencia 2:
...de la conciencia, hasta las que expresan las acciones y reacciones de las fuerzas políticas. Las ciencias y las letras, fuera de ese valor social, fuera de esta importancia que podemos llamar instrumental...
Ocurrencia 3:
...tiva y las ama; placeres exquisitos, a que no llega el delirio de los sentidos. El fomento de las ciencias eclesiásticas, destinado a formar dignos ministros del culto, y en último resultado a proveer a lo...
🔍 Buscando: 'Chile'
Ocurrencias encontradas: 4
Ocurrencia 1:
...os y el de mayor trascendencia. La Universidad estudiará también las especialidades de la sociedad chilena bajo el punto de vista económico. La Universidad examinará los resultados de la estadística chi...
Ocurrencia 2:
...ilena bajo el punto de vista económico. La Universidad examinará los resultados de la estadística chilena, contribuirá a formarla, y leerá en sus guarismos la expresión de nuestros intereses materiales....
Ocurrencia 3:
...materiales. Porque en este, como en los otros ramos, el programa de la Universidad es enteramente chileno: si toma prestadas a la Europa las deducciones de la ciencia, es para aplicarlas a Chile. Todas...
Ocurrencia 4:
...ramente chileno: si toma prestadas a la Europa las deducciones de la ciencia, es para aplicarlas a Chile. Todas las sendas en que se propone dirigir las investigaciones de sus miembros, el estudio de sus...
4
24.10. Actividad de Cierre#
Instrucciones
Realiza los siguientes ejercicios para practicar lo aprendido sobre tokenización y stopwords.
24.10.1. Ejercicio 1: Analiza otro fragmento#
Copia el siguiente fragmento del discurso de Bello y analízalo con la función analizar_texto_historico():
“Yo no abogaré jamás por el purismo exagerado que condena todo lo nuevo en materia de idioma; creo, por el contrario, que la multitud de ideas nuevas, que pasan diariamente del comercio literario a la circulación general, exige voces nuevas que las representen.”
# Escribe tu código aquí
24.10.2. Ejercicio 2: Compara idiomas#
Tokeniza el siguiente texto en inglés y compáralo con su traducción al español. ¿Cuál tiene más tokens?
texto_ingles = "The University shall be a beacon of knowledge and progress for the nation."
texto_espanol = "La Universidad será un faro de conocimiento y progreso para la nación."
# Escribe tu código aquí
24.10.3. Ejercicio 3: Stopwords personalizadas#
Crea tu propia lista de stopwords para analizar discursos políticos chilenos del siglo XX. Considera palabras formales como “honorable”, “distinguido”, “compatriotas”, etc.
# Escribe tu código aquí
24.11. Resumen del Capítulo#
Concepto |
Descripción |
Función NLTK |
|---|---|---|
Tokenización |
Dividir texto en unidades menores |
|
Tokens |
Unidades resultantes (oraciones, palabras) |
- |
Stopwords |
Palabras sin contenido semántico |
|
Frecuencias |
Conteo de palabras |
|
¿Qué sigue?
En el siguiente capítulo aprenderemos a leer y analizar documentos PDF directamente desde Python, aplicando estas técnicas de tokenización a discursos históricos completos como el discurso inaugural de Ronald Reagan (1981).
24.12. Referencias#
Bello, A. (1843). Discurso pronunciado en la instalación de la Universidad de Chile. Santiago de Chile.
Bird, S., Klein, E., & Loper, E. (2009). Natural Language Processing with Python. O’Reilly Media.
Harari, Y. N. (2014). De animales a dioses: Breve historia de la humanidad. Debate.
NLTK Project. (2024). Natural Language Toolkit Documentation. https://www.nltk.org/
Universidad de Chile. (2024). Discurso Inaugural de Andrés Bello. https://uchile.cl/presentacion/historia/discurso-inaugural