PortGlosa.py 2.92 KB
#!/usr/bin/python
# -*- coding: utf-8 -*-

#Autor: Erickson Silva 
#Email: <erickson.silva@lavid.ufpb.br> <ericksonsilva@live.com>

#LAViD - Laboratório de Aplicações de Vídeo Digital

import sys
from ThreadTradutor import *
from TraduzSentencas import *
from LerDicionarios import *

tradutor = TraduzSentencas()
taxas = []

def traduzir(texto, log=None, threads=False, taxa_qualidade=False):
	#tradutor.set_level(log) if log != None else tradutor.desativar_logging()
	if texto.isspace() or texto == "":
		#or not checar_idioma(texto):
		return "ESCOLHER TEXTO CERTO"

	#elif threads:
	#	return iniciar_com_threads(texto, taxa_qualidade)

	#else:
	return iniciar_sem_threads(texto, taxa_qualidade)
	
def iniciar_com_threads(texto, taxa_qualidade):
	texto_quebrado = quebrar_texto(texto)
	num_threads = len(texto_quebrado)
	saidas = []
	threads = []
	
	for i in range(num_threads):
		if texto_quebrado[i] > 0 and texto_quebrado[i] != " ":
			threads.insert(i, ThreadTradutor(texto_quebrado[i],taxa_qualidade))
			threads[i].start()
	for i in range(num_threads):
		threads[i].join()
		saidas.append(threads[i].obter_glosa())

	if taxa_qualidade:
		return gerar_taxa_qualidade(saidas)

	try:
		return " ".join(saidas)
	except:
		return None

def iniciar_sem_threads(texto, taxa_qualidade):
	texto_quebrado = quebrar_texto(texto)
	saidas = []
	for texto in texto_quebrado:
		saida = tradutor.iniciar_traducao(texto, taxa_qualidade)
		saidas.append(saida)
	if taxa_qualidade:
		return gerar_taxa_qualidade(saidas)
	return " ".join(saidas)
	
def quebrar_texto(texto):
	if '.' not in texto:
		return [texto]

	dicionario = LerDicionarios()
	texto_quebrado = texto.split()
	tamanho_texto_quebrado = len(texto_quebrado)
	sentencas = []
	lista_texto = []
	for i in range(tamanho_texto_quebrado):
		lista_texto.append(texto_quebrado[i])
		if '.' in texto_quebrado[i]:
			if not dicionario.has_pron_tratam(texto_quebrado[i].lower()) and i < tamanho_texto_quebrado-1 and texto_quebrado[i+1][0].isupper():
				sentenca = " ".join(lista_texto)
				if not sentenca[-1].isdigit():
					sentenca = sentenca[:-1]+"."
				sentencas.append(sentenca)
				lista_texto = []
				continue
	if lista_texto:
		sentencas.append(" ".join(lista_texto))
	return sentencas

def gerar_taxa_qualidade(lista_saidas):
	soma_taxas = 0
	quant_analise_sintatica = 0
	glosas = []
	for saida in lista_saidas:
		glosas.append(saida['glosa'])
		soma_taxas += saida['taxa']
		if saida['sintatica'] is True:
			quant_analise_sintatica += 1

	taxa_sintatica = (float(quant_analise_sintatica)/len(lista_saidas)) * 0.20
	taxa_sentenca = (float(soma_taxas)/len(lista_saidas)) * 0.80
	return {'glosa':" ".join(glosas), 'taxa_qualidade': float("%.2f" % (taxa_sintatica+taxa_sentenca))}

def checar_idioma(texto):
	try:
		texto.decode('cp1252')
	except:
		return False
	return True

def ajuda():
	#TODO: Adicionar um pequeno tuto aqui
	print "Help"

if __name__ == '__main__':
	texto = sys.argv[1]
	glosa = traduzir(texto)
	print glosa