Word count using dictionary

3

I need to count the occurrences of words in a text based on a list of predetermined words. I made the text 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 correct output would be:

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

In the output of my Code is giving error:

  dicionario[palavra]= palavra += 1
                              ^
  SyntaxError: invalid syntax
    
asked by anonymous 22.04.2018 / 13:11

2 answers

2

You can resolve this as follows:

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])

Result:

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

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

Result: link

    
22.04.2018 / 14:46
1

Just to complement the response you already have, I'll show you another alternative resolution using Counter collections . This is a sub-class of dictionary that does the counts of the various elements received in the construction.

Directly applying 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 counted all the words that existed there. To incorporate into your logic you only need to interpret from Counter those you are interested in:

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 Ideone example

    
22.04.2018 / 15:38