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_pathdeve 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.