def testar(self, arquivosConsulta, dictPerfilAutor, dirBasePreparada, extensaoPadrao): # Informacoes do experimento numExperimentos = 0 numAcertos = 0 autorAnterior = "" for arquivoConsulta in arquivosConsulta: autorVerdadeiro = Util.getNomeAutor(arquivoConsulta) # Se (comConsultaRetirada = True), retira o arquivo-consulta da base para nao constar na comparacao if (self.comConsultaRetirada): if (autorAnterior != "" and autorAnterior != autorVerdadeiro): # Reindexa todos os codigos do autor anterior arquivosParaIndexar = glob.glob(os.path.join(dirBasePreparada, autorAnterior + "*" + extensaoPadrao)) vocabularioAutorAnteriorIndexado = self.indexador.indexarArquivos(arquivosParaIndexar) vocabularioAutorAnteriorIndexado = dict(vocabularioAutorAnteriorIndexado[autorAnterior]) dictPerfilAutor[autorAnterior] = vocabularioAutorAnteriorIndexado # Reindexa os codigo deste autor (sem o arquivoParaRetirar) arquivosParaIndexar = glob.glob(os.path.join(dirBasePreparada, autorVerdadeiro + "*" + extensaoPadrao)) arquivoParaRetirar = Util.getNomeArquivo(arquivoConsulta) arquivoParaRetirar = dirBasePreparada[0:len(dirBasePreparada)-1] + "\\" + arquivoParaRetirar + extensaoPadrao vocabularioAutorIndexado = self.indexador.indexarArquivosSemArquivoEspecifico(arquivosParaIndexar, arquivoParaRetirar) vocabularioAutorIndexado = dict(vocabularioAutorIndexado[autorVerdadeiro]) dictPerfilAutor[autorVerdadeiro] = vocabularioAutorIndexado # Verifica a presenca de termos com 1 ocorrencia na base indexada #for autor, ngramsIndexado in dictPerfilAutor.iteritems(): # for ngrams, frequencia in ngramsIndexado.iteritems(): # if (frequencia == 1): # print "igual a 1" # print autor # print ngrams, " : " , frequencia # Faz a consulta/comparacao e sugere quem e o autor do arquivo autorScap = self.buscador.compararComTodosDaBase(arquivoConsulta, dictPerfilAutor) autorAnterior = autorVerdadeiro numExperimentos += 1 if (autorVerdadeiro == autorScap): numAcertos += 1 acuracia = numAcertos/float(numExperimentos) #self.imprimirResultado(arquivoConsulta, autorVerdadeiro, autorScap, numExperimentos, numAcertos, acuracia) # if para imprimir somente o ultimo resultado, ou seja, a acuracia total do algoritmo if (numExperimentos == len(arquivosConsulta)): self.imprimirResultado(numExperimentos, numAcertos, acuracia) return self.guardarResultado(numExperimentos, numAcertos, acuracia)
def recuperarNGramsPorAutor(self, arquivosNGrams): autor = "" # Com defaultdict(list), dictNGramsPorAutor[autor] = [] # O defaultdict() inicia o valor do dict com uma lista vazia dictNGramsPorAutor = defaultdict(list) # {"autor", "listNGramsAutor"} #print "N-grams recuperados dos arquivos..." for arquivo in arquivosNGrams: #print arquivo autor = Util.getNomeAutor(arquivo) # Recupera os n-grams do arquivo e atualiza o dicionario de autores dictNGramsPorAutor[autor].append(self.recuperarNGrams(arquivo)) # Transforma a lista de n-grams numa string unica for autor, listNGramsAutor in dictNGramsPorAutor.iteritems(): dictNGramsPorAutor.update({autor : "".join(listNGramsAutor)}) return dictNGramsPorAutor