{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyN0lnMF4okuysjAyCvteasx"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# Ejercicio práctico de tokenización, normalización, eliminación de ruido, remoción de stopwords, lematización y distribución léxica de frecuencias"],"metadata":{"id":"FS6xv9K1kiDa"}},{"cell_type":"markdown","source":["## Pasos Generales:\n","\n","1. Instala NLTK y recursos punkt y stopwords.\n","2. Texto de ejemplo en español.\n","3. Tokenización: Divide el texto en palabras (tokens).\n","4. Normalización: Convierte a minúsculas y maneja acentos (usando unicodedata para normalizar).\n","5. Eliminación de ruido: Quita puntuación y caracteres especiales.\n","6. Remoción de stopwords: Elimina palabras comunes irrelevantes (como \"el\", \"de\").\n","7. Lematización: Reduce palabras a su forma base (usando SnowballStemmer para español, ya que NLTK no tiene lematizador completo para español; alternativamente, podrías usar spaCy para lematización más avanzada).\n","8. Distribución léxica de frecuencias: Calcula y muestra las frecuencias de palabras usando FreqDist de NLTK, y grafica las más comunes."],"metadata":{"id":"1NcbYvftkyfe"}},{"cell_type":"code","execution_count":null,"metadata":{"id":"oHj2KBDDkb9j"},"outputs":[],"source":["# Paso 0: Instalación de bibliotecas (solo ejecútalo una vez)\n","!pip install nltk\n","\n","# Importamos las bibliotecas necesarias\n","import nltk\n","from nltk.tokenize import word_tokenize\n","from nltk.corpus import stopwords\n","from nltk.stem import SnowballStemmer\n","from nltk.probability import FreqDist\n","import string\n","import unicodedata\n","import matplotlib.pyplot as plt\n","\n","# Descargamos recursos de NLTK para español\n","nltk.download('punkt') # Para tokenización\n","nltk.download('stopwords') # Para stopwords\n","nltk.download('punkt_tab') # Descargar el recurso 'punkt_tab' según el error\n","\n","# Paso 1: Texto de ejemplo (un párrafo en español)\n","texto_original = \"\"\"\n","El procesamiento de lenguaje natural es una rama de la inteligencia artificial.\n","Permite que las máquinas entiendan y generen texto humano natural. Por ejemplo, en aplicaciones\n","como chatbots, traductores y análisis de sentimientos. ¡Es fascinante!\n","\"\"\"\n","print(\"\\nPaso 1: Texto original:\")\n","print(texto_original)\n","\n","# Paso 2: Tokenización (dividir en palabras/tokens)\n","tokens = word_tokenize(texto_original)\n","print(\"\\nPaso 2: Tokens después de tokenización:\")\n","print(tokens)\n","\n","# Paso 3: Normalización (convertir a minúsculas y normalizar acentos)\n","tokens_normalizados = []\n","for token in tokens:\n"," # Convertir a minúsculas\n"," token_lower = token.lower()\n"," # Normalizar acentos (eliminar diacríticos si es necesario, pero aquí los mantenemos)\n"," token_norm = unicodedata.normalize('NFKD', token_lower).encode('ascii', 'ignore').decode('utf-8')\n"," tokens_normalizados.append(token_norm)\n","print(\"\\nPaso 3: Tokens normalizados (minúsculas y sin acentos especiales):\")\n","print(tokens_normalizados)\n","\n","# Paso 4: Eliminación de ruido (quitar puntuación y caracteres no alfabéticos)\n","tokens_sin_ruido = [token for token in tokens_normalizados if token.isalpha()] # Solo letras\n","print(\"\\nPaso 4: Tokens sin ruido (solo palabras alfabéticas):\")\n","print(tokens_sin_ruido)\n","\n","# Paso 5: Remoción de stopwords (palabras comunes irrelevantes)\n","stop_words = set(stopwords.words('spanish')) # Stopwords en español\n","tokens_sin_stopwords = [token for token in tokens_sin_ruido if token not in stop_words]\n","print(\"\\nPaso 5: Tokens sin stopwords:\")\n","print(tokens_sin_stopwords)\n","\n","# Paso 6: Lematización (reducir a forma base usando stemmer para español)\n","stemmer = SnowballStemmer('spanish') # Stemmer en español (aproximación a lematización)\n","tokens_lematizados = [stemmer.stem(token) for token in tokens_sin_stopwords]\n","print(\"\\nPaso 6: Tokens lematizados (forma base):\")\n","print(tokens_lematizados)\n","\n","# Paso 7: Distribución léxica de frecuencias\n","fdist = FreqDist(tokens_lematizados)\n","print(\"\\nPaso 7: Frecuencias de palabras:\")\n","for palabra, frecuencia in fdist.items():\n"," print(f\"{palabra}: {frecuencia}\")\n","\n","# Gráfico de las 10 palabras más frecuentes (para visualización)\n","fdist.plot(10, cumulative=False)\n","plt.show()"]}]}