<jupyter_start><jupyter_text>Vamos a cargar un texto para los ejercicios de stemming. Podemos encontrar el texto en la liga: 'https://raw.githubusercontent.com/apimentelaUP/recursos/master/M%C3%A9xico_texto.txt<jupyter_code>import requests

url = 'https://raw.githubusercontent.com/apimentelaUP/recursos/master/M%C3%A9xico_texto.txt'
page = requests.get(url)
texto = page.text<jupyter_output><empty_output><jupyter_text>Recordemos para hacer stemming, primero tenemos que tokenizar, asi que vamos a repetir los pasos de la tokenización.<jupyter_code>import nltk

nltk.download("punkt")

tokens = nltk.word_tokenize(texto,"spanish")<jupyter_output>[nltk_data] Downloading package punkt to /root/nltk_data...
[nltk_data]   Unzipping tokenizers/punkt.zip.<jupyter_text>Si lo hacen de forma local, no necesitan descargar "punkt" otra vez, pero en la nube si lo necesitamos, si ya sabemos bien qué paquete necesitamos, podemos simplemente pasarlo como parámetro. Ahora podemos pasar por completo al stemming. NLTK también inclye herramientas para esto, dentro del módulo de `stem`.Aquí vamos a usar el stemmer de Snowball, el mismo del que vimos las reglas en la presentación.<jupyter_code>stemmer = nltk.stem.SnowballStemmer("spanish")<jupyter_output><empty_output><jupyter_text>El `stemmer` es capaz de aplicar las reglas a una palabra que reciba como parámetro.<jupyter_code>print(stemmer.stem("palabra"))<jupyter_output>palabr<jupyter_text>Para hacer el stemming sobre todas las palabras simplemente tenemos que hacer un recorrido sobre nuestros tokens.<jupyter_code>stemms = [stemmer.stem(i) for i in tokens]<jupyter_output><empty_output><jupyter_text>Veamos ahora la reducción que se pudo conseguir con este método de normalización.<jupyter_code>print(len(set(tokens)))
print(len(set(stemms)))<jupyter_output>7256
4542
{'cab', 'arrecif', 'calv', 'garr', '80', 'salari', 'nacimient', 'depresion', 'cultur', 'constru', 'alent', 'energet', 'adher', 'artur', 'propi', 'caracteriz', 'tecnolog', '166', 'negat', 'huelg', 'melod', 'gentilici', 'haci', 'duranguens', 'grijalv', 'elen', 'mariachi', 'rompop', 'conscient', 'sol', 'boom', '–constitu', 'boogalo', 'junt', 'zentl', 'conduccion', 'llan', 'parr', 'bon', 'particip', '1836', 'franci', 'alemani', 'desemboc', 'da', 'organiz', 'caudal', 'ppa', 'quintin', 'sevill', 'masiv', 'en', 'diet', 'inalter', 'violin', 'estos', 'model', '826', 'cobij', 'arab', 'poch', 'productor', 'descubr', 'coloniz', 'condiment', '292', 'anteced', 'tare', 'sabin', 'fragil', 'salvaj', 'f.', 'vest', 'oblig', 'cualid', 'sedesol', '1525', 'san', 'amenaz', 'bolivi', 'panoram', 'pop-rock', 'caminat', 'patrimoni', 'bicefal', 'reorganiz', 'etnic', 'carrill', 'cha-cha-ch', 'genesis', '1.8', 'manifiest', 'dispon', 'tlaxcal', 'guaguanc', 'adecu', 'ryder', 'correspondient', 'metalist', 'c[...]
{'fraction_non_alphanumeric': 0.16625222024866784, 'fraction_numerical': 0.01172291296625222, 'mean_word_length': 7.507552870090635, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 22, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '572402', 'license': 'MIT', 'n_tokens_mistral': 1123, 'n_tokens_neox': 1076, 'n_words': 269, 'path': 'Materias/ProcesamientoLenguaje/Clases/S03_007_Stemming.ipynb', 'repo_name': 'jorgeo80/UP_MDC', 'size': '2815'}