Commit 75ecc2bb8f1d4f022c5ec022d184e27097ce0172

Authored by Erickson Silva
1 parent 6022aeba
Exists in master and in 1 other branch devel

Corrige AplicaSinonimos, TraduzSentencas e ConverteExtenso

src/new/AplicaSinonimos.py
... ... @@ -32,6 +32,6 @@ class AplicaSinonimos(object):
32 32  
33 33 # Verifica se há sinonimo do token
34 34 def verificar_sinonimo(self, token):
35   - if self.dicionarios.hasSinonimo(token):
36   - return self.dicionarios.getSinonimo(token)
  35 + if self.dicionarios.has_sinonimo(token):
  36 + return self.dicionarios.get_sinonimo(token)
37 37 return token
38 38 \ No newline at end of file
... ...
src/new/ConverteExtenso.py
... ... @@ -13,8 +13,6 @@ from Iterator import *
13 13 num = {"zero":0, "um":1, "dois":2, "tres":3, "quatro":4, "cinco":5, "seis":6,
14 14 "sete":7, "oito":8, "nove":9}
15 15  
16   -und = {"mil":1000, "milhao":1000000, "bilhao":1000000000, "trilhao":1000000000000}
17   -
18 16 ext = [{"um":"1", "dois":"2", "tres":"3", "quatro":"4", "cinco":"5", "seis":"6",
19 17 "sete":"7", "oito":"8", "nove":"9", "dez":"10", "onze":"11", "doze":"12",
20 18 "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",
24 22 "quatrocentos":"4", "quinhentos":"5", "seissentos":"6", "setessentos":"7",
25 23 "oitocentos":"8", "novecentos":"9"}]
26 24  
  25 +und = {"mil":1000, "milhao":1000000, "bilhao":1000000000, "trilhao":1000000000000}
27 26 unds = {"mil":"000", "milhao":"000000","milhoes":"000000", "bilhao":"000000000","bilhoes":"000000000", "trilhao":"000000000000", "trilhoes":"000000000000"}
28 27  
29 28  
... ... @@ -40,7 +39,8 @@ def twoDigit(x):
40 39 def threeDigit(x):
41 40 return ext[2][x[0]]+ext[1][x[1]]+ext[0][x[2]]
42 41  
43   -def extenso2(n):
  42 +# Não faço mais a minima idéia de como fiz isso, só sei que funciona!
  43 +def extensoUnit(n):
44 44 sn = n.split(",")
45 45 size = len(sn)
46 46 firstWord = sn[0]
... ... @@ -76,41 +76,43 @@ def extenso2(n):
76 76  
77 77 return numExt
78 78  
  79 +
  80 +'''
  81 +Comece com uma lista vazia. Itere pelas palavras da string da esquerda
  82 +para direita. Ao encontrar um numeral, adicione o número à lista se a
  83 +última palavra foi uma escala, ou some ao último numero da lista se a
  84 +última palavra foi um numeral. Ao encontrar uma escala, multiplique o
  85 +último número da lista de acordo. Quando terminar, some tudo e retorne
  86 +o resultado.
  87 +'''
  88 +
  89 +# TODO: Refatorar para nao usar mais o extensoUnit
79 90 def extenso(extenso):
80 91 global newToken, auxToken
81 92 extensoQuebrado = extenso.lower().split(" ")
82 93 nums = []
83 94 it = Iterator()
84 95 it.load(extensoQuebrado)
85   - while(it.hasNext()):
86   - token = simplifica(it.getToken())
87   - tokenAnterior = simplifica(it.getToken(-1))
  96 + while(it.has_next()):
  97 + token = simplifica(it.get_token())
  98 + tokenAnterior = simplifica(it.get_token(-1))
88 99 if (und.has_key(token)):
89   - #print "cond1"
90   - if(it.getCount() == 0):
91   - #print "cond2"
  100 + if(it.get_count() == 0):
92 101 nums.append(und[token])
93 102 else:
94   - #print "cond3"
95 103 newToken = und[token] * int(nums[-1])
96 104 nums[-1] = newToken
97 105 else:
98   - #print "cond4"
99 106 if (num.has_key(token)):
100   - #print "cond5"
101 107 auxToken = num[token]
102 108 elif (not und.has_key(token)):
103   - #print "cond6"
104   - auxToken = extenso2(token)
  109 + auxToken = extensoUnit(token)
