Contador de frequência de palavras gratuito

Analise um texto para contar a frequência das palavras e identificar as que aparecem mais. Ideal para análise de texto, pesquisa de conteúdo e detecção de padrões.

Sobre a análise de frequência de palavras

Frequência de palavras é a contagem de quantas vezes cada palavra aparece em um texto, a análise estatística mais simples possível sobre um corpo de escrita, e ainda assim a fonte de um campo inteiro. O estudo empírico de frequências de palavras em inglês começa com George Kingsley Zipf, um linguista de Harvard cujo livro de 1935 The Psycho-Biology of Language e a continuação de 1949 Human Behavior and the Principle of Least Effort documentaram o que hoje se conhece como a Lei de Zipf: a frequência de qualquer palavra é aproximadamente inversamente proporcional à sua posição na tabela de frequência. A palavra mais comum em inglês («the») representa cerca de 7 % de todos os tokens-palavra em um corpus inglês típico; a segunda mais comum («of») cerca de 3,5 %; a terceira cerca de 2,8 %. A relação se mantém em quase todas as línguas naturais e em quase todos os tipos de texto, livros, jornais, fala transcrita, comentários de código, mídias sociais. Mantém-se até para o inverso: a maioria das palavras aparece só uma ou duas vezes em qualquer texto dado, não importa o tamanho do texto. Zipf atribuiu isso a um princípio do menor esforço: falantes minimizam o custo de enunciação enquanto ouvintes minimizam o custo de compreensão, e o equilíbrio é uma distribuição de lei de potência.

O primeiro corpus computacional projetado especificamente para análise de frequência foi o Brown Corpus, compilado por W. Nelson Francis e Henry Kučera em Brown University e publicado em 1961. Contém 1.014.312 tokens de palavras de 500 amostras de prosa em 15 gêneros (reportagem jornalística, ficção, escrita religiosa, artigos científicos, saber popular, documentos governamentais, e mais), cada amostra com 2.000 palavras. O Brown Corpus é o fundamento da linguística inglesa empírica, todo estudo moderno de frequência de palavras em inglês se constrói sobre ele direta ou indiretamente. O equivalente britânico, o LOB Corpus (Lancaster-Oslo/Bergen), seguiu em 1976 com a mesma estrutura para inglês britânico. Os corpus de escala industrial de hoje (os dados n-gram do Google de mais de 8 milhões de livros, o iWeb Corpus com 14 bilhões de palavras, os corpus web-crawleados OSCAR com centenas de bilhões de palavras) todos traçam sua metodologia até o Brown.

Stop words: o conceito e as listas

Uma análise de frequência sem filtragem de stop words é dominada por palavras-função, artigos, preposições, conjunções, auxiliares, que aparecem em cada frase e carregam pouco significado tópico. O termo «stop words» foi cunhado por Hans Peter Luhn em seu artigo de 1958 «The Automatic Creation of Literature Abstracts», escrito na IBM Research no IBM 704. Luhn as chamava de «noise words», palavras tão comuns que mascaravam as palavras de conteúdo mais informativas. As listas modernas de stop words ainda são bastante pequenas. A lista inglesa de stop words da biblioteca Python NLTK tem 179 palavras; a do spaCy cerca de 326. O tamanho exato depende da filosofia: a lista NLTK é conservadora (apenas as palavras mais universalmente função); a do spaCy é mais agressiva (incluindo muitos verbos e pronomes comuns). Outras línguas precisam de suas próprias listas, e as listas em si ficam mais difíceis de compor. O alemão tem muitas palavras compostas que se decompõem em partes mais curtas comuns. Chinês, japonês e tailandês não têm separadores de espaço algum, então antes de poder perguntar «qual é a frequência desta palavra» é preciso fazer segmentação, decidir onde estão as fronteiras de palavras, o que é um problema mais profundo do que a tokenização por espaços direta do inglês. A lista de stop words desta ferramenta cobre o inglês; para texto não-inglês, a saída de frequência bruta insensível a maiúsculas será mais útil do que a versão filtrada.

O que conta como palavra, o problema da tokenização

Contar palavras parece simples até você tentar especificar exatamente o que é uma palavra. «don't» é uma palavra ou duas (do + n't)? «state-of-the-art» é uma palavra ou quatro? A URL example.com é uma palavra? E U.S.A., três palavras, uma palavra, ou uma palavra que deve ser normalizada para USA? As regras de tokenização do Penn Treebank (desenvolvidas na Universidade da Pensilvânia para o corpus Penn Treebank, desde 1989) se tornaram o padrão de fato do NLP inglês e separam contrações em tokens distintos (don'tdo + n't). O padrão Unicode UAX #29 (Unicode Text Segmentation) define fronteiras de palavras sensíveis à língua que funcionam pela maioria dos scripts. A plataforma web moderna expõe isso como Intl.Segmenter, disponível em baseline no Chrome, Firefox e Safari desde 2024, dê-lhe uma string e um locale, obtenha um iterador de fronteiras de palavras que respeita as convenções da língua de entrada. Esta ferramenta usa uma abordagem regex ([\p{L}\p{N}][\p{L}\p{N}_'-]* com a flag Unicode) que lida bem com a maioria dos casos mas trata state-of-the-art como quatro palavras e pode ter dificuldade com apóstrofos tipográficos curvos (o caractere U+2019 que Word produz por padrão, o apóstrofo ASCII reto U+0027 funciona corretamente).

