#!/usr/bin/python # -*- coding: utf-8 -*- #Autor: Erickson Silva from WorkCSV import * from Iterator import * from StringAux import * class Simplificador(object): # inicializa todos as variaveis def __init__(self): self.it = Iterator() self.__csv = WorkCSV() self.__dicInf = {} self.__dicSin = {} self.__dicWords = {} self.__dic2Gen = {} self.__dicTemVerbs = {} self.executeWorkCSV() # retira artigos e preposicoes; passa verbos para infinitivo e verificar se há sinonimos def simplificar(self, texto): self.__ts = [] self.it.load(texto) self.__verb = False self.__adv = False; self.__countVerb = 0 self.__countAdv = 0 countWords = 0 while(self.it.hasNext()): w = self.auxConvert(self.it.getAtualW()) t = self.it.getAtualT() self.__b = False if self.__dicWords.has_key(t) == False: # verifica se nao eh artigo/preposicao wu = w.upper() # deixa o token maiusculo #if t[:2] == "VB": if t == "VB-P" or t == "VB-D" or t == "VB-R": self.__verb = True self.__countVerb += 1 if t[:3] == "ADV": self.__adv = True self.__countAdv += 1 if self.__dicInf.has_key(wu): # verifica se ha um verbo infinitivo desse token sAux = self.__dicInf[wu] # se sim, adiciona numa string aux if self.__dicSin.has_key(sAux): # verifica se ha um sinonimo para esse verbo infinitivo self.__ts.append([self.__dicSin[sAux],t]) # se sim, entao adiciona na lista self.__b = True else: self.__ts.append([sAux,t]) # caso contrario, adiciona so o verbo infinitivo msm self.__b = True if self.__b == False and self.__dicSin.has_key(wu): # verifica se nao foi encontrado verbo infinitivo e se ha sinonimo self.__ts.append([self.__dicSin[wu],t]) # adiciona na o sinonimo lista self.__b = True if self.__dic2Gen.has_key(wu): del self.__ts[-1] lenTicket = len(self.it.getAntT()) if ((self.__dicWords.has_key(self.it.getAntT())) and (self.it.getAntT()[lenTicket-1:] == "F") or (self.it.getAntT()[lenTicket-3:] == "F-P")): self.__ts.append(["MULHER " + wu,t]) else: self.__ts.append(["HOMEM " + wu,t]) self.__b = True if self.__b == False: # verifica se nao encontrou nem verbo infinito ou sinonimo self.__ts.append([wu,t]) countWords += 1 self.it.reset() if self.__verb == True: return self.verbalAnalysis(self.__ts) return self.__ts # cria e recupera todos os dicionarios (verbos inf., sinonimos e artigos/preposicoes) def executeWorkCSV(self): self.__dicInf = self.__csv.getDicInf() self.__dicSin = self.__csv.getDicSin() self.__dicWords = self.__csv.getDicWords() self.__dic2Gen = self.__csv.getDic2Gen() self.__dicTemVerbs = self.__csv.getDicTemVerbs() # converte romano para numero/numero para palavra def auxConvert(self, t): try: txt = roman_to_int(t) return extenso(txt).decode("utf-8") except: if t.isdigit(): return extenso(t).decode("utf-8") return t def verbalAnalysis(self, lista): lv = [] self.it.load(lista) hasFut = False hasPas = False count = 0 while(self.it.hasNext()): w = self.it.getAtualW().upper() t = self.it.getAtualT() if(t[:3] == "ADV"): if (self.__dicTemVerbs.has_key(w)): self.it.reset() #print "ADV: retornou lista original" return lista if(t == "VB-P"): if (self.__countVerb > 1): count += 1 #print "VB-P: Incrementou" if(count == self.__countVerb): #print "VB-P Adicionou " + w lv.append([w,t]) else: #print "VB-P: retornou lista original" self.it.reset() return lista elif(t == "VB-D"): count += 1 hasPas = True #print "VB-D: Incrementou" if(count == self.__countVerb): #print "VB-D Adicionou " + w lv.append([w,t]) elif(t == "VB-R"): count += 1 hasFut = True #print "VB-R: Incrementou" if(count == self.__countVerb): #print "VB-R Adicionou " + w lv.append([w,t]) else: lv.append([w,t]) if (hasFut): lv.append(["FUTURO", "TVB"]) elif (hasPas): lv.append(["PASSADO", "TVB"]) self.it.reset() return lv