#!/usr/bin/python # -*- coding: utf-8 -*- #Autor: Erickson Silva #Email: #LAViD - Laboratório de Aplicações de Vídeo Digital from ClassificaSentencas import * from AplicaRegras import * from AplicaSinonimos import * import subprocess, re, string, sys class TraduzSentencas(object): '''Realiza a tradução do texto em português para glosa ''' def __init__(self): '''Instancia os aplicadores de regras e sinônimos. ''' self.classificador = ClassificaSentencas() self.aplic_regras = AplicaRegras() self.aplic_sin = AplicaSinonimos() def iniciar_traducao(self, sentenca, taxa=False): '''Metódo responsável por executar todos componentes necessários para a geração da glosa. ''' try: has_sintatica = True analise_sintatica = self.classificador.iniciar_classificacao(sentenca) except Exception as ex: analise_sintatica = None has_sintatica = False analise_morfologica = self.classificador.obter_classificacao_morfologica() if (isinstance(analise_sintatica,type(None))): regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica) else: try: regras_aplicadas = self.aplic_regras.aplicar_regras_sint(analise_morfologica, analise_sintatica) except: regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica) sentenca_corrigida = self.aplic_regras.simplificar_sentenca(regras_aplicadas) #glosa = " ".join([x[0] for x in sentenca_corrigida]) if sentenca_corrigida: texto_com_sinonimos = self.aplic_sin.aplicar_sinonimos(sentenca_corrigida) if taxa: taxa_qualidade = self.gerar_metrica_qualidade(texto_com_sinonimos) return {'glosa':texto_com_sinonimos.upper().encode('utf-8'), 'taxa':taxa_qualidade, 'sintatica':has_sintatica} return texto_com_sinonimos.upper().encode('utf-8') return "TEXTO ERRADO ESCOLHER OUTRO" def gerar_metrica_qualidade(self, lista): #TODO: resolver path do arquivo arqSinais = open("sinais.txt", "r").read().split() quantSinaisTotal = len(lista) quantSinaisEncontradas = 0 for x in lista: if x[0].upper()+".anim" in arqSinais: quantSinaisEncontradas += 1 else: if x[1] == "NPR": quantSinaisTotal-=1 return float(quantSinaisEncontradas)/quantSinaisTotal