Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
 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