1
resposta

Programa para verificar número de palavras e uma sentença de um arquivo texto.

arquivo texto utilizado: https://easyupload.io/j5agtq O método faz parte de uma classe chamada ArqTexto

Objetivo: O método não utiliza entrada e retorna, em um objeto tuple, (1) o número médio de palavras por sentença no arquivo, (2) o número de palavras na sentença com mais palavras e (3) o número de palavras na sentença com menos palavras. Você pode considerar que os símbolos que delimitam uma sentença sejam '!?.'.

O que eu fiz:

    def media(self):
        import string
        marcadores = ["?",".","!"]
        cont = 0
        total_pal = 0
        num_frases = 0
        qtdade_palavras = []
        frase = ""
        with open(arq) as f:
            texto = f.read()
            #print(texto)
            for char in texto:
                frase += char

                if char in marcadores:
                   #print(frase)
                   #print(len(frase.split()))
                   for pal in frase.split():
                       for i in string.punctuation:
                           if i in pal:
                               pal = pal.replace(i, "")
                       pal = pal.lower()
                       cont +=1

                   #print(cont)
                   total_pal += cont
                   num_frases +=1
                   frase = ""
                   qtdade_palavras.append(cont)
                   cont = 0
                   continue
        print(f"O numero médio de palavras por sentença é {total_pal/num_frases}")
        print(f"O número de palavras na sentença com mais palavras é {max(qtdade_palavras)}")
        print(f"O número de palavras na sentença com menos palavras é {min(qtdade_palavras)}")

A saída da minha função:

O numero médio de palavras por sentença é 25.488888888888887
O número de palavras na sentença com mais palavras é 124
O número de palavras na sentença com menos palavras é 2

Observei que, na verdade, a sentença com menos palavras tem apenas 1 palavra e não DUAS:

`Prophet!

O que estou errando?

código fonte completo: https://www.pastiebin.com/5df6940dbc109

1 resposta

Olá Edson,

Eu simplifiquei um pouco o código, olha se te ajuda:

def media(self):
    num_palavras = []

    with open(arq) as f:
        texto = f.read()

        texto = texto.replace('.', '?').replace('!', '?')
        sentencas = texto.split('?')
        sentencas.pop()

        for frase in sentencas:
            numero = len(''.join((c if c.isalnum() else ' ') for c in frase).split())
            num_palavras.append(numero)

        total_palavras = sum(num_palavras)

        print(f"O numero médio de palavras por sentença é {total_palavras/len(num_palavras)}")
        print(f"O número de palavras na sentença com mais palavras é {max(num_palavras)}")
        print(f"O número de palavras na sentença com menos palavras é {min(num_palavras)}")

O resultado foi esse:

O numero médio de palavras por sentença é 24.42222222222222
O número de palavras na sentença com mais palavras é 119
O número de palavras na sentença com menos palavras é 1

Qualquer dúvida é só falar.