Stemming e lematização

Uma contagem ingênua de frequência trata run, runs, running e ran como quatro palavras diferentes. Para algumas perguntas essa é a resposta correta (você realmente quer contar formas de superfície separadamente); para muitas outras, você as quer colapsadas em um único conceito. O stemming corta sufixos por regras, o famoso Porter stemmer de Martin Porter (1980) reduz palavras às suas raízes via um algoritmo de remoção de sufixos em múltiplos passos: runningrun, catscat, generouslygenerous. Porter mais tarde refinou o sistema em Snowball (2001), uma pequena linguagem para escrever stemmers em múltiplas línguas. O stemming é rápido e agnóstico de língua mas produz não-palavras (argues, argued, arguing todos viram argu). A lematização é a alternativa mais sofisticada: usa um dicionário e análise gramatical para mapear cada forma de superfície ao seu lema canônico, produzindo palavras reais (ranrun, não ra). A lematização é mais lenta, requer um dicionário específico da língua, e lida com os casos irregulares que o stemming erra. NLTK e spaCy ambos entregam lematizadores; esta ferramenta não faz nenhum, por design, análise de frequência sobre formas de superfície é mais útil para algumas aplicações (análise de estilo, diversidade de vocabulário) do que seria a versão lematizada.

TF-IDF: por que a frequência de uma palavra em um documento não basta

Uma análise de frequência de um único documento pode te dizer quais palavras aparecem mais frequentemente neste texto particular, mas não pode te dizer quais palavras são distintivas a este texto. The aparece mais frequentemente em cada documento inglês, então sua alta frequência no seu documento não te diz nada. TF-IDF (Term Frequency-Inverse Document Frequency) é a solução clássica: pondera a frequência de cada termo em um documento pelo inverso de quão frequentemente o termo aparece no corpus mais amplo. Palavras comuns em todos os lugares (the, of, and) recebem pesos pequenos; palavras comuns no seu documento mas raras em outros lugares recebem pesos grandes. O conceito IDF foi introduzido por Karen Spärck Jones em seu artigo de 1972 «A Statistical Interpretation of Term Specificity and Its Application in Retrieval» no Journal of Documentation, Jones é uma das figuras fundadoras da linguística computacional e da recuperação de informação, e sua contribuição aos motores de busca (todo algoritmo de ranking de busca desde PageRank em diante deve algo ao TF-IDF) é amplamente subestimada. Esta ferramenta computa frequência bruta, não TF-IDF, TF-IDF requer um corpus contra o qual comparar, e não há um corpus único correto para entrada arbitrária de usuário.

N-grams e o Google Books Ngram Viewer

A frequência de uma palavra única é o caso particular da análise 1-gram. Os bigrams (sequências de duas palavras) e trigrams (sequências de três palavras) capturam frases multi-palavra, «machine learning» é um bigram que nunca apareceria em uma análise de frequência de palavras únicas mas é mais informativo do que as contagens separadas de machine e learning. O maior conjunto de dados n-gram disponível publicamente é o Google Books Ngram Viewer, lançado em 16 de dezembro de 2010 e construído a partir de texto reconhecido por OCR de aproximadamente 8 milhões de livros, cerca de 6 % de todo livro já publicado. O viewer permite plotar a frequência de qualquer 1-, 2-, 3-, 4- ou 5-gram no inglês (e várias outras línguas) do ano 1500 ao presente. Foi usado para tudo, desde rastrear a ascensão e queda do gírias até datar manuscritos não datados até documentar o viés de gênero no uso histórico do inglês. A geração de texto por cadeia de Markov, precursora dos modelos de linguagem modernos, foi construída sobre estatísticas n-gram, prever a próxima palavra a partir das N palavras anteriores é exatamente o que uma tabela de frequência n-gram te diz. Esta ferramenta conta palavras únicas; análise bigram e trigram está na lista de funcionalidades futuras.

Tamanho de vocabulário e Lei de Heaps

Um falante nativo adulto de inglês conhece aproximadamente 20.000 a 35.000 famílias de palavras (uma «família de palavras» sendo uma palavra base mais suas flexões, run, runs, running, ran como uma família). O estudo de Brysbaert et al. 2016 em Frontiers in Psychology colocou a mediana para adultos americanos com educação universitária em cerca de 42.000 palavras base. A Lei de Heaps (Heaps 1978; a observação subjacente remonta aos anos 1950) descreve como o vocabulário cresce com o tamanho do corpus: V ∝ K · Nβ, onde V é a contagem de palavras únicas (vocabulário), N é a contagem total de tokens (tamanho do corpus), K é uma constante na faixa 10-100, e β é entre 0,4 e 0,6 para o inglês. Em termos simples: quanto mais longo um texto fica, mais palavras novas você encontra, mas cada palavra sucessiva é menos provável de ser nova. Um ensaio de 1.000 palavras introduz talvez 400 palavras únicas; um de 10.000 palavras introduz cerca de 1.300 palavras únicas; um romance de 100.000 palavras cerca de 4.500. A relação é sublinear mas não limitada, não há «teto de vocabulário» teórico para linguagem natural. A regra prática para escritores de conteúdo: um post de blog típico de 1.500 palavras contém cerca de 500-600 palavras únicas, e as 20 mais frequentes (principalmente stop words) cobrem cerca de metade das ocorrências totais.

