() translation by (you can also view the original English article)
¿Alguna vez te has preguntado sobre una manera rápida para conocer en qué se centra un documento? ¿Cuál es su tema principal? Déjame darte este simple truco. Enumera las palabras únicas que se mencionan en el documento y luego revisa cuántas veces se ha dicho cada palabra (frecuencia). Esta forma te podría indicar de lo que trata básicamente el documento. Pero eso no funcionaría fácilmente de forma manual, así que necesitamos algún proceso automatizado, ¿no es así?
Sí, un proceso automatizado hará esto mucho más fácil. Veamos cómo podemos listar las diferentes palabras únicas en un archivo de texto y verificar la frecuencia de cada palabra utilizando Python.
Archivo de prueba
En este tutorial, vamos a utilizar test.txt como nuestro archivo de prueba. Adelante, descárgalo, ¡pero no lo abras! Hagamos un pequeño juego. El texto dentro de este archivo de prueba es de uno de mis tutoriales en Envato Tuts+. Basándonos en la frecuencia de las palabras, vamos a adivinar de cuál de mis tutoriales se extrajo este texto.
¡Que comience el juego!
Expresiones regulares
Puesto que vamos a aplicar un patrón en nuestro juego, necesitamos utilizar expresiones regulares (regex). Si «expresiones regulares» es un nuevo término para ti, esta es una buena definición de Wikipedia:
Una secuencia de caracteres que define un patrón de búsqueda, principalmente para su uso en la coincidencia de patrones con cadenas, o en la comparación de cadenas, es decir, operaciones del tipo «encontrar y reemplazar». El concepto apareció en la década de 1950, cuando el matemático estadounidense Stephen Kleene formalizó la descripción de un lenguaje regular, y se utilizó comúnmente con las utilidades de procesamiento de texto de Unix ed, un editor, y grep, un filtro.
Si deseas conocer más sobre las expresiones regulares antes de continuar, puedes ver mi otro tutorial Expresiones regulares en Python, y regresar nuevamente para seguir con este tutorial.
Creando el programa
Vamos a trabajar paso a paso para crear este juego. Lo primero que queremos hacer es almacenar el archivo de texto en una variable de cadena.
1 |
document_text = open('test.txt', 'r') |
2 |
text_string = document_text.read() |
Ahora, para facilitar la aplicación de nuestra expresión regular, vamos a convertir todas las letras de nuestro documento en minúsculas, utilizando la función lower(), del modo siguiente:
1 |
text_string = document_text.read().lower() |
Vamos a escribir nuestra expresión regular que devolvería todas las palabras con el número de caracteres en el rango [3-15]
. Empezar desde 3
ayudará a evitar palabras que tal vez no nos interese contar su frecuencia como it, of, in, etc., y las palabras que tengan una extensión superior a 15
podrían no ser adecuadas. La expresión regular de dicho patrón es la siguiente:
1 |
\b[a-z]{3,15}\b |
\b
está relacionado con el límite de la palabra. Para obtener más información sobre el límite de las palabras, puedes revisar este tutorial.
La expresión regular anterior se puede escribir de la siguiente forma:
1 |
match_pattern = re.search(r'\b[a-z]{3,15}\b', text_string) |
Puesto que queremos revisar múltiples palabras en el documento, podemos utilizar la función findall
:
Devuelve todas las coincidencias no superpuestas de pattern en string, como una lista de cadenas. La cadena (string) es escaneada de izquierda a derecha, y las coincidencias se devuelven en el orden encontrado. Si uno o más grupos están presentes en el patrón, devuelve una lista de grupos; esta será una lista de tuplas si el patrón tiene más de un grupo. Las coincidencias vacías se incluyen en el resultado a menos que toquen el comienzo de otra coincidencia.
En este punto, queremos encontrar la frecuencia de cada palabra en el documento. El concepto adecuado para utilizar aquí es el de los diccionarios de Python, ya que necesitamos pares key-value
, donde key
es la palabra, y value
representa la frecuencia de las palabras que aparecen en el documento.
Asumiendo que hayamos declarado una frecuencia de diccionario vacía (frequency = { }
), el párrafo anterior se vería del modo siguiente:
1 |
for word in match_pattern: |
2 |
count = frequency.get(word,0) |
3 |
frequency[word] = count + 1 |
Ahora podemos ver nuestras claves utilizando:
1 |
frequency_list = frequency.keys() |
Por último, para obtener la palabra y su frecuencia (el número de veces que apareció en el archivo de texto), podemos hacer lo siguiente:
1 |
for words in frequency_list: |
2 |
print words, frequency[words] |
En la siguiente sección, vamos a ensamblar el programa y a ver el resultado.
Poniendo todo junto
Habiendo discutido el programa paso a paso, ahora veamos su aspecto:
1 |
import re |
2 |
import string |
3 |
frequency = {} |
4 |
document_text = open('test.txt', 'r') |
5 |
text_string = document_text.read().lower() |
6 |
match_pattern = re.findall(r'\b[a-z]{3,15}\b', text_string) |
7 |
|
8 |
for word in match_pattern: |
9 |
count = frequency.get(word,0) |
10 |
frequency[word] = count + 1 |
11 |
|
12 |
frequency_list = frequency.keys() |
13 |
|
14 |
for words in frequency_list: |
15 |
print words, frequency[words] |
Si ejecutas el programa, deberías obtener algo similar a lo siguiente:



Regresemos a nuestro juego. Examinando la frecuencia de las palabras, ¿de qué crees que hablaba el archivo de prueba (con contenido de mi otro tutorial de Python)?
(Pista: revisa la palabra con la mayor frecuencia).