Commit bbe566e56897960625b5c57e210eeddef7137d62

Authored by Erickson Silva
1 parent 5ddbd724
Exists in master and in 1 other branch devel

Implementa tradutor sem threads como default e com threads sendo opcional

src/AplicaRegras.py
... ... @@ -256,7 +256,8 @@ class AplicaRegras(object):
256 256 for i in range(0, len(morfo)):
257 257 if morfo[i] is not None and morfo[i][1] == "NTK":
258 258 new_node = self.gerar_no(morfo[i])
259   - arvore[lista_pos_arv[i-1][:-2]].insert(2, new_node)
  259 + arvore[lista_pos_arv[i-1][:-3]].insert(2, new_node)
  260 + #arvore[lista_pos_arv[i-1][:-2]].insert(2, new_node)
260 261 try:
261 262 lista_pos_arv.insert(i,lista_pos_arv[i])
262 263 except:
... ... @@ -278,6 +279,8 @@ class AplicaRegras(object):
278 279 elif arv_ticket != morfo[i][1]:
279 280 arvore[lista_pos_arv[i]].set_label(morfo[i][1])
280 281  
  282 + draw.draw_trees(arvore)
  283 +
281 284 # Converte árvore sintática para uma lista de tuplas (igual a lista morfológica)
282 285 def converter_arv_para_lista(self, arvore):
283 286 folhas = filter(None, arvore.leaves())
... ... @@ -365,7 +368,6 @@ class AplicaRegras(object):
365 368 def get_token_intensidade(self, token):
366 369 print 'TODO'
367 370  
368   -
369 371 # Simplifica a sentença para que possa evitar a ditalogia
370 372 def simplificar_sentenca(self, lista):
371 373 lista_simplificada = list(lista)
... ...
src/AplicaSinonimos.py
... ... @@ -24,7 +24,10 @@ class AplicaSinonimos(object):
24 24 for tupla in lista_anotada:
25 25 sinonimo = self.verificar_sinonimo(tupla[0])
26 26 lista_corrigida.append(sinonimo)
27   - return " ".join(lista_corrigida)
  27 + try:
  28 + return " ".join(lista_corrigida)
  29 + except:
  30 + return " ".join([str(x[0]) for x in lista_anotada])
28 31  
29 32 # Verifica se há sinonimo do token
30 33 def verificar_sinonimo(self, token):
... ...
src/LerDicionarios.py
... ... @@ -11,7 +11,14 @@ from os import environ
11 11 import csv
12 12 import platform
13 13  
14   -class LerDicionarios(object):
  14 +class Singleton(object):
  15 +
  16 + def __new__(cls, *args, **kwargs):
  17 + if '_inst' not in vars(cls):
  18 + cls._inst = object.__new__(cls, *args, **kwargs)
  19 + return cls._inst
  20 +
  21 +class LerDicionarios(Singleton):
15 22  
16 23 def __init__(self):
17 24 self.path = self.get_path()
... ... @@ -26,7 +33,7 @@ class LerDicionarios(object):
26 33 self.set_vb_ligacao = []
27 34 self.dic_vb_muda_negacao = []
28 35 self.file = ''
29   - self.carregar_dicionarios()
  36 + self.carregar_dicionarios()
30 37  
31 38 def get_path(self):
32 39 if platform.system() == 'Windows':
... ...
src/PortGlosa.py
... ... @@ -6,27 +6,31 @@
6 6  
7 7 #LAViD - Laboratório de Aplicações de Vídeo Digital
8 8  
  9 +from ThreadTradutor import *
9 10 from TraduzSentencas import *
10 11  
11   -def traduzir(texto):
  12 +
  13 +tradutor = TraduzSentencas()
  14 +
  15 +def traduzir(texto, threads=False):
12 16 if texto.isspace() or texto == "":
13 17 return "SELECIONE UM TEXTO"
14 18  
15   - glosa = iniciar_traducao(texto)
16   -
17   - if glosa:
18   - return glosa
19   - return "HOUVE UM ERRO. TENTE NOVAMENTE"
  19 + elif threads:
  20 + return iniciar_com_threads(texto)
  21 +
  22 + else:
  23 + return iniciar_sem_threads(texto)
