Contatore di frequenza delle parole gratuito
Analizza un testo per contare la frequenza delle parole e identificare quelle che appaiono più spesso. Ideale per l'analisi del testo, la ricerca di contenuti e il rilevamento di pattern.
Informazioni sull'analisi di frequenza delle parole
La frequenza delle parole è il conteggio di quante volte ogni parola appare in un testo, il più semplice pezzo di analisi statistica che puoi fare su un corpo di scrittura, e tuttavia la fonte di un intero campo. Lo studio empirico delle frequenze delle parole in inglese inizia con George Kingsley Zipf, un linguista di Harvard il cui libro del 1935 The Psycho-Biology of Language e il seguito del 1949 Human Behavior and the Principle of Least Effort hanno documentato quella che oggi è conosciuta come Legge di Zipf: la frequenza di qualsiasi parola è approssimativamente inversamente proporzionale al suo rango nella tabella delle frequenze. La parola più comune in inglese ("the") rappresenta circa il 7% di tutti i token di parole in un corpus inglese tipico; la seconda più comune ("of") circa il 3,5%; la terza circa il 2,8%. La relazione vale in quasi tutte le lingue naturali e in quasi tutti i tipi di testo, libri, giornali, discorsi trascritti, commenti di codice, social media. Vale anche per l'inverso: la maggior parte delle parole appare solo una o due volte in qualsiasi testo dato, indipendentemente da quanto grande diventi il testo. Zipf l'ha attribuito a un principio del minimo sforzo: i parlanti minimizzano il costo dell'enunciazione mentre gli ascoltatori minimizzano il costo di comprensione, e l'equilibrio è una distribuzione di potenza.
Il primo corpus computazionale progettato specificamente per l'analisi delle frequenze è stato il Brown Corpus, compilato da W. Nelson Francis e Henry Kučera alla Brown University e pubblicato nel 1961. Contiene 1.014.312 token di parole da 500 campioni di prosa in 15 generi (cronaca giornalistica, narrativa, scrittura religiosa, articoli scientifici, folklore popolare, documenti governativi e altro), ogni campione di 2.000 parole. Il Brown Corpus è la fondazione della linguistica inglese empirica, ogni studio moderno di frequenza delle parole in inglese si basa su di esso direttamente o indirettamente. La controparte britannica, il LOB Corpus (Lancaster-Oslo/Bergen), è seguito nel 1976 con la stessa struttura per l'inglese britannico. I corpora industriali di oggi (i dati n-gram di Google da oltre 8 milioni di libri, il iWeb Corpus da 14 miliardi di parole, i corpora web-crawled di OSCAR da centinaia di miliardi di parole) tracciano tutti la loro metodologia al Brown.
Stop words: il concetto e le liste
Un'analisi di frequenza senza filtro di stop-word è dominata da parole funzionali, articoli, preposizioni, congiunzioni, ausiliari, che appaiono in ogni frase e portano poco significato tematico. Il termine "stop words" è stato coniato da Hans Peter Luhn nel suo articolo del 1958 "The Automatic Creation of Literature Abstracts," scritto presso IBM Research sul IBM 704. Luhn le chiamava "parole rumore", parole così comuni che mascheravano le parole di contenuto più informative dal punto di vista tematico. Le liste moderne di stop-word sono ancora piuttosto piccole. La lista di stop-word inglesi della libreria Python NLTK è di 179 parole; quella di spaCy è di circa 326. La dimensione esatta dipende dalla filosofia: la lista di NLTK è conservativa (solo le parole più universalmente funzionali); quella di spaCy è più aggressiva (includendo molti verbi e pronomi comuni). Altre lingue hanno bisogno delle proprie liste, e le liste stesse diventano più difficili da comporre. Il tedesco ha molte parole composte che si decompongono in parti comuni più brevi. Cinese, giapponese e thailandese non hanno affatto separatori di spazi bianchi, quindi prima di poter chiedere "qual è la frequenza di questa parola" devi fare segmentazione, decidere dove sono i confini delle parole, che è un problema più profondo della semplice tokenizzazione per spazio dell'inglese. La lista di stop-word di questo strumento copre l'inglese; per testo non-inglese, l'output di frequenza grezza case-insensitive sarà più utile della versione filtrata da stop-word.
Cosa conta come parola, il problema della tokenizzazione
Contare le parole sembra semplice finché non provi a specificare esattamente cosa sia una parola. "don't" è una parola o due (do + n't)? "state-of-the-art" è una parola o quattro? L'URL example.com è una parola? E U.S.A., tre parole, una parola, o una parola che dovrebbe essere normalizzata in USA? Le regole di tokenizzazione del Penn Treebank (sviluppate all'Università della Pennsylvania per il corpus Penn Treebank, dal 1989) sono diventate lo standard de-facto per il NLP inglese e dividono le contrazioni in token separati (don't → do + n't). Il UAX #29 (Unicode Text Segmentation) dello Standard Unicode definisce confini di parole language-aware che funzionano in quasi tutti i sistemi di scrittura. La piattaforma web moderna espone questo come Intl.Segmenter, disponibile come baseline in Chrome, Firefox e Safari dal 2024, gli dai una stringa e una locale, e ottieni un iteratore di confini di parole che rispetta le convenzioni della lingua di input. Questo strumento usa un approccio basato su regex ([\p{L}\p{N}][\p{L}\p{N}_'-]* con il flag Unicode) che gestisce bene la maggior parte dei casi ma tratta state-of-the-art come quattro parole e può faticare con apostrofi tipografici ricciuti (il carattere U+2019 che Word produce di default, l'apostrofo ASCII dritto U+0027 funziona correttamente).
Stemming e lemmatizzazione
Un conteggio ingenuo di frequenza tratta run, runs, running e ran come quattro parole diverse. Per alcune domande è la risposta giusta (vuoi davvero contare le forme di superficie separatamente); per molte altre, vuoi che siano collassate in un singolo concetto. Lo stemming taglia i suffissi per regola, il famoso Porter stemmer di Martin Porter (1980) riduce le parole ai loro stem tramite un algoritmo di rimozione di suffissi multi-passo: running → run, cats → cat, generously → generous. Porter ha poi raffinato il sistema in Snowball (2001), un piccolo linguaggio per scrivere stemmer in più lingue. Lo stemming è veloce e language-agnostic ma produce non-parole (argues, argued, arguing diventano tutti argu). La lemmatizzazione è l'alternativa più sofisticata: usa un dizionario e analisi grammaticale per mappare ogni forma di superficie al suo lemma canonico, producendo parole reali (ran → run, non ra). La lemmatizzazione è più lenta, richiede un dizionario specifico per la lingua, e gestisce i casi irregolari che lo stemming sbaglia. NLTK e spaCy distribuiscono entrambi lemmatizzatori; questo strumento non fa nessuno dei due, di proposito, l'analisi di frequenza sulle forme di superficie è più utile per alcune applicazioni (analisi dello stile, diversità del vocabolario) di quanto sarebbe la versione lemmatizzata.
TF-IDF: perché la frequenza di una parola in un documento non basta
Un'analisi di frequenza di singolo documento può dirti quali parole appaiono più spesso in questo particolare testo, ma non può dirti quali parole sono distintive di questo testo. The appare più spesso in ogni documento inglese, quindi la sua alta frequenza nel tuo documento non ti dice nulla. TF-IDF (Term Frequency-Inverse Document Frequency) è la soluzione classica: pesa la frequenza di ogni termine in un documento per l'inverso di quante volte il termine appare nel corpus più ampio. Le parole comuni ovunque (the, of, and) ottengono pesi piccoli; le parole comuni nel tuo documento ma rare altrove ottengono pesi grandi. Il concetto IDF è stato introdotto da Karen Spärck Jones nel suo articolo del 1972 "A Statistical Interpretation of Term Specificity and Its Application in Retrieval" nel Journal of Documentation, Jones è una delle figure fondamentali nella linguistica computazionale e nel recupero delle informazioni, e il suo contributo ai motori di ricerca (ogni algoritmo di ranking di ricerca da PageRank in poi deve qualcosa a TF-IDF) è ampiamente sottovalutato. Questo strumento calcola la frequenza grezza, non TF-IDF, TF-IDF richiede un corpus contro cui confrontare, e non c'è un singolo corpus giusto per input utente arbitrario.
N-gram e il Google Books Ngram Viewer
La frequenza di singola parola è il caso speciale dell'analisi 1-gram. Bigrammi (sequenze di due parole) e trigrammi (sequenze di tre parole) catturano frasi multi-parola, "machine learning" è un bigramma che non apparirebbe mai in un'analisi di frequenza di singola parola ma è più informativo dei conteggi separati di machine e learning. Il più grande dataset di n-gram disponibile pubblicamente è il Google Books Ngram Viewer, lanciato il 16 dicembre 2010 e costruito dal testo OCR-riconosciuto di circa 8 milioni di libri, circa il 6% di ogni libro mai pubblicato. Il viewer ti permette di tracciare la frequenza di qualsiasi 1-, 2-, 3-, 4- o 5-gram in inglese (e diverse altre lingue) dall'anno 1500 al presente. È stato usato per tutto, dal tracciamento dell'ascesa e caduta dello slang alla datazione di manoscritti non datati alla documentazione del bias di genere nell'uso storico dell'inglese. La generazione di testo basata su catene di Markov, il precursore dei moderni modelli di linguaggio, è stata costruita su statistiche di n-gram, prevedere la parola successiva dalle N parole precedenti è esattamente quello che una tabella di frequenza n-gram ti dice. Questo strumento conta singole parole; l'analisi di bigrammi e trigrammi è nella lista delle feature future.
Dimensione del vocabolario e Legge di Heaps
Un parlante nativo adulto inglese conosce approssimativamente da 20.000 a 35.000 famiglie di parole (una "famiglia di parole" è una parola base più le sue inflessioni, run, runs, running, ran come una famiglia). Lo studio di Brysbaert et al. del 2016 in Frontiers in Psychology ha posto la mediana per adulti americani con istruzione universitaria a circa 42.000 parole base. La Legge di Heaps (Heaps 1978; l'osservazione sottostante risale agli anni 1950) descrive come il vocabolario cresce con la dimensione del corpus: V ∝ K · Nβ, dove V è il conteggio delle parole uniche (vocabolario), N è il conteggio totale dei token (dimensione del corpus), K è una costante nell'intervallo 10-100, e β è tra 0,4 e 0,6 per l'inglese. In termini semplici: più un testo diventa lungo, più nuove parole incontri, ma ogni parola successiva è meno probabile che sia nuova. Un saggio di 1.000 parole introduce forse 400 parole uniche; un saggio di 10.000 parole introduce circa 1.300 parole uniche; un romanzo di 100.000 parole circa 4.500. La relazione è sublineare ma illimitata, non c'è un "tetto del vocabolario" teorico per il linguaggio naturale. La regola pratica per i content writer: un tipico blog post di 1.500 parole contiene circa 500-600 parole uniche, e le prime 20 più frequenti (principalmente stop words) coprono circa la metà delle occorrenze totali.
Quando l'analisi di frequenza delle parole è effettivamente utile
- Ottimizzazione SEO: analizzare la distribuzione e la densità delle parole chiave nel contenuto web
- Stile di scrittura: individuare l'uso eccessivo di certe parole e arricchire il vocabolario
- Stilometria e attribuzione di paternità. Lo studio quantitativo originale è stato l'articolo del 1887 di Thomas Mendenhall sulle distribuzioni di lunghezza delle parole nelle opere di diversi autori. L'applicazione moderna più famosa è l'analisi del 1964 di Mosteller e Wallace dei contestati Federalist Papers, usando l'analisi bayesiana di frequenza delle parole per determinare che i 12 articoli di paternità contesa erano quasi certamente scritti da James Madison piuttosto che Alexander Hamilton. La tecnica è stata da allora usata per attribuire collaborazioni di Shakespeare, identificare discorsi politici scritti da ghost-writer e smascherare autori anonimi online.
- Apprendimento delle lingue. Le liste di vocabolario basate sulla frequenza ti dicono quali parole imparare per prime. Padroneggiare le prime 1.000 parole di qualsiasi lingua principale ti dà la comprensione di circa l'80% del testo corrente; le prime 3.000 ti portano al ~95%. Le New General Service List, la lista COCA e altre liste di parole derivate da corpus sono costruite su questo principio.
- Ricerca di contenuti: identificare gli argomenti e i temi più comuni in un documento o corpus
- Rilevamento di plagio e similarità. I vettori di frequenza delle parole sono la rappresentazione sottostante in molti strumenti di rilevamento di similarità, la distanza di Jaccard, la similarità del coseno su vettori di frequenza delle parole, e le varianti pesate TF-IDF sono il pane quotidiano del punteggio di similarità testuale.
- Identificazione di stop-word per NLP a valle. Se stai costruendo un sistema di ricerca specifico per dominio, le parole ad alta frequenza specifiche del tuo dominio (non nelle liste di stop-word standard) sono buoni candidati da aggiungere alla tua lista personalizzata di stop-word.
Come funziona questo strumento nel tuo browser
L'implementazione è semplice. Il testo viene fatto passare attraverso un regex Unicode-aware ([\p{L}\p{N}][\p{L}\p{N}_'-]*/gu) che corrisponde a sequenze di lettere e numeri come parole; le corrispondenze sono normalizzate in minuscolo se l'opzione case-insensitive è attiva; ogni parola viene incrementata in una Map JavaScript; le voci sono poi ordinate per conteggio decrescente e renderizzate come grafico e tabella. Il tempo totale su un documento di 100.000 parole è inferiore a un secondo su un laptop tipico. Map è la struttura dati giusta qui, preserva l'ordine di inserimento, ha lookup e aggiornamento O(1), e si serializza in modo pulito in un array 2D per l'esportazione. Un'implementazione più sofisticata userebbe Intl.Segmenter (l'API di segmentazione Unicode-aware, baseline dall'aprile 2024) per lingue con confini di parole non banali, particolarmente CJK; l'approccio regex funziona bene per le lingue europee e si rompe per cinese, giapponese e thailandese che non hanno separatori di parole con spazi bianchi.
Privacy: perché il solo-browser conta qui
Le bozze di scrittura non pubblicate, post di blog, memo interni, deliverable per clienti, capitoli di manoscritti, articoli accademici in corso, sono esattamente il tipo di testo dove caricare a un servizio di terze parti è indesiderabile. Gli strumenti di frequenza delle parole lato server richiedono di inviare l'intero testo a un endpoint remoto, il che significa che rimane nei log del server, possibilmente in una cache CDN, possibilmente in una pipeline di analisi, possibilmente in un backup. Per il testo pubblicato la questione è discutibile. Per il lavoro di bozza, copy cliente sotto NDA, o qualsiasi manoscritto che non vuoi ancora che nessuno fuori dal tuo team veda, l'architettura conta. Questo strumento esegue l'intera pipeline nel tuo browser tramite JavaScript. Il testo non attraversa mai la rete, verifica nel tab Network di DevTools mentre clicchi Analizza, o porta la pagina offline (modalità aereo) dopo che si carica e conferma che l'analisi funziona ancora. Sicuro per bozze confidenziali, deliverable per clienti e qualsiasi testo che non vorresti copiato sull'hard drive di uno sconosciuto.
Domande frequenti
Cosa sono le parole vuote?
Le parole vuote sono parole comuni come «il», «la», «è», «e», «o» che appaiono frequentemente nella maggior parte dei testi ma portano poco significato. Filtrarle permette di concentrare l'analisi sulle parole più cariche di senso.
Come viene calcolata la percentuale?
La percentuale è calcolata così: (occorrenze della parola ÷ totale delle parole) × 100. Per esempio, se una parola appare 5 volte in un testo di 100 parole totali, la sua frequenza è del 5 %.
Questo contatore gestisce frasi (n-gram)?
Solo parole singole, attualmente. Bigrammi (sequenze di due parole come "machine learning"), trigrammi e n-gram più lunghi sono nella lista delle feature future. Il Google Books Ngram Viewer (lanciato il 16 dicembre 2010) è il riferimento pubblico per l'analisi di n-gram su larga scala; per testo personale, NLTK e spaCy distribuiscono estrazione di n-gram in poche righe di Python.
Posso analizzare testi molto lunghi?
Sì, questo strumento viene eseguito interamente nel tuo browser e può elaborare testi di diversi MB. I testi molto grandi possono tuttavia richiedere alcuni secondi per essere elaborati. I tuoi dati non lasciano mai il tuo dispositivo.
Funziona per testo non-inglese?
Parzialmente. Il regex Unicode-aware identifica correttamente i caratteri delle parole in qualsiasi lingua a scrittura latina, cirillica, greca, ebraica o araba. Per cinese, giapponese e thailandese, che non hanno separatori di parole con spazi bianchi, la frequenza grezza per carattere funzionerà ma non è veramente "frequenza delle parole" nel senso linguistico, hai bisogno di segmentazione delle parole prima (jieba per il cinese, MeCab per il giapponese, Intl.Segmenter di ICU per il supporto lato browser). Il filtro di stop-word è solo per l'inglese.
I miei testi vengono caricati?
No. L'analisi gira interamente nel tuo browser tramite JavaScript. Il testo incollato non attraversa mai la rete, verifica nel tab Network di DevTools mentre clicchi Analizza, o porta la pagina offline (modalità aereo) dopo che si carica e lo strumento funzionerà ancora. Sicuro per bozze confidenziali, deliverable per clienti, capitoli di manoscritti sotto NDA, memo interni o qualsiasi altra cosa che non vorresti copiata sull'hard drive di uno sconosciuto.