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()):

Plot da nuvem de palavras:

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.

Gostou do conteúdo? Se inscreva para receber as novidades! Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e compartilhar com seus amigos. De verdade, isso faz toda a diferença. Você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @EstatSite ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal do Yukio.

Bons estudos!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *