Introdução ao Text Mining com Python

Ainda não fiz nenhum post sobre text mining neste blog, o que é um pecado. Analisar textos, agora que muita informação está no Twitter, Facebook, comentários, discussões online, dentre tantas outras coisas, é essencial. Por isso, hoje vou fazer um breve post, no melhor estilo github, deixando somente o código e os comentários. Penso que é tudo bem auto-explicativo aqui, mas fiquem à vontade de me questionar nos comentários ou em qualquer outro lugar, caso tenham dúvidas com relação a algum trecho.O texto utilizado para análise foi o Legalização da Maconha: Debate para Além da Imaginação que escrevi para o Terraço Econômico – aproveitei que tinha o rascunho em txt aqui. Como não consigo subir o arquivo em txt por este host, peço que, quem for replicar, copie o texto para um bloco de notas no próprio notebook.

Os tópicos que são abordados no script abaixo são os seguintes:

  • Como importar um txt e a melhor forma de se iniciar a leitura;
  • Como remover stopwords (i.e., conjunções, preposições, artigos, etc.) e adicionar novas palavras ao grupo existente;
  • Encontrar a distribuição das palavras e traçar o gráfico com as 20 mais frequentes;
  • Introdução ao stemming, i.e., trazer as palavras para o seu núcleo, fazer com que o seu programa entenda a palavra voando como sendo o mesmo que voar, conscientização como consciente, etc. Não utilizei o código por não gostar do resultado, mas há uma breve menção comentada;

Sem mais delongas, o código:


# Carrega bibliotecas (nltk é a essencial aqui)
!pip install nltk
import nltk
from nltk.tokenize import sent_tokenize
nltk.download('punkt')
from nltk.tokenize import word_tokenize

import numpy as np
import pandas as pd
from os import path
from PIL import Image

from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

# Carregar arquivo texto
f = open('Legalização da Maconha_ Debate para Além da Imaginação.txt','r')
texto = ""
while 1:
line = f.readline()
if not line:break
texto += line

f.close()

print(texto)
print(type(texto))

# Quebra em palavras
tokenized_word=word_tokenize(texto)
print(tokenized_word)

# Palavras em letras minusculas
tokenized_word_2 = [w.lower() for w in tokenized_word]
print(tokenized_word_2)

# Aqui, vamos retirar as chamadas stopwords (conjuncoes, preposicoes, palavras que não nos interessam)
# 1) Vamos ver quais stopwords ja existem na biblioteca
from nltk.corpus import stopwords
nltk.download('stopwords')
stop_words = set(stopwords.words("portuguese"))
#print(stop_words)

# 2) Vamos adicionar novas stopwords
# coloquei o 'bbbbbbbbbbb' porque ficava mais facil pra ver se deu certo a lista de stopwords depois
stop_words.update(('uso',',',';','%','.',':','bbbbbbbbbbbbbbb','-','droga','drogas','art.','–','http'))
#print(stop_words)

# 2) Remover essas stopwords
tokenized_word_3=[]
for w in tokenized_word_2:
if w not in stop_words:
tokenized_word_3.append(w)

# se quiser comparar o antes e depois da remoção das stopwords
#print("Tokenized Word:",tokenized_word)
#print("Filterd Word:",tokenized_word_3)

# Analisa distribuicao das palavras
from nltk.probability import FreqDist
fdist = FreqDist(tokenized_word_3)
fdist.most_common(20)

# Grafico de distribuicao das palavras
import matplotlib.pyplot as plt
plt.figure()
fdist.plot(20,cumulative=False)

# Wordcloud
wc = WordCloud()
img = wc.generate_from_text(' '.join(tokenized_word_3))
img.to_file('worcloud.jpeg')

Plot da distribuição das 20 palavras mais frequentes (geradas em fdist.plot()):

FreqPalavras

Plot da nuvem de palavras:

worcloud

Note que temos palavras que não servem para nada, como ‘https’, ‘além’, ‘é’, ‘[‘, ‘]’. Para retirá-las, bastaria retirá-las com o trecho stop_words.update( ). Isto tudo para dizer que há diversas melhoras a serem feitas. Mas todas são fáceis de fazer utilizando o mesmo código e fazendo alguns pequenos ajustes.

Há vários prints no decorrer do código, pois estou partindo do pressuposto de que você irá colar isto tudo em uma célula no Jupyter Notebook e executar de uma vez todas as linhas. Os prints ajudam a visualizar tudo que foi executado. Mas atenção que este não é o melhor jeito de fazer isso, principalmente para quem está aprendendo. Recomendo que execute cada passo de uma vez para observar cada saída do código.

E se você gostou do post, não vá embora sem deixar uma curtida ou um comentário. Eu sei que não parece relevante, mas faz diferença para mim e custa pouco para você. Se encontrou algum erro ou tem alguma sugestão, dúvida, elogio ou crítica, pode escrever nos comentários ou me enviar uma mensagem diretamente em Sobre o Estatsite. E visite também a conta do Twitter @EstatSite.

Forte abraço e bons estudos!

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s