Contar palabras con Python 3

Vamos a contar las palabras de un fichero de texto.

Para ello tenemos el fichero de texto “citas.txt” que contiene el siguiente texto:

No hay que ir para atrás ni para darse impulso.

Es sencillo hacer que las cosas sean complicadas, pero difícil hacer que sean sencillas.

Haz el amor y no la guerra.

Cada día sabemos más y entendemos menos.

Conocer a otros es inteligencia, conocerse a sí mismo es sabiduría. Manejar a otros es fuerza, manejarse a sí mismo es verdadero poder.

Ningún hombre es lo bastante bueno para gobernar a otros sin su consentimiento.

El camino más noble no es someter a los demás, sino perfeccionarse a uno mismo.

El orgullo divide a los hombres, la humildad los une.

El más rico es quien se contenta con poco.

Lo primero que vamos a hacer es abrir el fichero e ir leyendo línea por línea para ir procesando su contenido. Para esto vamos a hacer uso de open() de la siguiente forma:

with open('/citas.txt','r') as fichero:
    for linea in fichero:
            # aquí va nuestro código para contar

Como podemos encontrar símbolos unidos a las palabras, tenemos que crear una lista con estos y eliminarlos para que no causen problemas al contar.

simbolos = ['¿','?','.','.',';',':','¡','!']

Podremos usar el método replace() del objeto string para cada uno de los símbolos de la lista en cada línea que leamos. A este método le vamos a pasar dos parámetros, el símbolo a buscar y el caracter que lo reemplazará. Para ello usaremos un bucle for in de la siguiente forma:

simbolos = ['¿','?','.','.',';',':','¡','!']
with open('/citas.txt','r') as fichero:
    for linea in fichero:
            for simbolo in simbolos:
                    linea = linea.replace(simbolo,' ')

Luego separaremos las palabras usando el método split() pasándole el caracter por el que queramos dividir o no poniéndolo si queremos que sea el espacio.

palabras = linea.split()

Así obtenemos una lista de palabras por cada línea que podemos contar incrementando el valor de una variable, por ejemplo:

numpalabras += 1

Quedando el código final de la siguiente forma:

simbolos = ['¿','?','.','.',';',':','¡','!']
numpalabras = 0
with open('./citas.txt','r') as fichero:
    for linea in fichero:
        for simbolo in simbolos:
            linea = linea.replace(simbolo,' ')
        palabras = linea.split()
        for palabra in palabras:
            numpalabras += 1
print('El texto contiene %s palabras' %numpalabras)

Si además queremos saber cuantas veces se han repetido cada una de las palabras podemos crear un diccionario donde almacenar la palabra como clave y las repeticiones como valor. Para esto tenemos que modificar un poco el código anterior añadiendo el diccionario:

dpalabras = dict()

Y creando los elementos del diccionario con cada una de las palabras e incrementando el valor cada vez que cada una de ellas se repita. Para evitar comprobar si el elemento ya existe en el diccionario usaremos el método get() que permite indicar un valor por defecto si el elemento no existiera. Así, cuando encontremos una palabra, si la clave no existe tomará el valor de 0 + 1 y si existe el valor existente + 1.

dpalabras[palabra] = dpalabras.get(palabra , 0) + 1

Con este arreglo nuestro código quedaría de la siguiente forma:

simbolos = ['¿','?','.','.',';',':','¡','!']
numpalabras = 0
dpalabras = dict()
with open('./citas.txt','r') as fichero:
    for linea in fichero:
        for simbolo in simbolos:
            linea = linea.replace(simbolo,' ')
        palabras = linea.split()
        for palabra in palabras:
            numpalabras += 1
            dpalabras[palabra] = dpalabras.get(palabra , 0) + 1
print('El texto contiene %s palabras' %numpalabras)
print('Las palabras se han repetido de la siguiente forma:')
for palabra in dpalabras:
    veces = 'veces'
    if dpalabras[palabra] == 1:
        veces = 'vez'
    print('La palabra "%s" se ha repetido %s %s' %(palabra, dpalabras[palabra], veces))

