[Python] Erro ao gerar gráfico matplotlib

Discussão em 'Python' iniciado por Stack, Outubro 20, 2024.

  1. Stack

    Stack Membro Participativo

    sou novo com o Python e estou tendo dificuldade com meu algorítimo, a função do mesmo é verificar palavras em um conjunto de arquivos no formato PDF e analisar a recorrência de cada palavra gerando com essas informações um gráfico da lei de zipf(a segunda palavra mais recorrente repete em quantidade a raiz quadrada da primeira palavra mais recorrente) em fim, estou usando a biblioteca matplotlib para plotar gráficos em barras, porém o número de palavras que aparecem no gráfico é muito grande(no eixo x) e estão se sobrescrevendo.

    obs: todo crítica é bem vinda, desde já agradeço a todos. segue o algorítimo e o gráfico gerado.

    #!/usr/bin/env python3.6
    import os
    import re
    from operator import itemgetter
    import matplotlib.pyplot as plt
    import numpy as np
    import math

    from tkinter import *
    def io_pasta():
    def on_press():
    if not (os.path.exists(entrada.get())):
    lb["fg"]="red"
    lb["text"] = "Pasta inexistente/inacessivél"
    lb["font"]= "Bold"
    else:
    zipf(entrada.get(),janela)

    janela = Tk()
    lb=Label(janela, text = "Onde estão os asquivos?", font = "arial")
    lb.pack()
    entrada = Entry(janela, width = 40)
    entrada.place(x=40,y=40)
    b = Button(janela,text="OK",width = 10, command=on_press)
    b.place(x=150,y=75)

    janela.geometry("400x120")
    janela.title("Distribuição ZIPF")

    janela.mainloop()


    def zipf(pasta,win):
    win.destroy()
    if not pasta[-1]=="/":
    pasta+="/"
    palavra=[]
    repetic=[]
    for nome in os.listdir(pasta):
    os.system("pdftotext -enc UTF-8 "+pasta+""+str(nome)+" "+pasta+""+str(nome)+".txt")
    print("arquivos convertidos ......................ok!")
    os.system("mkdir "+pasta+"arquivos_originais && mv "+pasta+"*pdf "+pasta+"arquivos_originais")
    os.system("mkdir "+pasta+"convertidos_txt && mv "+pasta+"*txt "+pasta+"convertidos_txt/")
    os.system("mkdir "+pasta+"zipf")
    print("pasta ARQUIVOS_MOVIDOS criada .................ok!")
    print("Arquivos Movidos.............................ok!")
    frequency = {}
    for arq in os.listdir(""+pasta+"convertidos_txt/"):
    open_file = open(""+pasta+"convertidos_txt/"+str(arq)+"", "r", encoding='latin-1')
    file_to_string = open_file.read()
    w1 = re.findall(r'(\b[A-Za-z][a-z]{4,20}\b)', file_to_string)
    control = True
    for word in w1:
    count = frequency.get(word,0)
    frequency[word] = count + 1

    for key, value in reversed(sorted(frequency.items(), key = itemgetter(1))):
    if control == True:
    j=value
    control=False
    else:
    if abs(math.sqrt(j)-value)<4:
    palavra.append(key)
    repetic.append(value)

    plt.title("Distribuição zipf")
    plt.grid(True)
    plt.xticks(repetic,palavra,rotation=90,size='small')
    pos = np.arange(len(palavra)) + .5
    plt.bar(pos,repetic,align='center',color='#b8ff5c')
    plt.savefig(''+pasta+'zipf/grafico_'+str(arq)+'.png')

    io_pasta()

    Continue reading...

Compartilhe esta Página