Advertisement
Guest User

Untitled

a guest
May 27th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.44 KB | None | 0 0
  1.  #coding=latin-1
  2.  
  3. from __future__ import print_function # use print() in Python 2
  4. try:
  5.     import Tkinter as tk # Python 2
  6.     from Tkinter import *
  7. except:  
  8.     import tkinter as tk # Python 3
  9.    
  10. import codecs # to open() with encoding="latin-1" in Python 2    
  11.    
  12. class Principal():
  13.  
  14.     def __init__(self):
  15.  
  16.  
  17.        
  18.         self.you_shall_not_pass = ['de', 'o','a', 'do', 'da', 'em', 'e', 'que', 'ser', 'um', 'uns', 'uma', 'umas', 'por','para', 'nao', 'com', 'se', 'ter', 'seu', 'sua', 'seus', 'suas','como',
  19.  'estar','sim', '-', 'os', 'as', 'no', 'ao', 'na', '.', 'mas', 'era', 'lhe', 'ele', 'mais','dos', 'ela', 'ele', 'muito','ja','eu','sobre','das','tinha','quando','sem','la','num',
  20.  'depois','entao','nos','esta','ainda','numa','onde','foi','tao','estava','entre','dum','so','grande','disse','todo','pela','agora','pelo','me','toda', 'havia', 'tudo', 'ou','ate',
  21.  'ha','nem','logo','ia','sempre','duas','tambem','mesmo','ali','aos','tem','fora','aquele','tu','meu','duma','aquela','e,','outra','essa','outro','isto','esse','assim','quem','ele,',
  22.  'apenas','todos','pouco','nas','diante','ai','sob','tinham','coisas','aqui','pois','porque','ir','te','nunca','depois','lado','tres','mao','vez','sim,','desde','isso','fazer','este']
  23.        
  24. ##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS
  25. #Aqui introduzir os tags no mesmo exato formato aqui demonstrado: o primeiro membro do dicionário terá de ser 'azz' e todas as keys do dicionário terão de estar atribuídas ao nome do tag (também aqui preceder o nome do tag por self.)
  26. #Depois de adicionado o dicionário de um novo tag, adicionar à lista de tags os tags adicionados, separados por vírgulas e todos utilizando o prefixo self.
  27.  
  28.        
  29.         self.nobreza = {'azz':'nobreza','d.': 'nobreza', 'senhor': 'nobreza', 'prata': 'nobreza', 'senhora': 'nobreza', 'salao': 'nobreza', 'respeito': 'nobreza', 'senhoras': 'nobreza',
  30.          'principe': 'nobreza', 'rei': 'nobreza', 'criado': 'nobreza', 'propria': 'nobreza', 'proprio': 'nobreza', 'perfume': 'nobreza', 'poder': 'nobreza'}
  31.        
  32.         self.catolicismo = {'azz':'catolicismo','alma': 'catolicismo', 'respeito': 'catolicismo', 'alem': 'catolicismo', 'espirito': 'catolicismo', 'silencio': 'catolicismo', 'graca': 'catolicismo', 'santa': 'catolicismo',
  33.          'santo': 'catolicismo', 'alto': 'catolicismo', 'coracao': 'catolicismo', 'luz': 'catolicismo', 'senhora': 'catolicismo', 'senhor': 'catolicismo', 'bem': 'catolicismo', 'pai': 'catolicismo',
  34.          'amor': 'catolicismo', 'novo': 'catolicismo', 'nova': 'catolicismo', 's.': 'deus', 'homens': 'catolicismo', 'vida': 'catolicismo', 'familia': 'catolicismo', 'igreja': 'catolicismo'}
  35.          
  36.         self.arquitetura = {'azz':'arquitetura','jantar': 'arquitetura', 'camara': 'arquitetura', 'casa': 'arquitetura', 'janela': 'arquitetura', 'quarto': 'arquitetura', 'cor': 'arquitetura', 'luz': 'arquitetura',
  37.          'mesa': 'arquitetura', 'canto': 'arquitetura', 'casas': 'arquitetura', 'porta': 'arquitetura', 'sala': 'arquitetura', 'jardim': 'arquitetura', 'salao': 'arquitetura', 'escada': 'arquitetura', 'paredes': 'arquitetura'}
  38.  
  39.         self.fisica = {'azz':'fisica','universo': 'fisica', 'teoria': 'fisica', 'tempo': 'fisica', 'particulas': 'fisica', 'raios': 'fisica', 'trabalho': 'fisica', 'temperatura': 'fisica',
  40.          'luz': 'fisica', 'forca': 'fisica', 'energia': 'fisica', 'materia': 'fisica', 'buraco': 'fisica', 'espaco': 'fisica', 'velocidade': 'fisica', 'estrela': 'fisica', 'materia': 'fisica',
  41.          'relatividade': 'fisica', 'estrelas': 'fisica', 'buracos': 'fisica', 'ondas': 'fisica', 'leis': 'fisica', 'teorias': 'fisica', 'gravidade': 'fisica', 'forcas': 'fisica', 'particula': 'fisica',
  42.          'gravitacional': 'fisica', 'espaco-tempo': 'fisica', 'mecanica': 'fisica', 'distancia': 'fisica', 'raios': 'fisica', 'quarks': 'fisica', 'sol': 'fisica', 'expansao': 'fisica', 'colapso': 'fisica',
  43.          'quantica': 'fisica', 'radiacao': 'fisica', 'eletroes': 'fisica', 'newton': 'fisica', 'einstein': 'fisica', 'singularidade': 'fisica', 'spin': 'fisica', 'densidade': 'fisica'}
  44.          
  45.         self.politica = {'azz':'politica', 'bem': 'politica', 'contra': 'politica', 'homens': 'politica', 'estado': 'politica', 'poder': 'politica', 'povo': 'politica', 'rei': 'politica',
  46.          'tempo': 'politica', 'armas': 'politica', 'tempos': 'politica', 'necessario': 'politica', 'modo': 'politica', 'principados': 'politica', 'principado': 'politica', 'soldados': 'politica', 'fortuna': 'politica',
  47.          'virtude': 'politica', 'razao': 'politica', 'acoes': 'politica', 'necessidade': 'politica', 'razoes': 'politica', 'estados': 'politica', 'vida': 'politica', 'reino': 'politica', 'estado': 'politica',
  48.          'senhor': 'politica', 'cidade': 'politica', 'inimigos': 'politica', 'governo': 'politica', 'guerra': 'politica', 'leis': 'politica', 'exercito': 'politica', 'armas': 'politica', 'internacional': 'politica',
  49.          'historia': 'politica', 'movimento': 'politica', 'revolucao': 'politica', 'exploracao': 'politica', 'nacoes': 'politica', 'burgueses': 'politica', 'classe': 'politica', 'associacao': 'politica', 'dominacao': 'politica',
  50.          'trabalho': 'politica', 'partido': 'politica', 'operario': 'politica', 'desenvolvimento': 'politica', 'progresso': 'politica', 'oposicao': 'politica', 'capital': 'politica', 'social': 'politica',
  51.          'politica': 'politica'}
  52.  
  53.         self.filosofia = {'azz':'filosofia', 'contra': 'filosofia', 'deus': 'filosofia', 'homem': 'filosofia', 'cristianismo': 'filosofia', 'conceito': 'filosofia', 'vida': 'filosofia', 'mundo': 'filosofia',
  54.          'modo': 'filosofia', 'moral': 'filosofia', 'historia': 'filosofia', 'poder': 'filosofia', 'vontade': 'filosofia', 'fe': 'filosofia', 'sentimento': 'filosofia', 'realidade': 'filosofia', 'realidade': 'filosofia',
  55.          'verdade': 'filosofia', 'morte': 'filosofia', 'espirito': 'filosofia', 'humanidade': 'filosofia', 'forma': 'filosofia', 'valores': 'filosofia', 'valor': 'filosofia', 'consciencia': 'filosofia', 'odio': 'filosofia',
  56.          'conceitos': 'filosofia', 'semelhante': 'filosofia', 'religiao': 'filosofia', 'razao': 'filosofia', 'doutrina': 'filosofia', 'estado': 'filosofia', 'possivel': 'filosofia', 'forte': 'filosofia', 'pressuposto': 'filosofia',
  57.          'argumento': 'filosofia', 'prazer': 'filosofia', 'socrates': 'filosofia', 'cidade': 'filosofia', 'justica': 'filosofia', 'respeito': 'filosofia', 'virtude': 'filosofia', 'metafisica': 'filosofia', 'mal': 'filosofia',
  58.          'belo': 'filosofia', 'alma': 'filosofia', 'etica': 'filosofia', 'pensar': 'filosofia', 'raciocinio': 'filosofia', 'filosofia': 'filosofia', 'filosofia': 'filosofia', 'sabedoria': 'filosofia'}
  59.  
  60.         self.portugal = {'azz':'portugal', 'portugal': 'portugal', 'portugues': 'portugal', 'portuguesa': 'portugal', 'lisboa': 'portugal', 'porto': 'portugal', 'mafra': 'portugal', 'sintra': 'portugal',
  61.          'alentejo': 'portugal', 'braganca': 'portugal', 'braga': 'portugal', 'santarem': 'portugal', 'barcelos': 'portugal', 'leiria': 'portugal', 'viseu': 'portugal', 'acores': 'portugal', 'madeira': 'portugal',
  62.          'tejo': 'portugal', 'douro': 'portugal', 'mondego': 'portugal', 'coimbra': 'portugal', 'aveiro': 'portugal', 'algarve': 'portugal', 'evora': 'portugal', 'setubal': 'portugal', 'portugueses': 'portugal'}
  63.  
  64.  
  65.  
  66.         self.lista_de_tags=[self.nobreza, self.catolicismo, self.arquitetura, self.fisica, self.politica, self.filosofia, self.portugal]
  67.  
  68.        
  69. ##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS
  70. #Aqui introduzir os livros com através da adição do prefixo self., igualando à enumeração das palavras do tag, sendo SEMPRE o primeiro membro da lista o nome da obra (NÃO MEXER NISTO ANTES DE ADICIONAR TODOS OS TAGS)
  71.         self.maias = ['maias', 'nobreza']
  72.        
  73.         self.lista_de_livros=[self.maias]
  74.  
  75.        
  76.  
  77. ##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS##TAGS
  78.        
  79.         self.recomendados = []
  80.         self.livro1 = 'erro'
  81.         self.livro2 = 'batata.txt'
  82.         self.dicionario1 = {}
  83.         self.dicionario2 = {}
  84.  
  85.  
  86.     def read_dictionario(self, filename):
  87.        
  88.         result = {}
  89.        
  90.         lista = codecs.open(filename, 'r', encoding='latin-1').read().split()
  91.        
  92.         for word in lista:
  93.             if word in self.you_shall_not_pass:
  94.                 continue
  95.             if word in result:
  96.                 result[word] += 1
  97.             else:
  98.                 result[word] = 1
  99.        
  100.         return result
  101.        
  102.        
  103.     def palavras_repetidas(self):    
  104.        
  105.         self.dicionario1 = self.read_dictionario(self.livro1)
  106.         global sorted_dict
  107.         sorted_dict = [(k,v) for v,k in sorted([(v,k) for k,v in self.dicionario1.items()], reverse=True)]
  108.        
  109.         with open('teste.txt', 'w') as f:
  110.             for item in sorted_dict:
  111.                 f.write(str(item))
  112.         self.limit1 = 0.0003 * self.palavras_totais(self.livro1)
  113.                
  114.         #print(sorted_dict)
  115.        
  116.         return sorted_dict
  117.  
  118.  
  119.     def palavras_totais(self, filename):
  120.        
  121.         f = open(filename, 'r').read().split()
  122.        
  123.         total = 0
  124.        
  125.         for word in f:
  126.             total += 1
  127.         #total = len(f)
  128.        
  129.        
  130.        
  131.         return total
  132.  
  133.  
  134.     def comparar(self):
  135.        
  136.         self.dicionario2 = self.read_dictionario(self.livro2)
  137.  
  138.         result = []
  139.  
  140.         self.limit1 = 0.0003 * self.palavras_totais(self.livro1)
  141.         self.limit2 = 0.0003 * self.palavras_totais(self.livro2)
  142.        
  143.         for key in self.dicionario1:
  144.             if key in self.dicionario2:
  145.                 if ((self.dicionario1[key]> self.limit1 and ((self.dicionario2[key])> self.limit2))):
  146.                     txt = u'{}: {}, {}'.format(key, self.dicionario1[key], self.dicionario2[key])
  147.                     result.append(txt)
  148.                    
  149.         return result
  150.  
  151.     def tags(self):
  152.         self.livro1_tag = []
  153.        
  154.        
  155.         for key in self.dicionario1.keys():
  156.             for tag in self.lista_de_tags:
  157.                 if self.dicionario1[key] > self.limit1 and key in tag:
  158.                     self.livro1_tag.append(tag['azz'])
  159.         return self.livro1_tag
  160.  
  161.     def similar(self):
  162.         self.index = 0
  163.         for tag in self.livro1_tag:
  164.             for livro in self.lista_de_livros:
  165.                 for tag2 in livro:
  166.                     if tag2 == tag:
  167.                         self.index +=1
  168.         if self.index >= 1:
  169.             self.recomendados.append(livro[0])
  170.  
  171.         return self.recomendados
  172.                    
  173.        
  174.            
  175.            
  176.        
  177.        
  178. class MainWindow():
  179.  
  180.     def __init__(self):
  181.  
  182.         self.master = tk.Tk()
  183.         self.master.title('App')
  184.        
  185.         self.e1 = tk.Entry(self.master)
  186.         self.e1.pack()
  187.        
  188.         self.e2 = tk.Entry(self.master)
  189.         self.e2.pack()
  190.        
  191.         self.b1 = tk.Button(self.master, text='Submeter', command=self.submeter)
  192.         self.b1.pack()
  193.        
  194.         self.b2 = tk.Button(self.master, text='Comparar', command=self.comparar)
  195.         self.b2.pack()
  196.  
  197.         # ------------------------------------------------------------
  198.        
  199.         self.frame1 = tk.Frame(self.master)
  200.         self.frame1.pack()
  201.        
  202.         self.scrollbar1 = tk.Scrollbar(self.frame1)
  203.         self.scrollbar1.pack(side='right', expand=True, fill='y')
  204.  
  205.         self.txt1 = tk.Text(self.frame1, yscrollcommand=self.scrollbar1.set)
  206.         self.txt1.pack(side='left')
  207.        
  208.         self.scrollbar1.config(command=self.txt1.yview)
  209.  
  210.         self.clear1 = tk.Button(self.master, text='Clear', command=self.clear1)
  211.         self.clear1.pack()
  212.        
  213.         # ------------------------------------------------------------
  214.  
  215.         self.frame2 = tk.Frame(self.master)
  216.         self.frame2.pack()
  217.        
  218.         self.scrollbar2 = tk.Scrollbar(self.frame2)
  219.         self.scrollbar2.pack(side='right', expand=True, fill='y')
  220.  
  221.         self.txt2 = tk.Text(self.frame2, yscrollcommand=self.scrollbar2.set)
  222.         self.txt2.pack(side='left')
  223.        
  224.         self.scrollbar2.config(command=self.txt2.yview)
  225.  
  226.         self.clear2 = tk.Button(self.master, text='Clear', command=self.clear2)
  227.         self.clear2.pack(side='left', fill=BOTH)
  228.        
  229.         # ------------------------------------------------------------
  230.        
  231.        
  232.         self.txt3 = tk.Text(self.frame1)
  233.         self.txt3.pack()
  234.        
  235.  
  236.         self.tag = tk.Button(self.frame2, text='Ver Tags', command=self.tags)
  237.         self.tag.pack()
  238.  
  239.         self.txt4 = tk.Text(self.frame2)
  240.         self.txt4.pack()
  241.         self.txt4.tag_config(self.frame2,background="black", foreground="green")
  242.  
  243.         self.master.configure(background='grey')
  244.         self.frame1.configure(background='grey')
  245.         self.frame2.configure(background='grey')
  246.  
  247.         self.verrecomendados = tk.Button(self.master, text = 'Ver Recomendados', command = self.ver_recomendados)
  248.         self.verrecomendados.pack()
  249.  
  250.  
  251.         self.principal = Principal()
  252.        
  253.     def run(self):
  254.         self.master.mainloop()
  255.  
  256.     def clear1(self):
  257.         self.txt1.delete(1.0, 'end')
  258.        
  259.     def clear2(self):
  260.         self.txt2.delete(1.0, 'end')
  261.        
  262.     def submeter(self):
  263.         self.principal.livro1 = self.e1.get() +'.txt'
  264.  
  265.         result = self.principal.palavras_repetidas()
  266.  
  267.         for line in result:
  268.             self.txt1.insert('end', line)
  269.             self.txt1.insert('end', "\n")
  270.  
  271.     def comparar(self):
  272.         self.principal.livro1 = self.e1.get() +'.txt'
  273.         self.principal.livro2 = self.e2.get() +'.txt'
  274.        
  275.         result = self.principal.comparar()
  276.        
  277.         for line in result:
  278.             self.txt2.insert('end', line)
  279.             self.txt2.insert('end', "\n")
  280.  
  281.     def tags(self):
  282.         tag = self.principal.tags()
  283.         self.txt3.insert('end', tag)
  284.  
  285.     def ver_recomendados(self):
  286.         self.txt4.insert('end', self.principal.similar())
  287.  
  288. # ---------------------------------------------------------------------
  289.  
  290. MainWindow().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement