La palabra como unidad
Partamos de la base de que ya tenemos un corpus documental suficientemente limpio (en este post explicamos el significado de corpus y algunos métodos para limpiarlo). Aunque todavía no hayamos hecho nada con él, tener un corpus documental dividido en documentos, párrafos o frases nos ofrece algunas opciones iniciales para el análisis. Por ejemplo:
- Contar documentos, párrafos o frases
- Calcular la longitud media (en caracteres) de documentos/párrafos/frases
Esto puede parecer demasiado simple, pero da algunas posibilidades para comparar publicaciones o autores. Sin embargo, si queremos sacar máximo partido a las posibilidades analíticas del corpus, aprender de lo que contiene o hacer algún tipo de clasificación, lo mejor es dividir el corpus en su unidad más significativa: la palabra.
Dividir en palabras: «tokenizar»
Siendo estrictos, tokenizar es dividir un texto en elementos más pequeños. Por tanto, lo que hicimos en este post fue tokenizar la escena de la película en frases. Sin embargo, acabamos de decir que la unidad más significativa de cualquier texto es la palabra, y por esa razón es comúnmente aceptado que tokenizar es el proceso que consiste en dividir un corpus en palabras. El resultado de ese proceso es una lista de palabras, o lista de tokens.
A continuación vemos cómo tokenizar en Python las frases de la escena de Cadena Perpetua y su resultado como lista de palabras:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import pandas as pd from nltk.tokenize import RegexpTokenizer raw_text = "Y así fue como en el penúltimo día de trabajo el pelotón de convictos que había alquitranado el tejado del taller la primavera de 1949 terminó sentado a las diez de la mañana, bebiéndose una cerveza pilsener helada por cortesía del mayor cabronazo que jamás haya estado al cuidado de una prisión estatal. Ese maldito capullo incluso logró parecer benévolo. Nos sentamos a beber con el sol a la espalda y nos sentimos como hombres libres. Diablos, fue como si estuviéramos alquitranando el tejado de una de nuestras propias casas. Era como si fuéramos los señores de la creación. En cuanto a Andy, se pasó todo el descanso sentado en la sombra con una extraña sonrisa en su rostro, mirando cómo nos bebíamos nuestra cerveza. Algunos dirán que lo hizo para ganarse el favor de los celadores, o para ganarse amigos entre los presos. Pero yo creo que lo hizo para sentirse normal, aunque fuese sólo por un momento" corpus = raw_text.split('.') trimmed_corpus = [sentence.strip() for sentence in corpus] word_tokenizer = RegexpTokenizer(r'\w+') tokenized_corpus = [word_tokenizer.tokenize(sentence) for sentence in trimmed_corpus] for index, sentence in enumerate(tokenized_corpus): print("Frase {} = {}\n".format(index + 1, sentence)) |
Frase 2 = [‘Ese’, ‘maldito’, ‘capullo’, ‘incluso’, ‘logró’, ‘parecer’, ‘benévolo’]
Frase 3 = [‘Nos’, ‘sentamos’, ‘a’, ‘beber’, ‘con’, ‘el’, ‘sol’, ‘a’, ‘la’, ‘espalda’, ‘y’, ‘nos’, ‘sentimos’, ‘como’, ‘hombres’, ‘libres’]
Frase 4 = [‘Diablos’, ‘fue’, ‘como’, ‘si’, ‘estuviéramos’, ‘alquitranando’, ‘el’, ‘tejado’, ‘de’, ‘una’, ‘de’, ‘nuestras’, ‘propias’, ‘casas’]
Frase 5 = [‘Era’, ‘como’, ‘si’, ‘fuéramos’, ‘los’, ‘señores’, ‘de’, ‘la’, ‘creación’]
Frase 6 = [‘En’, ‘cuanto’, ‘a’, ‘Andy’, ‘se’, ‘pasó’, ‘todo’, ‘el’, ‘descanso’, ‘sentado’, ‘en’, ‘la’, ‘sombra’, ‘con’, ‘una’, ‘extraña’, ‘sonrisa’, ‘en’, ‘su’, ‘rostro’, ‘mirando’, ‘cómo’, ‘nos’, ‘bebíamos’, ‘nuestra’, ‘cerveza’]
Frase 7 = [‘Algunos’, ‘dirán’, ‘que’, ‘lo’, ‘hizo’, ‘para’, ‘ganarse’, ‘el’, ‘favor’, ‘de’, ‘los’, ‘celadores’, ‘o’, ‘para’, ‘ganarse’, ‘amigos’, ‘entre’, ‘los’, ‘presos’]
Frase 8 = [‘Pero’, ‘yo’, ‘creo’, ‘que’, ‘lo’, ‘hizo’, ‘para’, ‘sentirse’, ‘normal’, ‘aunque’, ‘fuese’, ‘sólo’, ‘por’, ‘un’, ‘momento’]
Takeaway
El análisis detallado del corpus require mayor granularidad en las unidades o entidades que se van a analizar. El proceso de dividir el texto en unidades se denomina tokenización, y la más común es la tokenización en palabras.