Representar documentos com contagem de palavras
Crie uma visualização de conjunto de palavras e avalie as palavras de acordo com o quanto elas diferenciam os documentos.
- Transforme um documento em uma representação de saco de palavras
- Calcule o TF-IDF e explique o que ele recompensa
- Cite o que falta nas representações baseadas em contagem
Um programa não pode comparar sentenças diretamente, mas pode comparar números. A maneira mais simples de transformar um documento em números é contar suas palavras. Essa representação de saco de palavras mantém quais palavras ocorrem e com que frequência, e descarta sua ordem - como se você colocasse as palavras em um saco e o sacudisse.
from collections import Counter
words = "cats chase cats".split()
print(Counter(words))Counter({'cats': 2, 'chase': 1})Nem todas as palavras são igualmente informativas
Raw conta palavras de recompensa como the, que aparecem em todos os lugares. TF-IDF corrige isso multiplicando dois números:
- Frequência do termo (tf): quanto deste documento o termo compõe - sua contagem dividida pela extensão do documento.
- Frequência inversa do documento (idf): quão raro o termo é em todos os documentos: , onde é o número de documentos e df quantos contêm o termo.
Uma palavra em cada documento recebe ln(N/N) = ln(1) = 0, portanto não tem peso algum. Uma palavra que é frequente aqui, mas rara em outros lugares, recebe o maior peso – é o que torna este documento diferente.
Experimente
Até 15 XPExplorador TF-IDF
Clique nos termos e observe os três números em cada documento.
- Experimente o: por que seu TF-IDF é zero em todos os lugares, mesmo sendo a palavra mais comum?
- Tente cat e depois purr: qual é a melhor pista para o primeiro documento e por quê?
- Cada cartão mostra seu termo principal - é um bom resumo de uma palavra?
Escolha um termo
Pets
The cat sat by the fire. The cat began to purr.
- tf
- 0,273
- idf = ln(3/3)
- 0,000
- tf × idf
- 0,000
Termo principal aqui: sat
Weather
The rain fell all day. The storm brought rain and wind.
- tf
- 0,182
- idf = ln(3/3)
- 0,000
- tf × idf
- 0,000
Termo principal aqui: rain
Animals
The dog chased the cat across the field.
- tf
- 0,375
- idf = ln(3/3)
- 0,000
- tf × idf
- 0,000
Termo principal aqui: dog
“the” aparece em 3 de 3 documentos, ou seja, em todos. Por isso, seu idf é 0 e ele não ajuda a distinguir os documentos.
Principais conclusões
Saco de palavras = contagem de palavras sem ordem: simples, rápido e cego para “cachorro morde homem” vs “homem morde cachorro”.
TF-IDF = quão frequente um termo é aqui × quão raro ele é em geral. Palavras encontradas em todos os lugares recebem peso 0.
As contagens capturam bem os tópicos, mas não o significado, a negação ou a ordem das palavras.
Quiz da aula
7 perguntas · aprovação com 5 acertos · até 50 XP
Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.
Pratique: aplique NLP com Python
Experimente cada ideia de processamento de texto em Python, execute com entradas de exemplo e use os resultados para ver onde o método funciona ou falha.
Conte as palavras
Leia o texto, coloque-o em minúsculas, extraia palavras alfabéticas, imprima cada palavra distinta e conte em ordem alfabética como word: count.
- Palavras repetidas
- Três tokens
O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.
Calcular TF-IDF
A primeira linha é um termo. O segundo é o número de documentos N, seguido por N linhas de documentos. Trate cada documento como palavras alfabéticas em minúsculas (re.findall(r"[a-z]+", line.lower())).
Para cada documento, imprima seu TF-IDF para o termo arredondado para 3 decimais, usando e . Se nenhum documento contiver o termo, imprima 0,0 para cada um.
- Uma palavra distintiva
- Uma palavra em cada documento
O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.
Dúvidas sobre esta lição
Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.
Carregando publicações…