Vinnaren i pepparkakshustävlingen!
2017-03-12, 21:06
  #1
Medlem
Hej!

Jag försöker köra den här koden, men då fort jag gör det så stöter apple på ett problem "Python avslutades oväntat."

Här är koden:

Kod:

from tkinter import *
from tkinter import filedialog
import tkinter.messagebox
import urllib.request
#import turtle
from bs4 import BeautifulSoup
import operator

######rita
from collections import Counter
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
######


#skapa klass

class enskiltOrd(object):
    def __init__(self, ordet, antal):
        self.ordet = ordet
        self.antal = antal

    def __str__(self):
        return self.ordet + ':' + str(self.antal)
    

#skapa disctionaryn med rakning av alla orden
def rakning (text):
    d = {}
    for ord in text:
        if ord in d.keys():
            d[ord] = d[ord] + 1
        else:
            d[ord] = 1
    return d

#gor om dictionaryn till klassobjekt
def transformering (dictionary):
    ordlista = list()
    for key in dictionary.keys():
        temp = enskiltOrd(key,dictionary[key])
        ordlista.append(temp)
    return ordlista

def rensa(HTML):
    for script in HTML(["script", "style"]):
        script.extract()    
        text = HTML.get_text()


        # get text
    text = HTML.get_text()
        
    return text


class Program:
    def __init__(self, master):
        self.master = master
        master.title("Textanalys 2.0")


        #skapa
        self.inputwindow = Entry(master)
        self.analyzebutton = Button(master, text="Analysera", command = self.AnalyzeButton)
        self.vanligaordButton = Button(master, text="Fil med ord att ta bort", command = self.getfiletoRemove)


        #placera
        self.inputwindow.grid(row=0, column=1)
        self.analyzebutton.grid(row=0, column=2)
        self.vanligaordButton.grid(row=0, column=0)

    def getfiletoRemove(self):
        self.getfiletoRemovefilename = filedialog.askopenfilename(initialdir = "/Users\karl\Box Sync\_Skola\_2017\Programmeringsteknik\Labbar\L8",title = "Select file to with words to remove",filetypes = (("text files","*.txt"),("all files","*.*")))
        textfile = open(self.getfiletoRemovefilename, "r")
        
        self.helatextenvanliga = textfile.read()
        
        textfile.close()

    def AnalyzeButton(self):        
        inputURL = self.inputwindow.get()

        try:
            inHTML = urllib.request.urlopen(inputURL).read()
            #textstring = str(intext.read().decode()) # Read the content as string from the URL
            soup = BeautifulSoup(inHTML, "html.parser")


            #inHTML.close() # Close file
            
        except ValueError:
            tkinter.messagebox.showwarning("", "URL '" + inputURL + "' kan inte hittas.")

        rensadtext = rensa(soup)
        rensadtextsplit = rensadtext.split()
        inputRaknat = rakning(rensadtextsplit)
        ordlista = transformering(inputRaknat)
        sorteradordlista = sorted(ordlista, key=operator.attrgetter('antal'), reverse=True)

        #las in vanliga.txt
        helatextenvanliga = self.helatextenvanliga
        

        #gor om den till en lista av ord
        #helatextenvanligasplit = helatextenvanliga.split()

        #skapa output
        drawlist = list()

        #jamfor ord och spara de som inte ar 'vanliga' i outputlist
        #noter att detta gors i ordning sa orden kommer fortfarande vara
        #sorterade efter forekomster
        for item in sorteradordlista:
            if item.ordet not in helatextenvanliga: #split:
                drawlist.append(item)


        #sparar top 10
        i=0

        drawlisttop10 = list()
        
        for item in drawlist:
            if i < 10:
                drawlisttop10.append(item)
                i = i + 1



        alphab = []
        frequencies = []
        for i in range(len(drawlisttop10)):
            alphab.append(drawlisttop10[i].ordet)
            frequencies.append(drawlisttop10[i].antal)
            



        pos = np.arange(len(alphab))
        width = 1.0     # gives histogram aspect to the bar diagram

        ax = plt.axes()
        ax.set_xticks(pos + (width / 2))
        ax.set_xticklabels(alphab)

        plt.bar(pos, frequencies, width, color='r')
        plt.show()
        

        
        ##drawlisttop10 innehaller de tio mest forekommande orden med
        #hur manga ord det ar (
        #rawlisttop10[i].ordet samt drawlisttop10[i].antal   )

        
       

        
        

root = Tk()
my_gui = Program(root)
root.mainloop()

Och det är så ströigt, för jag får ju inte ens ett felmeddelande.

Hjääälp!
Citera
2017-03-12, 21:13
  #2
Medlem
Kör i konsolen med strace
Citera
2017-03-12, 21:26
  #3
Medlem
Citat:
Ursprungligen postat av banankaka12
Kör i konsolen med strace

Hur gör man det?
Citera
2017-03-12, 21:35
  #4
Medlem
När jag installerade packagen i terminalen, så är det enda den klagar på är "pip3.5 install urllib.request"
så jag testade istället pip3.5 install urllib3 och pip3.5 install urllib men får bara svaret "Could not find a version that satisfies the requirement urllib (from versions: )
No matching distribution found for url lib" med första alternativet, men med urllib3 så går det, men det är ju int edet jag importerar sedan i idle.

Ngn som vet hur man ska göra då?
Citera
2017-03-15, 07:20
  #5
Medlem
Mycket av din kod är total SKIT.
tex:
Kod:
def rensa(HTML):
    for 
script in HTML(["script""style"]):
        
script.extract()    
        
text HTML.get_text()


        
# get text
    
text HTML.get_text()
        
    return 
text 
Att skriva kod som gör:
text=1 # Denna raden borde tas bort..
text=1

NAMN givning är ofta felaktig...
tex "ordlista: Bör vara en "lista" med ord (det är det inte i ditt fall)


Andra kod saker du bör undvika:
Att transformera till "egen" klass istället för en dictionary ?
Varför ?, det finns en standard i PYTHON som heter Dict, använd det.
Du behöver knappast ha egen klass för det, möjligen kan du lagra på annat sätt en DICT,
men du behöver inte ha en klass för det i varje fall.

Ta och skriv om från början.
KÖR koden INNAN du är helt färdig !
Kör med print och se vad de olika funktionerna får.
Kör med print var eller kanske en debugger och se vad du får för värden.

Skaffa pylint eller liknande LINT i den text editor som du använder !!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback