#!/usr/bin/python # -*- coding: utf-8 -*- #Autor: Erickson Silva #Email: #LAViD - Laboratório de Aplicações de Vídeo Digital from os.path import expanduser from os import environ import csv import platform class Singleton(object): ''' Permite a criação de apenas uma instância da classe ''' def __new__(cls, *args, **kwargs): if '_inst' not in vars(cls): cls._inst = object.__new__(cls, *args, **kwargs) return cls._inst class LerDicionarios(Singleton): '''Carrega todos os arquivos (dicionários) necessários para auxiliar durante o processo de tradução. ''' def __init__(self): self.path = self.get_path() self.set_exc_plural = [] self.dic_adv_intensidade = {} self.set_adv_tempo = [] self.set_art = [] self.set_prep = [] self.dic_sin = {} self.set_sb_2_gen = [] self.set_pron_trat = [] self.dic_vb_infinitivo = {} self.set_vb_ligacao = [] self.dic_vb_muda_negacao = [] self.file = '' self.carregar_dicionarios() def get_path(self): '''Verifica qual o SO e gera o path de onde se encontra o diretório data. ''' if platform.system() == 'Windows': return environ.get("HOMEDRIVE") + "\\vlibras-libs\\vlibras-translate\data\\" return expanduser("~") + "/vlibras-translate/data/" def carregar_dicionarios(self): '''Realiza a leitura dos arquivos e atribui à estruturas de dicionários e sets. ''' self.carregar_excecoes_plural() self.carregar_adverbios_intensidade() self.carregar_adverbios_tempo() self.carregar_artigos() self.carregar_preposicoes() self.carregar_sinonimos() self.carregar_subs_2_generos() self.carregar_pronomes_tratamento() self.carregar_verbos_infinitivo() self.carregar_verbos_ligacao() self.carregar_verbos_muda_negacao def carregar_excecoes_plural(self): '''Carrega arquivo de exceções de plural. ''' try: self.file = csv.reader(open(self.path+"excecoesPlural.csv")) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_excecoes_plural" rows = [] for row in self.file: rows.append(row[0].decode("utf-8")) self.set_exc_plural = set(rows) def carregar_adverbios_intensidade(self): '''Carrega arquivo de adverbios de intensidade. ''' try: self.file = csv.reader(open(self.path+"adverbiosIntensidade.csv"), delimiter=";") except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_adverbios_intensidade" for row in self.file: if row[1] != "": self.dic_adv_intensidade[row[0].decode("utf-8")] = row[1].decode("utf-8") def carregar_adverbios_tempo(self): '''Carrega arquivo de advérbios de tempo. ''' try: self.file = csv.reader(open(self.path+"adverbiosTempo.csv")) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_adverbios_tempo" rows = [] for row in self.file: rows.append(row[0].decode("utf-8")) self.set_adv_tempo = set(rows) def carregar_artigos(self): '''Carrega arquivo de artigos a serem removidos. ''' try: self.file = csv.reader(open(self.path+"artigos.csv")) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_artigos" rows = [] for row in self.file: rows.append(row[0].decode("utf-8")) self.set_art = set(rows) def carregar_preposicoes(self): '''Carrega arquivo de preposições a serem removidas. ''' try: self.file = csv.reader(open(self.path+"preposicoes.csv")) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_preposicoes" rows = [] for row in self.file: rows.append(row[0].decode("utf-8")) self.set_prep = set(rows) def carregar_sinonimos(self): '''Carrega arquivo de sinônimos. ''' try: self.file = csv.reader(open(self.path+"sinonimos.csv"), delimiter=";") except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_sinonimos" for row in self.file: if row[1] != "": try: self.dic_sin[row[0].decode("utf-8")] = row[1].decode("utf-8") except UnicodeDecodeError: self.dic_sin[row[0].decode('iso8859-1').encode('utf-8').decode('utf-8')] = row[1].decode('iso8859-1').encode('utf-8').decode('utf-8') def carregar_subs_2_generos(self): '''Carrega arquivo dos substantivos comuns de 2 generos. ''' try: self.file = csv.reader(open(self.path+"subs2Generos.csv")) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_subs_2_generos" rows = [] for row in self.file: rows.append(row[0].decode('iso8859-1').encode('utf-8').decode('utf-8')) self.set_sb_2_gen = set(rows) def carregar_verbos_infinitivo(self): '''Carrega arquivo de verbos no infinitivo. ''' try: self.file = csv.reader(open(self.path+"verbosInfinitivo.csv"), delimiter=";") except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_verbos_infinitivo" for row in self.file: if row[1] != "": try: self.dic_vb_infinitivo[row[0].decode("utf-8")] = row[1].decode("utf-8") except UnicodeDecodeError: self.dic_vb_infinitivo[row[0].decode('iso8859-1').encode('utf-8').decode('utf-8')] = row[1].decode('iso8859-1').encode('utf-8').decode('utf-8') def carregar_verbos_ligacao(self): '''Carrega arquivo de verbos de ligação. ''' try: self.file = csv.reader(open(self.path+"verbosLigacao.csv")) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_verbos_ligacao" rows = [] for row in self.file: rows.append(row[0].decode("utf-8")) self.set_vb_ligacao = set(rows) def carregar_pronomes_tratamento(self): '''Carrega arquivo de pronomes de tratamento. ''' try: self.file = csv.reader(open(self.path+"pronomesTratamento.csv")) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_pronomes_tratamento" rows = [] for row in self.file: rows.append(row[0].decode("utf-8")) self.set_pron_trat = set(rows) def carregar_verbos_muda_negacao(self): '''Carrega arquivo de verbos que mudam a negação. ''' try: self.file = csv.reader(open(self.path+"verbosMudaNegacao.csv"), delimiter=";") except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) print "carregar_verbos_muda_negacao" for row in self.file: if row[1] != "": self.dic_vb_muda_negacao[row[0].decode("utf-8")] = row[1].decode("utf-8") def has_excecao_plural(self, token): '''Verifica se o token recebido consta no arquivo de exceções de plural. ''' return token not in self.set_exc_plural def has_adverbio_intensidade(self, token): '''Verifica se o token recebido consta no arquivo de advérbios de intensidade. ''' return self.dic_adv_intensidade.has_key(token) def has_adverbio_tempo(self, token): '''Verifica se o token recebido consta no arquivo de advérbios de tempo. ''' return token in self.set_adv_tempo def has_artigo(self, token): '''Verifica se o token recebido consta no arquivo de artigos a serem removidos. ''' return token in self.set_art def has_preposicao(self, token): '''Verifica se o token recebido consta no arquivo de preposições a serem removidas. ''' return token in self.set_prep def has_sinonimo(self, token): '''Verifica se o token recebido consta no arquivo de sinonimos. ''' return self.dic_sin.has_key(token) def has_pron_tratam(self, token): '''Verifica se o token recebido consta no arquivo de pronomes de tratamento. ''' return token in self.set_pron_trat def has_subst_2_generos (self, token): '''Verifica se o token recebido consta no arquivo de substantivos comuns de 2 generos. ''' return token in self.set_sb_2_gen def has_verbo_infinitivo(self, token): '''Verifica se o token recebido consta no arquivo de verbos no infinitivo. ''' return self.dic_vb_infinitivo.has_key(token) def has_verbo_ligacao(self, token): '''Verifica se o token recebido consta no arquivo de verbos de ligação. ''' return token in self.set_vb_ligacao def has_verbo_muda_negacao(self, token): '''Verifica se o token recebido consta no arquivo de verbos que mudam de negação. ''' return self.dic_vb_muda_negacao.has_key(token) def get_adverbio_intensidade(self, token): '''Verifica se o token recebido consta no arquivo de advérbios de intensidade. ''' return self.dic_adv_intensidade[token] def get_sinonimo(self, token): '''Obtém o sinônimo do token. ''' return self.dic_sin[token] def get_verbo_infinitivo(self, token): '''Obtém o verbo no infinitivo do token. ''' return self.dic_vb_infinitivo[token] def get_verbo_muda_negacao(self, token): '''Obtém o verbo que muda a negação do token. ''' return self.dic_vb_muda_negacao[token]