Geração de Nuvens de Palavras com Python: Guia Prático

Preparação do Ambiente

Para iniciar a criação de nuvens de palavras (word clouds) em Python, é necessário instalar as bibliotceas fundamentais para processamento de imagem, análise de texto e visualização de dados. Utilize o gerenciador de pacotes pip para instalar as dependências:

pip install matplotlib jieba wordcloud numpy pillow

Exemplo 1: Nuvem de Palavras Básica

Este exemplo demonstra como gerar uma nuvem a partir de um arquivo de texto simples. O código lê os dados, configura as dimensões da imagem e renderiza o resultado visualmente.

import matplotlib.pyplot as plt
from wordcloud import WordCloud

# Carregamento dos dados textuais
with open('documento.txt', 'r', encoding='utf-8') as f:
    texto_bruto = f.read()

# Instanciação do gerador com configurações de dimensões e cores
config_nuvem = WordCloud(
    background_color='white',
    width=800,
    height=600,
    max_words=100,
    min_font_size=10,
    mode='RGBA'
)

# Geração do mapa de palavras
nuvem_gerada = config_nuvem.generate(texto_bruto)

# Persistência do resultado em arquivo de imagem
nuvem_gerada.to_file("nuvem_saida.png")

# Exibição via Matplotlib
plt.figure(figsize=(10, 7))
plt.imshow(nuvem_gerada, interpolation='bilinear')
plt.axis("off") # Remove os eixos coordenados
plt.show()

Exemplo 2: Personalização Avançada com Máscaras e Tokenização

Para lidar com idiomas que não utilizam espaços como delimitadores (como o chinês) ou para dar formas específicas à nuvem, utilizamos a bibloiteca jieba para segmentação e máscaras baseadas em arrays do numpy.

import numpy as np
from PIL import Image
import jieba
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
import os

# Definição de caminhos
diretorio_atual = os.path.dirname(__file__)
arquivo_texto = os.path.join(diretorio_atual, 'fonte_texto.txt')
arquivo_mascara = os.path.join(diretorio_atual, 'modelo_forma.png')

# Processamento de texto e segmentação (tokenização)
conteudo = open(arquivo_texto, encoding='utf-8').read()
palavras_segmentadas = jieba.cut(conteudo)
texto_final = " ".join(palavras_segmentadas)

# Criação da máscara baseada em uma imagem existente
mapa_forma = np.array(Image.open(arquivo_mascara))

# Definição de palavras irrelevantes (stopwords)
termos_excluidos = set(STOPWORDS)
termos_excluidos.add("exemplo")

# Configuração avançada da WordCloud
processador_visual = WordCloud(
    font_path='arial.ttf', # Necessário para suporte a caracteres especiais/Unicode
    background_color="black",
    max_font_size=60,
    mask=mapa_forma,
    stopwords=termos_excluidos,
    contour_width=2,
    contour_color='white'
)

# Processar e salvar
processador_visual.generate(texto_final)
processador_visual.to_file(os.path.join(diretorio_atual, "resultado_final.jpg"))

# Visualização comparativa (Máscara vs Nuvem)
plt.subplot(1, 2, 1)
plt.title("Máscara Original")
plt.imshow(mapa_forma, cmap=plt.cm.gray)
plt.axis("off")

plt.subplot(1, 2, 2)
plt.title("Nuvem Gerada")
plt.imshow(processador_visual, interpolation='bilinear')
plt.axis("off")

plt.show()

Pontos de Atenção Técnica

  • Tokenização: Em idiomas ocidentais, a separação por espaços é nativa. Para idiomas asiáticos ou processamentos complexos, o jieba é essencial para identificar unidades semânticas.
  • Fontes: Ao trabalhar com caracteres não-ASCII, o parâmetro font_path deve apontar para um arquivo de fonte (.ttf ou .ttc) que suporte o conjunto de caracteres desejado, sob risco de renderizar blocos vazios.
  • Máscaras: A imagem utilizada como máscara deve preferencialmente ter fundo branco puro (#FFFFFF) ou transparente, onde as áreas coloridas/escuras definem onde as palavras serão posicionadas.

Tags: Python WordCloud matplotlib Jieba Processamento-de-Linguagem-Natural

Publicado em 6-4 23:12 por Thomas