PortGlosa.py
2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/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