Y el resultado obtenido sería el siguiente:

El texto contiene 108 palabras
Las palabras se han repetido de la siguiente forma:
La palabra "No" se ha repetido 1 vez
La palabra "hay" se ha repetido 1 vez
La palabra "que" se ha repetido 3 veces
La palabra "ir" se ha repetido 1 vez
La palabra "para" se ha repetido 3 veces
La palabra "atrás" se ha repetido 1 vez
La palabra "ni" se ha repetido 1 vez
La palabra "darse" se ha repetido 1 vez
La palabra "impulso" se ha repetido 1 vez
La palabra "Es" se ha repetido 1 vez
La palabra "sencillo" se ha repetido 1 vez
La palabra "hacer" se ha repetido 2 veces
La palabra "las" se ha repetido 1 vez
La palabra "cosas" se ha repetido 1 vez
La palabra "sean" se ha repetido 2 veces
La palabra "complicadas," se ha repetido 1 vez
La palabra "pero" se ha repetido 1 vez
La palabra "difícil" se ha repetido 1 vez
La palabra "sencillas" se ha repetido 1 vez
La palabra "Haz" se ha repetido 1 vez
La palabra "el" se ha repetido 1 vez
La palabra "amor" se ha repetido 1 vez
La palabra "y" se ha repetido 2 veces
La palabra "no" se ha repetido 2 veces
La palabra "la" se ha repetido 2 veces
La palabra "guerra" se ha repetido 1 vez
La palabra "Cada" se ha repetido 1 vez
La palabra "día" se ha repetido 1 vez
La palabra "sabemos" se ha repetido 1 vez
La palabra "más" se ha repetido 3 veces
La palabra "entendemos" se ha repetido 1 vez
La palabra "menos" se ha repetido 1 vez
La palabra "Conocer" se ha repetido 1 vez
La palabra "a" se ha repetido 8 veces
La palabra "otros" se ha repetido 3 veces
La palabra "es" se ha repetido 7 veces
La palabra "inteligencia," se ha repetido 1 vez
La palabra "conocerse" se ha repetido 1 vez
La palabra "sí" se ha repetido 2 veces
La palabra "mismo" se ha repetido 3 veces
La palabra "sabiduría" se ha repetido 1 vez
La palabra "Manejar" se ha repetido 1 vez
La palabra "fuerza," se ha repetido 1 vez
La palabra "manejarse" se ha repetido 1 vez
La palabra "verdadero" se ha repetido 1 vez
La palabra "poder" se ha repetido 1 vez
La palabra "Ningún" se ha repetido 1 vez
La palabra "hombre" se ha repetido 1 vez
La palabra "lo" se ha repetido 1 vez
La palabra "bastante" se ha repetido 1 vez
La palabra "bueno" se ha repetido 1 vez
La palabra "gobernar" se ha repetido 1 vez
La palabra "sin" se ha repetido 1 vez
La palabra "su" se ha repetido 1 vez
La palabra "consentimiento" se ha repetido 1 vez
La palabra "El" se ha repetido 3 veces
La palabra "camino" se ha repetido 1 vez
La palabra "noble" se ha repetido 1 vez
La palabra "someter" se ha repetido 1 vez
La palabra "los" se ha repetido 3 veces
La palabra "demás," se ha repetido 1 vez
La palabra "sino" se ha repetido 1 vez
La palabra "perfeccionarse" se ha repetido 1 vez
La palabra "uno" se ha repetido 1 vez
La palabra "orgullo" se ha repetido 1 vez
La palabra "divide" se ha repetido 1 vez
La palabra "hombres," se ha repetido 1 vez
La palabra "humildad" se ha repetido 1 vez
La palabra "une" se ha repetido 1 vez
La palabra "rico" se ha repetido 1 vez
La palabra "quien" se ha repetido 1 vez
La palabra "se" se ha repetido 1 vez
La palabra "contenta" se ha repetido 1 vez
La palabra "con" se ha repetido 1 vez
La palabra "poco" se ha repetido 1 vez

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *