diff --git a/src/new/AplicaSinonimos.py b/src/new/AplicaSinonimos.py index 11153fb..aa7b198 100644 --- a/src/new/AplicaSinonimos.py +++ b/src/new/AplicaSinonimos.py @@ -32,6 +32,6 @@ class AplicaSinonimos(object): # Verifica se há sinonimo do token def verificar_sinonimo(self, token): - if self.dicionarios.hasSinonimo(token): - return self.dicionarios.getSinonimo(token) + if self.dicionarios.has_sinonimo(token): + return self.dicionarios.get_sinonimo(token) return token \ No newline at end of file diff --git a/src/new/ConverteExtenso.py b/src/new/ConverteExtenso.py index 13f82b0..58a2bf1 100644 --- a/src/new/ConverteExtenso.py +++ b/src/new/ConverteExtenso.py @@ -13,8 +13,6 @@ from Iterator import * num = {"zero":0, "um":1, "dois":2, "tres":3, "quatro":4, "cinco":5, "seis":6, "sete":7, "oito":8, "nove":9} -und = {"mil":1000, "milhao":1000000, "bilhao":1000000000, "trilhao":1000000000000} - ext = [{"um":"1", "dois":"2", "tres":"3", "quatro":"4", "cinco":"5", "seis":"6", "sete":"7", "oito":"8", "nove":"9", "dez":"10", "onze":"11", "doze":"12", "treze":"13", "quatorze":"14", "quinze":"15", "dezesseis":"16", @@ -24,6 +22,7 @@ ext = [{"um":"1", "dois":"2", "tres":"3", "quatro":"4", "cinco":"5", "seis":"6", "quatrocentos":"4", "quinhentos":"5", "seissentos":"6", "setessentos":"7", "oitocentos":"8", "novecentos":"9"}] +und = {"mil":1000, "milhao":1000000, "bilhao":1000000000, "trilhao":1000000000000} unds = {"mil":"000", "milhao":"000000","milhoes":"000000", "bilhao":"000000000","bilhoes":"000000000", "trilhao":"000000000000", "trilhoes":"000000000000"} @@ -40,7 +39,8 @@ def twoDigit(x): def threeDigit(x): return ext[2][x[0]]+ext[1][x[1]]+ext[0][x[2]] -def extenso2(n): +# Não faço mais a minima idéia de como fiz isso, só sei que funciona! +def extensoUnit(n): sn = n.split(",") size = len(sn) firstWord = sn[0] @@ -76,41 +76,43 @@ def extenso2(n): return numExt + +''' +Comece com uma lista vazia. Itere pelas palavras da string da esquerda +para direita. Ao encontrar um numeral, adicione o número à lista se a +última palavra foi uma escala, ou some ao último numero da lista se a +última palavra foi um numeral. Ao encontrar uma escala, multiplique o +último número da lista de acordo. Quando terminar, some tudo e retorne +o resultado. +''' + +# TODO: Refatorar para nao usar mais o extensoUnit def extenso(extenso): global newToken, auxToken extensoQuebrado = extenso.lower().split(" ") nums = [] it = Iterator() it.load(extensoQuebrado) - while(it.hasNext()): - token = simplifica(it.getToken()) - tokenAnterior = simplifica(it.getToken(-1)) + while(it.has_next()): + token = simplifica(it.get_token()) + tokenAnterior = simplifica(it.get_token(-1)) if (und.has_key(token)): - #print "cond1" - if(it.getCount() == 0): - #print "cond2" + if(it.get_count() == 0): nums.append(und[token]) else: - #print "cond3" newToken = und[token] * int(nums[-1]) nums[-1] = newToken else: - #print "cond4" if (num.has_key(token)): - #print "cond5" auxToken = num[token] elif (not und.has_key(token)): - #print "cond6" - auxToken = extenso2(token) + auxToken = extensoUnit(token) - if((not und.has_key(tokenAnterior)) and it.getCount() > 0): - #print "cond7" + if((not und.has_key(tokenAnterior)) and it.get_count() > 0): newToken = int(auxToken) + int(nums[-1]) nums[-1] = newToken else: - #print "cond8" nums.append(auxToken) - return soma(nums) def soma(lista): @@ -120,16 +122,18 @@ def soma(lista): return soma def simplifica(txt): - newToken = "" try: newToken = normalize('NFKD', txt.decode('utf-8')).encode('ASCII','ignore') except: newToken = normalize('NFKD', txt.decode('iso-8859-1')).encode('ASCII','ignore') - if(newToken[-3:] == "oes"): return newToken[:-3] + "ao" + if(newToken[-3:] == "oes"): + return newToken[:-3] + "ao" + return newToken +# Test ''' if __name__ == '__main__': n = sys.argv[1] diff --git a/src/new/TraduzSentencas.py b/src/new/TraduzSentencas.py index 6efdd2c..089cfda 100644 --- a/src/new/TraduzSentencas.py +++ b/src/new/TraduzSentencas.py @@ -10,42 +10,33 @@ import alexp from AplicaSinonimos import * from AplicaRegras import * -aplicaSinonimos = AplicaSinonimos() -aplicaRegras = AplicaRegras() - -def iniciarTraducao(texto): - textoDividido = texto.split(".") - textoTraduzido = [] - for w in textoDividido: - if len(w) > 0 and w != " ": - textoTraduzido.append(gerarAnalise(w)) +def iniciar_traducao(texto): + texto_quebrado = texto.split(".") + texto_traduzido = [] + for sentenca in texto_quebrado: + if len(sentenca) > 0 and sentenca != " ": + texto_traduzido.append(gerar_analise(sentenca)) try: - return " ".join(textoTraduzido) + return " ".join(texto_traduzido) except: return "" - -def gerarAnalise(sentenca): - '''tokens = alexp.toqueniza(sentenca) - etiquetadas = alexp.etiquetaSentenca(tokens) - analiseMorf = analiseMorfologica(etiquetadas) - print analiseMorf''' - - sintatica = alexp.run(sentenca) - morfologica = alexp.getAnaliseMorfologica() - - if (isinstance(sintatica,type(None))): - return analiseMorfologica(morfologica) +def gerar_analise(sentenca): + sinonimos = AplicaSinonimos() + regras = AplicaRegras() + analise = None + + try: + analise = alexp.run(sentenca) + except ValueError: + # TODO: Permitir acentos na sentença + analise = None + + if (isinstance(analise,type(None))): + morfologica = alexp.getAnaliseMorfologica() + analise = regras.aplicar_regras_morfo(morfologica) else: - print analiseSintatica(sintatica, morfologica) - - -def analiseMorfologica(listaMorfologica): - proc = aplicaRegras.aplicarRegrasMorfo(listaMorfologica) - return aplicaSinonimos.sinonimosMorfologico(proc) + analise = regras.aplicar_regras_sint(arvoreSintatica) - -def analiseSintatica(arvoreSintatica, listaMorfologica): - proc = aplicaRegras.aplicarRegrasSint(arvoreSintatica, listaMorfologica) - return aplicaSinonimos.sinonimosSintatico(proc) \ No newline at end of file + return sinonimos.aplicar_sinonimos(analise) \ No newline at end of file -- libgit2 0.21.2