AplicadorRegras.py 2.01 KB
#!/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