Quando a análise de frequência de palavras é realmente útil

Como esta ferramenta funciona no seu navegador

A implementação é direta. O texto passa por uma regex Unicode-aware ([\p{L}\p{N}][\p{L}\p{N}_'-]*/gu) que combina sequências de letras e números como palavras; as correspondências são normalizadas para minúsculas se a opção insensível a maiúsculas está ativada; cada palavra é incrementada em um Map JavaScript; as entradas são depois ordenadas por contagem decrescente e renderizadas como gráfico e tabela. O tempo total em um documento de 100.000 palavras é abaixo de um segundo em um laptop típico. Map é a estrutura de dados certa aqui, preserva a ordem de inserção, tem lookup e atualização O(1), e serializa limpamente para um array 2D para exportação. Uma implementação mais sofisticada usaria Intl.Segmenter (a API de segmentação Unicode-aware, baseline desde abril de 2024) para línguas com fronteiras de palavras não triviais, particularmente CJK; a abordagem regex funciona bem para línguas europeias e quebra para chinês, japonês e tailandês que não têm separadores de palavras por espaços.

Privacidade: por que só-navegador importa aqui

Rascunhos de escrita não publicada, posts de blog, memorandos internos, entregáveis a clientes, capítulos de manuscritos, papers acadêmicos em progresso, são exatamente o tipo de texto onde fazer upload para um serviço de terceiros é indesejável. As ferramentas de frequência de palavras do lado servidor requerem enviar o texto inteiro a um endpoint remoto, o que significa que ele se senta nos logs do servidor, possivelmente num cache CDN, possivelmente num pipeline de analytics, possivelmente num backup. Para texto publicado a questão é discutível. Para trabalho rascunho, cópia de cliente sob NDA, ou qualquer manuscrito que você ainda não quer que ninguém fora da sua equipe veja, a arquitetura importa. Esta ferramenta roda todo o pipeline no seu navegador via JavaScript. O texto nunca cruza a rede, verifique na aba Network do DevTools ao clicar Analyze, ou coloque a página offline (modo avião) após carregar e confirme que a análise ainda funciona. Segura para rascunhos confidenciais, entregáveis a clientes e qualquer texto que você não queira ver copiado no disco rígido de um desconhecido.

Perguntas frequentes

O que são palavras vazias ?

Palavras vazias são palavras comuns como « o », « a », « é », « e », « ou » que aparecem frequentemente na maioria dos textos, mas carregam pouco significado. Filtrá-las permite concentrar a análise em palavras com mais sentido.

Como a porcentagem é calculada ?

A porcentagem é calculada assim : (ocorrências da palavra ÷ total de palavras) × 100. Por exemplo, se uma palavra aparece 5 vezes em um texto de 100 palavras no total, sua frequência é de 5 %.

Este contador lida com frases (n-grams)?

Apenas palavras únicas, atualmente. Bigrams (sequências de duas palavras como «machine learning»), trigrams e n-grams mais longos estão na lista de funcionalidades futuras. O Google Books Ngram Viewer (lançado em 16 de dezembro de 2010) é a referência pública para análise n-gram em escala; para texto pessoal, NLTK e spaCy entregam extração n-gram em algumas linhas de Python.

Posso analisar textos muito longos ?

Sim, esta ferramenta é executada inteiramente no seu navegador e pode processar textos de vários MB. Textos muito grandes, entretanto, podem levar alguns segundos para serem processados. Seus dados nunca saem do seu dispositivo.

Funciona para texto não-inglês?

Parcialmente. A regex Unicode-aware identifica corretamente caracteres de palavras em qualquer língua de script latino, cirílico, grego, hebraico ou árabe. Para chinês, japonês e tailandês, que não têm separadores de palavras por espaços, a frequência bruta por caractere funcionará mas não é realmente «frequência de palavras» no sentido linguístico, você precisa de segmentação de palavras primeiro (jieba para chinês, MeCab para japonês, Intl.Segmenter da ICU para suporte do lado navegador). O filtro de stop words é apenas-inglês.

Meus textos são enviados?

Não. A análise roda inteiramente no seu navegador via JavaScript. O texto colado nunca cruza a rede, verifique na aba Network do DevTools ao clicar Analyze, ou coloque a página offline (modo avião) após carregar e a ferramenta ainda funcionará. Segura para rascunhos confidenciais, entregáveis a clientes, capítulos de manuscritos sob NDA, memorandos internos ou qualquer outra coisa que você não queira ver copiada no disco rígido de um desconhecido.

Ferramentas relacionadas

Contador de palavras e caracteres on-line gratuito Contador de palavras e caracteres on-line gratuito Contador de caracteres