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:

  1. Comprender qué es la tokenización y su importancia en el análisis de textos históricos

  2. Utilizar la biblioteca NLTK para dividir textos en oraciones y palabras

  3. Aplicar stopwords para filtrar palabras sin contenido semántico

  4. Personalizar listas de stopwords según el contexto histórico

  5. 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

sent_tokenize(), word_tokenize()

Tokens

Unidades resultantes (oraciones, palabras)

-

Stopwords

Palabras sin contenido semántico

stopwords.words('spanish')

Frecuencias

Conteo de palabras

Counter() de collections

¿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