AplicadorRegras.py
2.01 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
#!/usr/bin/python
# -*- coding: utf-8 -*-
#Autor: Erickson Silva <erickson.silva@lavid.ufpb.br> <ericksonsilva@live.com>
import xml.etree.ElementTree as ET
import os
class AplicadorRegras(object):
# inicializacao das variaves
def __init__(self):
self.__tree = ET.parse('vlibras_user/vlibras-core/data/regras.xml')
self.__root = self.__tree.getroot()
self.__tAux = []
self.__dAux = {}
# aplica as regras
def aplicarRegras(self, ts):
self.__n = len(ts) # quantidade de tokens
for i in range(0,self.__n):
self.__tAux.append(self.__n)
self.__name = self.getNameRule(ts) # todos os etiquetadores numa so string (ver linha 35)
for morpho in self.__root:
for rule in morpho.findall('rule'): # procura a tag rule
if rule.get('name') == self.__name: # procura o atributo name na tag rule (ver linha 17)
if rule.find('active').text == "true": # verifica se a regra esta ativa
self.__c = 0
for classe in rule.iter('class'): # for nas tags class
self.__dAux[self.__c] = int(classe.find('newpos').text) # preenche dicionario com a ordem atual e futura das palavras
self.__c += 1
self.__c = 0
for w,t in ts:
i = self.__dAux.get(self.__c) # pega o indice de onde ficara a palavra
self.__tAux[i] = ([w,t]) # preenche a lista com a palavra+etiqueta na posicao correta (segundo o arquivo regras.xml)
self.__c += 1
return self.__tAux # retorna nova lista (ordenada)
return ts # retorna a lista sem alteracoes (nao existe regra)
def getNameRule(self, ts):
self.__name = ""
for w,t in ts:
if t[:2] != "VB":
self.__name += t
else:
self.__name += t[:2]
return self.__name