def __init__(self): # Commands disponiveis. # Regras de negócio para processar os documentos. # Existe uma ordem correta de processamento das regras, # portanto a ordem das regras nessa lista é importante. # # No momento, notações como 'emoticon_feliz' e 'simbolo_monetario' # também são alterados pelo stemmer. # Processar 'DivideCamelCaseCommand' antes de 'ProcessaNegacaoCommand', # evita erros como 'NAO_JKRowling'. self.regras_negocio = [ CorrigeAbreviacaoContracaoCommand(), RemoveRTCommand(), CorrigeRisadaCommand(), RemoveNumerosCommand(), PadronizaSimboloMonetarioCommand(), PadronizaLinksCommand(), RemoveEmailCommand(), ProcessaEmoticonsCommand(), DivideCamelCaseCommand(), ConverteLowerCaseCommand(), # StemmerCommand(), # ProcessaNegacaoCommand(), RemovePontuacaoCommand(), RemoveStopwordsCommand(), RemoveEspacosExtraCommand() ] '''self.regras_negocio = [StemmerCommand()]''' self._CLASSIFICADOR_PATH = "/home/lucas/Documents/mineracao_opiniao/classificadores_treinados/" \ "naive_bayes_3860_resenhas_2015-09-25.00.52.23.944959.pickle" '''self._CLASSIFICADOR_PATH = "/home/lucas/Documents/mineracao_opiniao/classificadores_treinados/" \ "naive_bayes_3860_resenhas_negacao_2015-10-10.16.54.27.113297.pickle"''' self._CORPUS_RAIZ = "/home/lucas/Documents/mineracao_opiniao/corpus_resenhas_livros_processadas" self._PATH_PALAVRAS_FREQUENTES_CORPUS = "/home/lucas/Documents/mineracao_opiniao/palavras_frequentes_corpus/" \ "palavras_frequentes_2015-09-25.15.05.22.013713.pickle" # self._MODO_ANALISE_PROBABILISTICO = "modo_probabilistico" # self._MODO_ANALISE_DICIONARIO = "modo_dicionario" self._CORPUS = CorpusUtil(self._CORPUS_RAIZ)
def treinar_classificador(raiz_corpus): """Documentar """ minuto_incio = datetime.now().minute corpus = CorpusUtil(raiz_corpus) train_set = corpus.get_train_set() '''print " ++ len(train_set): %d" % len(train_set) print " ++ type(train_set): %s" % type(train_set) test_set = corpus.get_test_set() print " ++ len(test_set): %d" % len(test_set) print " ++ type(test_set): %s" % type(test_set) # test_set qtde_pos = 0 qtde_neg = 0 for features in test_set: if features[1] == 'pos': qtde_pos += 1 elif features[1] == 'neg': qtde_neg += 1 # print " ++ features[1]: ", features[1] print "Quantidade de documentos positivos em 'test_set': %d" % qtde_pos print "Quantidade de documentos negativos em 'test_set': %d" % qtde_neg''' classificador = NaiveBayesClassifier.train(train_set) print " -- Classificador treinado com sucesso." minuto_fim = datetime.now().minute tempo_decorrido = minuto_fim - minuto_incio print "-- Tempo decorrido: %s minutos." % str(tempo_decorrido) return classificador
import codecs import os from random import shuffle from util.arquivo_util import ArquivoUtil if __name__ == '__main__': # texto = raw_input("Resenha: ") raiz_corpus = "/home/lucas/Documents/mineracao_opiniao/corpus_resenhas_livros_processado_sem_stem_e_negacao" classificador_path = "/home/lucas/Documents/mineracao_opiniao/classificadores_treinados/" \ "classificadores_resenhas_livros/" \ "classificador_naive_bayes_resenhas_livros_3860_sem_stem_negacao_2015-09-23.16.17.32.802909.pickle" nova_fachada = Fachada() corpus = CorpusUtil(raiz_corpus) # texto = "Excelente livro, recomendo! Muito bom, vale a pena." '''texto = """Quando terminei de ler o livro fiquei admirada com o autor! Ele é simplesmente magnifico. Não vou negar que depois de começar a ler a segunda parte da obra fiquei entediada, mas não fui capaz de abandona-la, ainda bem, mas quando cheguei no final do livro entendi o motivo da segunda parte. O livro é muito bem bolado e vale a pena ler!"""''' documentos_path = raiz_corpus + "/pos" nomes = os.listdir(documentos_path) shuffle(nomes) documentos = [] for nome_documento in nomes: if nome_documento.endswith('.txt'):
__author__ = 'lucas' from util.corpus_util import CorpusUtil import pickle if __name__ == "__main__": corpus_raiz = "/home/lucas/Documents/mineracao_opiniao/corpus_resenhas_livros_processadas" corpus = CorpusUtil(corpus_raiz) palavras_frequentes = corpus.gravar_palavras_frequentes()