105 110  
106   - if((not und.has_key(tokenAnterior)) and it.getCount() > 0):
107   - #print "cond7"
  111 + if((not und.has_key(tokenAnterior)) and it.get_count() > 0):
108 112 newToken = int(auxToken) + int(nums[-1])
109 113 nums[-1] = newToken
110 114 else:
111   - #print "cond8"
112 115 nums.append(auxToken)
113   -
114 116 return soma(nums)
115 117  
116 118 def soma(lista):
... ... @@ -120,16 +122,18 @@ def soma(lista):
120 122 return soma
121 123  
122 124 def simplifica(txt):
123   -
124 125 newToken = ""
125 126 try:
126 127 newToken = normalize('NFKD', txt.decode('utf-8')).encode('ASCII','ignore')
127 128 except:
128 129 newToken = normalize('NFKD', txt.decode('iso-8859-1')).encode('ASCII','ignore')
129 130  
130   - if(newToken[-3:] == "oes"): return newToken[:-3] + "ao"
  131 + if(newToken[-3:] == "oes"):
  132 + return newToken[:-3] + "ao"
  133 +
131 134 return newToken
132 135  
  136 +# Test
133 137 '''
134 138 if __name__ == '__main__':
135 139 n = sys.argv[1]
... ...
src/new/TraduzSentencas.py
... ... @@ -10,42 +10,33 @@ import alexp
10 10 from AplicaSinonimos import *
11 11 from AplicaRegras import *
12 12  
13   -aplicaSinonimos = AplicaSinonimos()
14   -aplicaRegras = AplicaRegras()
15 13  
16   -
17   -def iniciarTraducao(texto):
18   - textoDividido = texto.split(".")
19   - textoTraduzido = []
20   - for w in textoDividido:
21   - if len(w) > 0 and w != " ":
22   - textoTraduzido.append(gerarAnalise(w))
  14 +def iniciar_traducao(texto):
  15 + texto_quebrado = texto.split(".")
  16 + texto_traduzido = []
  17 + for sentenca in texto_quebrado:
  18 + if len(sentenca) > 0 and sentenca != " ":
  19 + texto_traduzido.append(gerar_analise(sentenca))
23 20 try:
24   - return " ".join(textoTraduzido)
  21 + return " ".join(texto_traduzido)
25 22 except:
26 23 return ""
27 24  
28   -
29   -def gerarAnalise(sentenca):
30   - '''tokens = alexp.toqueniza(sentenca)
31   - etiquetadas = alexp.etiquetaSentenca(tokens)
32   - analiseMorf = analiseMorfologica(etiquetadas)
33   - print analiseMorf'''
34   -
35   - sintatica = alexp.run(sentenca)
36   - morfologica = alexp.getAnaliseMorfologica()
37   -
38   - if (isinstance(sintatica,type(None))):
39   - return analiseMorfologica(morfologica)
  25 +def gerar_analise(sentenca):
  26 + sinonimos = AplicaSinonimos()
  27 + regras = AplicaRegras()
  28 + analise = None
  29 +
  30 + try:
  31 + analise = alexp.run(sentenca)
  32 + except ValueError:
  33 + # TODO: Permitir acentos na sentença
  34 + analise = None
  35 +
  36 + if (isinstance(analise,type(None))):
  37 + morfologica = alexp.getAnaliseMorfologica()
  38 + analise = regras.aplicar_regras_morfo(morfologica)
40 39 else:
41   - print analiseSintatica(sintatica, morfologica)
42   -
43   -
44   -def analiseMorfologica(listaMorfologica):
45   - proc = aplicaRegras.aplicarRegrasMorfo(listaMorfologica)
46   - return aplicaSinonimos.sinonimosMorfologico(proc)
  40 + analise = regras.aplicar_regras_sint(arvoreSintatica)
47 41  
48   -
49   -def analiseSintatica(arvoreSintatica, listaMorfologica):
50   - proc = aplicaRegras.aplicarRegrasSint(arvoreSintatica, listaMorfologica)
51   - return aplicaSinonimos.sinonimosSintatico(proc)
52 42 \ No newline at end of file
  43 + return sinonimos.aplicar_sinonimos(analise)
53 44 \ No newline at end of file
... ...