Word count using dictionary

Asked

Viewed 1,611 times

4

I need to count the occurrences of words in a text using as reference a list of predetermined words. I turned the text into a list of string, the words are in a set (set)

 palavras_procuradas = {'de', 'solução', 'mesa', 'teste', 'acabaxi'}

 texto = ['para', 'validar', 'minha', 'solução', 'foi', 'preciso', 'fazer', 'o', 'teste', 'de', 'mesa', 'do', 'algoritmo', 'elaborado', 'só', 'depois', 'do', 'teste', 'de', 'mesa', 'que', 'o', 'programa', 'foi', 'implementado', 'essa', 'estratégia', 'poupou', 'bastan', 'te', 'tempo', 'de', 'desenvolvimento']

 dicionario = {}
 for palavra in texto:
     if palavra in palavras_procuradas:
         dicionario[palavra]= palavra += 1
 for chave in dicionario:
     print (chave + " " + dicionario[chave])

The right way out would be:

  acabaxi 0
  teste 2
  mesa 2
  solução 1
  de 3

On the output of my Code is giving error:

  dicionario[palavra]= palavra += 1
                              ^
  SyntaxError: invalid syntax

2 answers

3


Solution

I put a counting that is always initialized with 1, so it checks if the word already exists in the dictionary, if true, takes the number of the string, converts to integer and then assigns +1 and adds to the string again, I added one more for checking the words that are not in the text with the value 0.

Code

palavras_procuradas = {'de', 'solução', 'mesa', 'teste', 'acabaxi'}

texto = ['para', 'validar', 'minha', 'solução', 'foi', 'preciso', 'fazer', 'o', 'teste', 'de', 'mesa', 'do', 'algoritmo', 'elaborado', 'só', 'depois', 'do','teste', 'de', 'mesa', 'que', 'o', 'programa', 'foi', 'implementado', 'essa', 'estratégia', 'poupou', 'bastan', 'te', 'tempo', 'de', 'desenvolvimento']

dicionario = {}
for palavra in texto:
    if palavra in palavras_procuradas:
        count = 1
        if palavra in dicionario:
          count = int(dicionario[palavra].split(' ')[-1]) + 1;
        dicionario[palavra] = palavra + " " + str(count)

for palavra in palavras_procuradas:
  if palavra not in texto:
    dicionario[palavra] = palavra + " " + str(0)

for chave in dicionario:
    print (dicionario[chave])

Upshot

solução 1
teste 2
de 3
mesa 2
acabaxi 0

Execute

  • Hello Wictor Keys, that the word pineapple does not appear in the text but it should be returned with value 0.

  • All right, I’ll make the change and put it on

  • Edited with the desired change :)

  • 1

    Hello Wictor Keys, thank you very much friend, your solution worked perfectly, if I get to the level of programming next to yours is already good for me. Thanks

  • I hope you get further than me :)

2

Just as a complement to the answer you already have, I show another resolution alternative using Counter of Collections. This is a sub-dictionary class that counts the various elements received in the construction.

By directly applying the Counter to your list texto gives you the following result:

>>> from collections import Counter
>>> dicionario = Counter(texto)
Counter({'de': 3, 'do': 2, 'teste': 2, 'o': 2, 'mesa': 2, 'foi': 2, 'te': 1, 'programa': 1, 'para': 1, 'tempo': 1, 'depois': 1, 'estratégia': 1, 'só': 1, 'implementado': 1, 'minha': 1, 'algoritmo': 1, 'essa': 1, 'preciso': 1, 'que': 1, 'solução': 1, 'desenvolvimento': 1, 'bastan': 1, 'elaborado': 1, 'fazer': 1, 'validar': 1, 'poupou': 1})

Here you see that he accounted for all the words that existed there. To incorporate into his logic he just needs to interpret the Counter those who are interested:

from collections import Counter  # importação de Counter aqui

palavras_procuradas = {'de', 'solução', 'mesa', 'teste', 'acabaxi'}
texto = ['para', 'validar', 'minha', 'solução', 'foi', 'preciso', 'fazer', 'o', 'teste', 'de', 'mesa', 'do', 'algoritmo', 'elaborado', 'só', 'depois', 'do', 'teste', 'de', 'mesa', 'que', 'o', 'programa', 'foi', 'implementado', 'essa', 'estratégia', 'poupou', 'bastan', 'te', 'tempo', 'de', 'desenvolvimento']

dicionario = Counter(texto)

for palavra in palavras_procuradas:  # para cada palavra procurada
    # imprimir a palavra seguida da contagem, que é 0 se não existir
    print (palavra + " " + str(dicionario[palavra]) if palavra in palavras_procuradas else 0)

See the example in Ideone

  • Isac, thank you so much for the code.

  • @Bruno No problem. We are here to help :)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.