Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Sugestão] Pra quem quiser visualizar melhor a matriz resultante. Uma conversão para dataframe

Uma sugestão, é simples, mas pode ser útil para iniciantes.
Facilitando visualizaçao da matriz de dados resultantes da vetorização e, auxiliar quem esta iniciando a visualizar melhor, por exemplo, a repetição da palavras viajar que recebe o valor 1 na ultima coluna, com isso intuir que pode ser medido quão próximos esses vetores estão.

from sklearn.feature_extraction.text import CountVectorizer #BoW e contagem de frequencia para vetorizar
import pandas as pd


# Conjunto de frases
frases = ["Eu amo viajar para o Japão", 
          "Viajar é incrível", 
          "Quero conhecer o Japão"]

# Criando o modelo BoW
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(frases)

# Exibir matriz resultante
print(vectorizer.get_feature_names_out())
print(X.toarray())

#Converter o array para dataframe
df = pd.DataFrame(X.toarray(), columns=vectorizer.get_feature_names_out())
df[vectorizer.get_feature_names_out()] = X.toarray()
display(df)
2 respostas
solução!

Olá, Marcelo. Como vai?

Excelente contribuição! Essa é uma das melhores sugestões possíveis para quem está dando os primeiros passos no Processamento de Linguagem Natural (PLN).

Quando trabalhamos com modelos como o Bag of Words (BoW), o resultado bruto gerado pela vetorização do scikit-learn é uma matriz esparsa ou um array Numpy puro. Para quem está iniciando, olhar para um bloco de números isolados no console pode parecer intimidador e abstrato.

Ao converter esse array para um DataFrame do Pandas usando columns=vectorizer.get_feature_names_out(), você deu "nome aos bois". Transformar os números em uma tabela estruturada facilita de forma imediata o entendimento visual de como o texto foi codificado em uma representação matemática.

Para enriquecer ainda mais o seu tópico e ajudar os alunos a extraírem o máximo dessa sua visualização, separei alguns aprofundamentos técnicos sobre o que o seu código construiu:


1. O Conceito de Matriz de Termos de Documentos (Document-Term Matrix)

O DataFrame que você gerou é chamado na literatura de IA de Matriz de Termos de Documentos. Cada linha da sua tabela representa um documento (uma frase) e cada coluna representa uma palavra única (o vocabulário mapeado pelo modelo).

Como você muito bem pontuou, ao olhar para a coluna da palavra "viajar", o aluno consegue perceber exatamente quais frases compartilham esse mesmo termo.


2. A Intuição de Proximidade Espacial (Distância Euclidiana e Cosseno)

A sua última frase foi cirúrgica: "com isso intuir que pode ser medido quão próximos esses vetores estão". É exatamente esse o fundamento dos algoritmos de Machine Learning aplicados a texto!

Como cada linha do seu DataFrame virou uma sequência de números (um vetor geométrico), o algoritmo passa a ser capaz de calcular a distância matemática entre eles em um espaço multidimensional.

  • Se duas frases compartilham muitas palavras em comum (como as linhas 0 e 2 que compartilham o termo "Japão"), os seus vetores apontarão para direções muito próximas no espaço. Isso permite que a IA meça a Similaridade de Cosseno entre os textos para criar sistemas de busca inteligente, agrupamento de documentos ou detecção de plágio.

3. Dica de Refatoração de Código (Simplificação)

A sua lógica está corretíssima e funciona muito bem! Caso queira deixar o seu bloco de código um pouquinho mais enxuto e direto na criação do DataFrame, você pode eliminar a linha duplicada de atribuição. O construtor do Pandas já faz todo o trabalho de mapear as colunas e os dados em um único passo:

# Seu código original de conversão:
# df = pd.DataFrame(X.toarray(), columns=vectorizer.get_feature_names_out())
# df[vectorizer.get_feature_names_out()] = X.toarray()

# Forma simplificada e direta:
df = pd.DataFrame(X.toarray(), columns=vectorizer.get_feature_names_out())
display(df)

Parabéns pela iniciativa didática e pelo olhar generoso com quem está iniciando na área de dados e IA. Tópicos assim enriquecem muito a nossa comunidade!

Espero que possa ter lhe ajudado!

Olá Evandro,

valeu o demais o feedback, e complementos foram show demais.