#!/usr/bin/python # -*- coding: utf-8 -*- #Autor: Erickson Silva 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