diff --git a/src/AplicaRegras.py b/src/AplicaRegras.py index 87b5228..09340ae 100644 --- a/src/AplicaRegras.py +++ b/src/AplicaRegras.py @@ -256,7 +256,8 @@ class AplicaRegras(object): for i in range(0, len(morfo)): if morfo[i] is not None and morfo[i][1] == "NTK": new_node = self.gerar_no(morfo[i]) - arvore[lista_pos_arv[i-1][:-2]].insert(2, new_node) + arvore[lista_pos_arv[i-1][:-3]].insert(2, new_node) + #arvore[lista_pos_arv[i-1][:-2]].insert(2, new_node) try: lista_pos_arv.insert(i,lista_pos_arv[i]) except: @@ -278,6 +279,8 @@ class AplicaRegras(object): elif arv_ticket != morfo[i][1]: arvore[lista_pos_arv[i]].set_label(morfo[i][1]) + draw.draw_trees(arvore) + # Converte árvore sintática para uma lista de tuplas (igual a lista morfológica) def converter_arv_para_lista(self, arvore): folhas = filter(None, arvore.leaves()) @@ -365,7 +368,6 @@ class AplicaRegras(object): def get_token_intensidade(self, token): print 'TODO' - # Simplifica a sentença para que possa evitar a ditalogia def simplificar_sentenca(self, lista): lista_simplificada = list(lista) diff --git a/src/AplicaSinonimos.py b/src/AplicaSinonimos.py index f2f1030..658f697 100644 --- a/src/AplicaSinonimos.py +++ b/src/AplicaSinonimos.py @@ -24,7 +24,10 @@ class AplicaSinonimos(object): for tupla in lista_anotada: sinonimo = self.verificar_sinonimo(tupla[0]) lista_corrigida.append(sinonimo) - return " ".join(lista_corrigida) + try: + return " ".join(lista_corrigida) + except: + return " ".join([str(x[0]) for x in lista_anotada]) # Verifica se há sinonimo do token def verificar_sinonimo(self, token): diff --git a/src/LerDicionarios.py b/src/LerDicionarios.py index 2e1ee96..8390d48 100644 --- a/src/LerDicionarios.py +++ b/src/LerDicionarios.py @@ -11,7 +11,14 @@ from os import environ import csv import platform -class LerDicionarios(object): +class Singleton(object): + + def __new__(cls, *args, **kwargs): + if '_inst' not in vars(cls): + cls._inst = object.__new__(cls, *args, **kwargs) + return cls._inst + +class LerDicionarios(Singleton): def __init__(self): self.path = self.get_path() @@ -26,7 +33,7 @@ class LerDicionarios(object): self.set_vb_ligacao = [] self.dic_vb_muda_negacao = [] self.file = '' - self.carregar_dicionarios() + self.carregar_dicionarios() def get_path(self): if platform.system() == 'Windows': diff --git a/src/PortGlosa.py b/src/PortGlosa.py index 3826124..f96d0bb 100644 --- a/src/PortGlosa.py +++ b/src/PortGlosa.py @@ -6,27 +6,31 @@ #LAViD - Laboratório de Aplicações de Vídeo Digital +from ThreadTradutor import * from TraduzSentencas import * -def traduzir(texto): + +tradutor = TraduzSentencas() + +def traduzir(texto, threads=False): if texto.isspace() or texto == "": return "SELECIONE UM TEXTO" - glosa = iniciar_traducao(texto) - - if glosa: - return glosa - return "HOUVE UM ERRO. TENTE NOVAMENTE" + elif threads: + return iniciar_com_threads(texto) + + else: + return iniciar_sem_threads(texto) -def iniciar_traducao(texto): - '''texto_quebrado = quebrar_texto(texto) +def iniciar_com_threads(texto): + texto_quebrado = quebrar_texto(texto) num_threads = len(texto_quebrado) texto_traduzido = [] threads = [] for i in range(num_threads): if texto_quebrado[i] > 0 and texto_quebrado[i] != " ": - threads.insert(i, TraduzSentencas(texto_quebrado[i])) + threads.insert(i, ThreadTradutor(texto_quebrado[i])) threads[i].start() for i in range(num_threads): threads[i].join() @@ -36,13 +40,9 @@ def iniciar_traducao(texto): return " ".join(texto_traduzido) except: return None - ''' - ts = TraduzSentencas(texto) - try: - return ts.run() - except: - return None +def iniciar_sem_threads(texto): + return tradutor.iniciar_traducao(texto) def quebrar_texto(texto): quantidade_pontos = texto.count('. ') diff --git a/src/ThreadTradutor.py b/src/ThreadTradutor.py new file mode 100644 index 0000000..296d8f0 --- /dev/null +++ b/src/ThreadTradutor.py @@ -0,0 +1,24 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +#Autor: Erickson Silva +#Email: + +#LAViD - Laboratório de Aplicações de Vídeo Digital + +from TraduzSentencas import * +from threading import Thread + +class ThreadTradutor(Thread): + + def __init__(self, sentenca): + Thread.__init__(self) + self.sentenca = sentenca + self.glosa = "" + self.tradutor = TraduzSentencas() + + def run(self): + self.glosa = self.tradutor.iniciar_traducao(self.sentenca) + + def obter_glosa(self): + return self.glosa \ No newline at end of file diff --git a/src/TraduzSentencas.py b/src/TraduzSentencas.py index 1104cf4..df3c964 100644 --- a/src/TraduzSentencas.py +++ b/src/TraduzSentencas.py @@ -6,30 +6,24 @@ #LAViD - Laboratório de Aplicações de Vídeo Digital -from threading import Thread import alexp from AplicaSinonimos import * from AplicaRegras import * import logging import traceback -class TraduzSentencas(): -#class TraduzSentencas(Thread): - - def __init__(self, sentenca): - #Thread.__init__(self) - self.sentenca = sentenca - self.glosa = "" +class TraduzSentencas(object): + + def __init__(self): self.aplic_sinonimos = AplicaSinonimos() self.aplic_regras = AplicaRegras() logging.basicConfig(filename='translate.log', format='%(asctime)s - %(levelname)s:\n\n%(message)s\n\n\n##############################################\n\n', level=logging.ERROR) - - def run(self): + def iniciar_traducao(self, sentenca): try: - analise_sintatica = alexp.run(self.sentenca) + analise_sintatica = alexp.run(sentenca) except Exception as ex: self.salvar_log(str(traceback.format_exc())) analise_sintatica = None @@ -45,11 +39,11 @@ class TraduzSentencas(): sentenca_corrigida = self.aplic_regras.simplificar_sentenca(regras_aplicadas) sinonimos_aplicados = self.aplic_sinonimos.aplicar_sinonimos(sentenca_corrigida) - self.glosa = sinonimos_aplicados.upper().encode('utf-8') - return self.glosa - def obter_glosa(self): - return self.glosa + if sinonimos_aplicados: + return sinonimos_aplicados.upper().encode('utf-8') + return "HOUVE UM ERRO. TENTE NOVAMENTE" def salvar_log(self, erro): - logging.error(erro) \ No newline at end of file + logging.error(erro) + \ No newline at end of file -- libgit2 0.21.2