Commit 7131db790b96008978183dceb0d3004c282035c5

Authored by Erickson Silva
1 parent 622366b7
Exists in master and in 1 other branch devel

Adiciona logging na análise sintática para obter feedback para futuras correções

data/regras.xml
... ... @@ -267,6 +267,15 @@
267 267 <action>remove</action>
268 268 </class>
269 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 279 <rule name = "VB-P"><!-- tempo verbal - presente com AdvP(t) -->
271 280 <active>true</active>
272 281 <count>1</count>
... ... @@ -391,14 +400,14 @@
391 400 </rule>
392 401 </morphological>
393 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 404 <active>true</active>
396 405 <count>2</count>
397 406 <class>
398 407 <action>invert</action>
399 408 </class>
400 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 411 <active>true</active>
403 412 <count>2</count>
404 413 <class>
... ...
src/new/TraduzSentencas.py
... ... @@ -10,6 +10,7 @@ from threading import Thread
10 10 import alexp
11 11 from AplicaSinonimos import *
12 12 from AplicaRegras import *
  13 +import logging
13 14  
14 15 class TraduzSentencas(Thread):
15 16  
... ... @@ -19,20 +20,33 @@ class TraduzSentencas(Thread):
19 20 self.glosa = ""
20 21 self.aplic_sinonimos = AplicaSinonimos()
21 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 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 35 analise_morfologica = alexp.getAnaliseMorfologica()
26   -
  36 +
27 37 if (isinstance(analise_sintatica,type(None))):
  38 + print "# ANÁLISE MORFÓLIGCA"
28 39 regras_aplicadas = self.aplic_regras.aplicar_regras_morfo(analise_morfologica)
29 40 else:
  41 + print "# ANÁLISE SINTÁTICA"
30 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 46 self.glosa = sinonimos_aplicados.encode('utf-8')
36 47  
37 48 def obter_glosa(self):
38   - return self.glosa
39 49 \ No newline at end of file
  50 + return self.glosa
  51 +
  52 + def salvar_log(self, erro):
  53 + logging.error(erro)
40 54 \ No newline at end of file
... ...
src/new/alexp.py
... ... @@ -29,6 +29,7 @@
29 29 """
30 30 import re,nltk,platform, time, random
31 31 from os.path import expanduser
  32 +from os import environ
32 33 from Aelius.Extras import carrega
33 34 from Aelius import AnotaCorpus
34 35 from unicodedata import normalize
... ... @@ -51,11 +52,10 @@ def etiquetaSentenca(s):
51 52 """
52 53 etiquetador = carrega("AeliusHunPos")
53 54 anotada = AnotaCorpus.anota_sentencas([s],etiquetador,"hunpos")[0]
54   - while (len(anotada) is 0):
  55 + while (anotada[0][1] is None):
55 56 time.sleep(random.choice(sleep_times))
56 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 60 def geraEntradasLexicais(lista):
61 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 83 """
84 84 so = platform.system()
85 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 87 else:
88 88 return expanduser("~") + "/vlibras-translate/data/cfg.syn.nltk"
89 89  
... ...