PortGlosa.py
3.04 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
#!/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, inspect
from ThreadTradutor import *
from LerDicionarios import *
taxas = []
dicionario = LerDicionarios()
try:
classe_pai = inspect.getframeinfo(inspect.getouterframes(inspect.currentframe())[1][0])[0]
if classe_pai == "TranslationServer.py":
dicionario.carregar_dicionarios()
except:
pass
def traduzir(texto, threads=False, taxa_qualidade=False):
if texto.isspace() or texto == "":
return "ESCOLHER TEXTO CERTO"
elif threads:
return iniciar_com_threads(texto, taxa_qualidade)
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:
thread_tradutor = ThreadTradutor(texto,taxa_qualidade)
thread_tradutor.start()
thread_tradutor.join()
saidas.append(thread_tradutor.obter_glosa())
if taxa_qualidade:
return gerar_taxa_qualidade(saidas)
return " ".join(saidas)
def quebrar_texto(texto):
global dicionario
if '.' not in texto:
return [texto]
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(verificar_texto_maiusculo(sentenca))
lista_texto = []
continue
if lista_texto:
sentencas.append(verificar_texto_maiusculo(" ".join(lista_texto)))
return sentencas
def verificar_texto_maiusculo(texto):
if texto.isupper:
texto_lower = texto.lower()
return texto_lower.capitalize()
return texto
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))}
if __name__ == '__main__':
texto = sys.argv[1]
glosa = traduzir(texto)
print glosa