Commit 7131db790b96008978183dceb0d3004c282035c5
1 parent
622366b7
Exists in
master
and in
1 other branch
Adiciona logging na análise sintática para obter feedback para futuras correções
Showing
3 changed files
with
35 additions
and
12 deletions
Show diff stats
data/regras.xml
@@ -267,6 +267,15 @@ | @@ -267,6 +267,15 @@ | ||
267 | <action>remove</action> | 267 | <action>remove</action> |
268 | </class> | 268 | </class> |
269 | </rule> | 269 | </rule> |
270 | + <rule name = "SR-P"><!-- tempo verbal - presente com AdvP(t) --> | ||
271 | + <active>true</active> | ||
272 | + <count>1</count> | ||
273 | + <class> | ||
274 | + <title>SR-P</title> | ||
275 | + <action>change_vb</action> | ||
276 | + <newprop>SR</newprop> | ||
277 | + </class> | ||
278 | + </rule> | ||
270 | <rule name = "VB-P"><!-- tempo verbal - presente com AdvP(t) --> | 279 | <rule name = "VB-P"><!-- tempo verbal - presente com AdvP(t) --> |
271 | <active>true</active> | 280 | <active>true</active> |
272 | <count>1</count> | 281 | <count>1</count> |
@@ -391,14 +400,14 @@ | @@ -391,14 +400,14 @@ | ||
391 | </rule> | 400 | </rule> |
392 | </morphological> | 401 | </morphological> |
393 | <syntactic> | 402 | <syntactic> |
394 | - <rule name = "S(NP_VP)"><!-- Ordem direta da sentença --> | 403 | + <rule name = "S(VP_NP)"><!-- Ordem direta da sentença --> |
395 | <active>true</active> | 404 | <active>true</active> |
396 | <count>2</count> | 405 | <count>2</count> |
397 | <class> | 406 | <class> |
398 | <action>invert</action> | 407 | <action>invert</action> |
399 | </class> | 408 | </class> |
400 | </rule> | 409 | </rule> |
401 | - <rule name = "SV(Vbar_AP)"><!-- Eliminar vebo de ligação --> | 410 | + <rule name = "VP(Vbar_AP)"><!-- Eliminar vebo de ligação --> |
402 | <active>true</active> | 411 | <active>true</active> |
403 | <count>2</count> | 412 | <count>2</count> |
404 | <class> | 413 | <class> |
src/new/TraduzSentencas.py
@@ -10,6 +10,7 @@ from threading import Thread | @@ -10,6 +10,7 @@ from threading import Thread | ||
10 | import alexp | 10 | import alexp |
11 | from AplicaSinonimos import * | 11 | from AplicaSinonimos import * |
12 | from AplicaRegras import * | 12 | from AplicaRegras import * |
13 | +import logging | ||
13 | 14 | ||
14 | class TraduzSentencas(Thread): | 15 | class TraduzSentencas(Thread): |
15 | 16 | ||
@@ -19,20 +20,33 @@ class TraduzSentencas(Thread): | @@ -19,20 +20,33 @@ class TraduzSentencas(Thread): | ||
19 | self.glosa = "" | 20 | self.glosa = "" |
20 | self.aplic_sinonimos = AplicaSinonimos() | 21 | self.aplic_sinonimos = AplicaSinonimos() |
21 | self.aplic_regras = AplicaRegras() | 22 | self.aplic_regras = AplicaRegras() |
23 | + logging.basicConfig(filename='translate.log', | ||
24 | + format='%(asctime)s - %(levelname)s:\n%(message)s\n\n\n##############################################\n\n', | ||
25 | + level=logging.ERROR) | ||
26 | + | ||
22 | 27 | ||
23 | def run(self): | 28 | def run(self): |
24 | - analise_sintatica = alexp.run(self.sentenca) | 29 | + try: |
30 | + analise_sintatica = alexp.run(self.sentenca) | ||
31 | + except Exception as ex: | ||
32 | + self.salvar_log(str(ex)) | ||
33 | + analise_sintatica = None | ||
34 | + | ||
25 | analise_morfologica = alexp.getAnaliseMorfologica() | 35 | analise_morfologica = alexp.getAnaliseMorfologica() |
26 | - | 36 | + |
27 | if (isinstance(analise_sintatica,type(None))): | 37 | if (isinstance(analise_sintatica,type(None))): |
38 | + print "# ANÁLISE MORFÓLIGCA" | ||
28 | regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica) | 39 | regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica) |
29 | else: | 40 | else: |
41 | + print "# ANÁLISE SINTÁTICA" | ||
30 | regras_aplicadas = self.aplic_regras.aplicar_regras_sint(analise_morfologica, analise_sintatica) | 42 | regras_aplicadas = self.aplic_regras.aplicar_regras_sint(analise_morfologica, analise_sintatica) |
31 | 43 | ||
32 | - # separar tokens quando tem um newtoken | ||
33 | - self.aplic_regras.separar_new_tokens(regras_aplicadas) | ||
34 | - sinonimos_aplicados = self.aplic_sinonimos.aplicar_sinonimos(regras_aplicadas) | 44 | + sentenca_corrigida = self.aplic_regras.simplificar_sentenca(regras_aplicadas) |
45 | + sinonimos_aplicados = self.aplic_sinonimos.aplicar_sinonimos(sentenca_corrigida) | ||
35 | self.glosa = sinonimos_aplicados.encode('utf-8') | 46 | self.glosa = sinonimos_aplicados.encode('utf-8') |
36 | 47 | ||
37 | def obter_glosa(self): | 48 | def obter_glosa(self): |
38 | - return self.glosa | ||
39 | \ No newline at end of file | 49 | \ No newline at end of file |
50 | + return self.glosa | ||
51 | + | ||
52 | + def salvar_log(self, erro): | ||
53 | + logging.error(erro) | ||
40 | \ No newline at end of file | 54 | \ No newline at end of file |
src/new/alexp.py
@@ -29,6 +29,7 @@ | @@ -29,6 +29,7 @@ | ||
29 | """ | 29 | """ |
30 | import re,nltk,platform, time, random | 30 | import re,nltk,platform, time, random |
31 | from os.path import expanduser | 31 | from os.path import expanduser |
32 | +from os import environ | ||
32 | from Aelius.Extras import carrega | 33 | from Aelius.Extras import carrega |
33 | from Aelius import AnotaCorpus | 34 | from Aelius import AnotaCorpus |
34 | from unicodedata import normalize | 35 | from unicodedata import normalize |
@@ -51,11 +52,10 @@ def etiquetaSentenca(s): | @@ -51,11 +52,10 @@ def etiquetaSentenca(s): | ||
51 | """ | 52 | """ |
52 | etiquetador = carrega("AeliusHunPos") | 53 | etiquetador = carrega("AeliusHunPos") |
53 | anotada = AnotaCorpus.anota_sentencas([s],etiquetador,"hunpos")[0] | 54 | anotada = AnotaCorpus.anota_sentencas([s],etiquetador,"hunpos")[0] |
54 | - while (len(anotada) is 0): | 55 | + while (anotada[0][1] is None): |
55 | time.sleep(random.choice(sleep_times)) | 56 | time.sleep(random.choice(sleep_times)) |
56 | anotada = AnotaCorpus.anota_sentencas([s],etiquetador,"hunpos")[0] | 57 | anotada = AnotaCorpus.anota_sentencas([s],etiquetador,"hunpos")[0] |
57 | - anotada[0] = (anotada[0][0].lower(), anotada[0][1]) | ||
58 | - return anotada | 58 | + return [[x[0].upper(), x[1]] for x in anotada] |
59 | 59 | ||
60 | def geraEntradasLexicais(lista): | 60 | def geraEntradasLexicais(lista): |
61 | """Gera entradas lexicais no formato CFG do NLTK a partir de lista de pares constituídos de tokens e suas etiquetas. | 61 | """Gera entradas lexicais no formato CFG do NLTK a partir de lista de pares constituídos de tokens e suas etiquetas. |
@@ -83,7 +83,7 @@ def encontraArquivo(): | @@ -83,7 +83,7 @@ def encontraArquivo(): | ||
83 | """ | 83 | """ |
84 | so = platform.system() | 84 | so = platform.system() |
85 | if so == 'Windows': | 85 | if so == 'Windows': |
86 | - return expanduser("~") + "\vlibras-translate\data\cfg.syn.nltk" | 86 | + return os.environ.get("HOMEDRIVE") + "\\vlibras-libs\vlibras-translate\data\cfg.syn.nltk" |
87 | else: | 87 | else: |
88 | return expanduser("~") + "/vlibras-translate/data/cfg.syn.nltk" | 88 | return expanduser("~") + "/vlibras-translate/data/cfg.syn.nltk" |
89 | 89 |