6.2 Validação do framework
6.2.4 Classificação dos dados
Na etapa de classificação dos dados, ocorre a execução do algoritmo Naive Bayes com base nos conjunto de treinos categorizados pelo DBScan e o especialista. Será necessário
executar o algoritmo para a criação dos modelos e então executar alguns testes de classificação para novos tweets, que fazem parte de um conjunto de teste. Esse conjunto de teste deverá ser classificado com base nos dois modelos gerados.
7 RESULTADOS
Este capítulo apresenta os resultados alcançados neste trabalho.
7.1 Melhorias aplicadas
A partir da versão da ferramenta descrita no Capítulo 5, melhorias e novas funcionalidades foram aplicadas. No geral, essas melhorias visam tornar a ferramenta unificada e agregar valor com as novas funcionalidades, permitindo um processo de mineração de texto mais completo. A ideia é que a ferramenta seja utilizada como uma biblioteca Python, e com essas modificações possa ser utilizada dentro de outras aplicações.
7.1.1 Coleta
O módulo de coleta foi totalmente reescrito. Na versão anterior havia apenas a coleta por meio da API de Streaming do Twitter, e agora é possível realizar a coleta com API de Streaming, API de Busca (Search API) e utilizando o método de scraping para coletar tweets mais antigos. Para os casos de uso da API de Stream ou de Busca, é necessário informar alguns dados que dão acesso a API que são disponibilizados pelo Twitter, como a Chave, Secret, Token de Accesso e o Secret do Token1.
7.1.2 Pré-processamento
Considerando a versão anterior do framework, o módulo de pré-processamento2é o
que mais se aproxima da nova arquitetura da ferramenta e, portanto, sofreu menos modificações. Um exemplo de melhoria nesse módulo foi adicionar mais símbolos para o conjunto de símbolos de caracteres especiais.
Uma decisão tomada para tornar a ferramenta mais flexível, foi usar dicionários baseados nos arquivos JSON gerados, para facilitar a descrição dos documentos processados. Uma vez que para acessar uma dada informação só é necessário saber qual a chave para se obter o valor, e dessa forma, é possível passar os nomes das chaves que cada algoritmo precisará utilizar para realizar o processamento.
1 https://github.com/gustavoaires/minetext/blob/master/minetext/collecting/datacollect.py 2 https://github.com/gustavoaires/minetext/tree/master/minetext/textprocessor
7.1.3 Gerenciamento de arquivos
Uma outra melhoria importante foi o desacoplamento dos módulos existentes em relação ao gerenciamento de entrada e saída de resultados. Foi criado um módulo responsável por lidar apenas com leitura e escrita de arquivos, tanto JSON, como CSV e variantes. Isso ajuda a reduzir a complexidade dos outros módulos, aumentando a coesão e diminuindo a quantidade de responsabilidades delegadas aos outros módulos. Isso possibilita ao usuário ler e escrever os dados somente uma vez durante o processo de mineração.
7.1.4 Processamento
Na versão anterior do framework havia apenas um algoritmo de mineração de dados, chamado DBScan, e ainda algumas medidas de similaridades: Fading, Euclidiana e Jaccard. Havia um nível muito alto de acoplamento entre o algoritmo e as medidas. Uma das primeiras melhorias feitas foi separar essas medidas a fim de facilitar a adição de novas, bem como diminuir o acoplamento. Em seguida, foi possível adicionar a distância de Levenshtein ao módulo de clusterização.
Além dessa melhoria arquitetural, houve também a adição de mais um algoritmo de clusterização, o K-medoids3. Isso dá uma possibilidade a mais para o especialista, dado que a proposta do K-medoids (clusterização por partição) é diferente da proposta do DBScan (clusterização por densidade). Para auxiliar no uso do K-medoids, foi adicionada uma funcionalidade que faz uso do método do cotovelo para ajudar na decisão do valor de K.
Para esta etapa de processamento, foi também adicionado o algoritmo Naive Bayes para classificação4. A implementação desses algoritmos busca ser a mais genérica possível
para que o especialista consiga usar para os seus dados que podem ter estruturas diferentes. Isso significa dizer que, as estruturas de dicionários do Python foram utilizadas para facilitar a descrição dos documentos, no qual é possível informar os nomes dos campos que precisam ser analisados durante a execução do algoritmo.
3 https://github.com/gustavoaires/minetext/blob/master/minetext/clustering/K-medoids.py 4 https://github.com/gustavoaires/minetext/blob/master/minetext/classifying/naivebayes.py
7.1.5 Análise
Para a etapa de análise, o trabalho que deu inicio ao framework fez uso de nuvens de palavras geradas com o auxílio de uma ferramenta web de terceiros. As nuvens de palavras mostram em maior destaque as palavras com mais ocorrências para os documentos analisados. Essa é uma forma de conseguir observar os padrões dos clusters. Na nova versão do framework é possível gerar as nuvens de palavras sem a necessidade de usar uma outra ferramenta. Isso diminui o trabalho manual que pode ser criar nuvens de palavras, além de poder gerar resultados mais claros utilizando-se de funcionalidades que acompanham esse módulo de visualização. Por exemplo, após a etapa de pré-processamento muitas palavras podem ficar ilegíveis, mas com o uso da ferramenta é possível recuperar os dados originais e utilizá-los para gerar as nuvens de palavras. Para ajudar na exibição das palavras, é possível fornecer um conjunto de palavras que não devem aparecer na imagem, além de ser possível reutilizar o módulo de pré-processamento para remover artigos, preposições, stopwords, entre outros para deixar a nuvem de palavras gerada mais legível e exibir as palavras mais importantes.
Aproveitando também que o método do cotovelo foi adicionado a ferramenta, uma funcionalidade para visualização desses valores também foi adicionada, na qual é gerado um gráfico que torna mais compreensível em qual valor de K os erros calculados param de decrescer. Essa visualização não é um resultado gerado de uma clusterização, mas ajuda na tomada de decisão sobre qual K usar.