#!/usr/bin/python # -*- coding: utf-8 -*- #Autor: Erickson Silva #Email: #LAViD - Laboratório de Aplicações de Vídeo Digital import os import csv import sys from nltk.tree import Tree from LerDicionarios import * from os.path import expanduser from os import environ, path class AplicaSinonimos(object): '''Aplica sinonimos após aplicação de regras morfológicas/sintática ''' def __init__(self): self.dicionarios = LerDicionarios() self.ordinais = {u'8\xaa': u'oitava', u'3\xba': u'terceiro', u'9\xaa': u'nona', u'5\xba': u'quinto', u'6\xaa': u'sexta', u'1\xba': u'primeiro', u'7\xaa': u's\xe9tima', u'2\xba': u'segundo', u'8\xba': u'oitavo', u'3\xaa': u'terceira', u'9\xba': u'nono', u'5\xaa': u'quinta', u'6\xba': u'sexto', u'1\xaa': u'primeira', u'7\xba': u's\xe9timo', u'2\xaa': u'segunda'} # Itera sobre os tokens obtendo os sinonimos def aplicar_sinonimos(self, lista_anotada): '''Percorre a lista fazendo a substituição pelos sinonimos. ''' lista_corrigida = [] for tupla in lista_anotada: sinonimo = self.verificar_sinonimo(tupla[0].upper()) if tupla[1] == "NUM" or tupla[1] == "NUM-R": if self.verificar_ordinal(sinonimo): ordinal = self.get_ordinal_extenso(sinonimo) lista_corrigida.append(ordinal) continue else: cardinal = self.converter_ordinal_para_cardinal(sinonimo) lista_corrigida.append(cardinal) continue lista_corrigida.append(sinonimo) return self.verificar_palavra_composta(lista_corrigida) # Verifica se há sinonimo do token def verificar_sinonimo(self, token): '''Verifica se há sinonimo do token. ''' if self.dicionarios.has_sinonimo(token): return self.dicionarios.get_sinonimo(token) return token def verificar_palavra_composta(self, lista): palavras_compostas = self.carregar_palavras_compostas() try: sentenca_corrigida = "_".join(lista).upper() except: sentenca_corrigida = "_".join([str(x[0]) for x in lista]).upper() for p in palavras_compostas: if p in sentenca_corrigida: sentenca_corrigida = sentenca_corrigida.replace(p, p.replace("_", "#*#")) return sentenca_corrigida.replace("_", " ").replace("#*#", "_") def carregar_palavras_compostas(self): path = self.localizar_arquivo_palavras_compostas() return set(open(path).read().decode('utf-8').split()) def localizar_arquivo_palavras_compostas(self): if "TRANSLATE_DATA" in environ: return path.join(environ.get("TRANSLATE_DATA"), "palavras_compostas.csv") return expanduser("~")+'/vlibras-translate/data/palavras_compostas.csv' def get_ordinal_extenso(self, token): return self.ordinais[token] def verificar_ordinal(self, token): return self.ordinais.has_key(token) def converter_ordinal_para_cardinal(self, token): return token.replace("ª".decode('utf-8'), "").replace("º".decode('utf-8'), "")