20 24  
21   -def iniciar_traducao(texto):
22   - '''texto_quebrado = quebrar_texto(texto)
  25 +def iniciar_com_threads(texto):
  26 + texto_quebrado = quebrar_texto(texto)
23 27 num_threads = len(texto_quebrado)
24 28 texto_traduzido = []
25 29 threads = []
26 30  
27 31 for i in range(num_threads):
28 32 if texto_quebrado[i] > 0 and texto_quebrado[i] != " ":
29   - threads.insert(i, TraduzSentencas(texto_quebrado[i]))
  33 + threads.insert(i, ThreadTradutor(texto_quebrado[i]))
30 34 threads[i].start()
31 35 for i in range(num_threads):
32 36 threads[i].join()
... ... @@ -36,13 +40,9 @@ def iniciar_traducao(texto):
36 40 return " ".join(texto_traduzido)
37 41 except:
38 42 return None
39   - '''
40 43  
41   - ts = TraduzSentencas(texto)
42   - try:
43   - return ts.run()
44   - except:
45   - return None
  44 +def iniciar_sem_threads(texto):
  45 + return tradutor.iniciar_traducao(texto)
46 46  
47 47 def quebrar_texto(texto):
48 48 quantidade_pontos = texto.count('. ')
... ...
src/ThreadTradutor.py 0 → 100644
... ... @@ -0,0 +1,24 @@
  1 +#!/usr/bin/python
  2 +# -*- coding: utf-8 -*-
  3 +
  4 +#Autor: Erickson Silva
  5 +#Email: <erickson.silva@lavid.ufpb.br> <ericksonsilva@live.com>
  6 +
  7 +#LAViD - Laboratório de Aplicações de Vídeo Digital
  8 +
  9 +from TraduzSentencas import *
  10 +from threading import Thread
  11 +
  12 +class ThreadTradutor(Thread):
  13 +
  14 + def __init__(self, sentenca):
  15 + Thread.__init__(self)
  16 + self.sentenca = sentenca
  17 + self.glosa = ""
  18 + self.tradutor = TraduzSentencas()
  19 +
  20 + def run(self):
  21 + self.glosa = self.tradutor.iniciar_traducao(self.sentenca)
  22 +
  23 + def obter_glosa(self):
  24 + return self.glosa
0 25 \ No newline at end of file
... ...
src/TraduzSentencas.py
... ... @@ -6,30 +6,24 @@
6 6  
7 7 #LAViD - Laboratório de Aplicações de Vídeo Digital
8 8  
9   -from threading import Thread
10 9 import alexp
11 10 from AplicaSinonimos import *
12 11 from AplicaRegras import *
13 12 import logging
14 13 import traceback
15 14  
16   -class TraduzSentencas():
17   -#class TraduzSentencas(Thread):
18   -
19   - def __init__(self, sentenca):
20   - #Thread.__init__(self)
21   - self.sentenca = sentenca
22   - self.glosa = ""
  15 +class TraduzSentencas(object):
  16 +
  17 + def __init__(self):
23 18 self.aplic_sinonimos = AplicaSinonimos()
24 19 self.aplic_regras = AplicaRegras()
25 20 logging.basicConfig(filename='translate.log',
26 21 format='%(asctime)s - %(levelname)s:\n\n%(message)s\n\n\n##############################################\n\n',
27 22 level=logging.ERROR)
28 23  
29   -
30   - def run(self):
  24 + def iniciar_traducao(self, sentenca):
31 25 try:
32   - analise_sintatica = alexp.run(self.sentenca)
  26 + analise_sintatica = alexp.run(sentenca)
33 27 except Exception as ex:
34 28 self.salvar_log(str(traceback.format_exc()))
35 29 analise_sintatica = None
... ... @@ -45,11 +39,11 @@ class TraduzSentencas():
45 39  
46 40 sentenca_corrigida = self.aplic_regras.simplificar_sentenca(regras_aplicadas)
47 41 sinonimos_aplicados = self.aplic_sinonimos.aplicar_sinonimos(sentenca_corrigida)
48   - self.glosa = sinonimos_aplicados.upper().encode('utf-8')
49   - return self.glosa
50 42  
51   - def obter_glosa(self):
52   - return self.glosa
  43 + if sinonimos_aplicados:
  44 + return sinonimos_aplicados.upper().encode('utf-8')
  45 + return "HOUVE UM ERRO. TENTE NOVAMENTE"
53 46  
54 47 def salvar_log(self, erro):
55   - logging.error(erro)
56 48 \ No newline at end of file
  49 + logging.error(erro)
  50 +
57 51 \ No newline at end of file
... ...