Vai al contenuto
Allin

Contare le parole è ambiguo, e ogni strumento risponde in modo diverso

Pubblicato il 06/10/2025 · 12 min di lettura · Strumenti testo e lingua

Daniel Okonkwo

Daniel OkonkwoSviluppatore front-end e redattore Tech presso Allin

Performance web · Formati di file

Verificato su 5 fonti

Vedi il profilo
In breve

Un conteggio di parole è la risposta a una domanda su cui nessuno si è messo d'accordo, quindi strumenti diversi danno numeri diversi per lo stesso testo e tutti sono difendibili. Abbiamo preso un paragrafo tecnico di 188 caratteri e lo abbiamo contato in quattro modi. Dividere sugli spazi ha dato 25. Una regola attenta a trattini e apostrofi ha dato 28. La segmentazione Unicode tramite Intl.Segmenter ha dato 33. La nota espressione regolare che riconosce caratteri di parola fra confini ha dato 38: la metà in più del conteggio sugli spazi. La divergenza non è casuale: dividere sugli spazi tratta state-of-the-art e un URL intero come una parola ciascuno, la regex li spezza in quattro, e la segmentazione atterra in mezzo tenendo insieme contrazioni e separatori delle migliaia ma spezzando i composti con trattino. Su prosa davvero semplice i quattro metodi coincidono esattamente — abbiamo eseguito un paragrafo di 160 caratteri e tutti hanno restituito 29 — e su 50.000 caratteri di testo d'articolo ordinario sono rimasti entro il 4,5 % l'uno dall'altro. Il divario si apre solo dove un testo è denso di composti, cifre, indirizzi e unità legate dalla punteggiatura. In cinese si apre del tutto: dividere sugli spazi restituisce 1 per una frase intera e la regex di caratteri di parola restituisce 0.

Un conteggio di parole è una definizione, non una misura. Abbiamo contato lo stesso paragrafo in quattro modi ottenendo 25, 28, 33 e 38; poi abbiamo contato 50.000 caratteri di prosa ordinaria ottenendo accordo entro il 4,5 %. Lo scarto dipende interamente da composti, cifre e URL.

Quattro metodi, un paragrafo, quattro risposte

Ecco il paragrafo che abbiamo usato, lungo 188 caratteri e tipico della scrittura tecnica: «The state-of-the-art model doesn't stop at 1,234 tokens—it reads the whole page, including https://example.com/docs, and re-runs the check twice. That's 98.6% coverage, up from two-thirds.» Nulla in esso è artificioso; ogni sua caratteristica compare nella documentazione di prodotto ordinaria.

Dividere su sequenze di spazi dà 25 unità. È la definizione più semplice possibile e quella a cui la maggioranza arriva da sola: una parola è ciò che sta fra due spazi. Tratta state-of-the-art come una parola, l'URL intero come una parola e tokens—it come una parola, perché la lineetta lunga non ha spazi intorno.

L'espressione regolare che riconosce caratteri di parola fra confini di parola dà 38. Spezza state-of-the-art in quattro, doesn't in due, 1,234 in due, 98.6 in due e l'URL in https, example, com e docs. Ognuna di quelle divisioni è esattamente ciò che il pattern prescrive: un carattere di parola lì è una lettera, una cifra o un trattino basso, quindi trattino, apostrofo e virgola sono tutti confini. Il risultato supera di metà il conteggio sugli spazi.

La segmentazione Unicode, disponibile nel browser e in Node come Intl.Segmenter con granularity «word», dà 33. È l'unica delle quattro ad avere una specifica alle spalle, e le sue scelte sono nettamente più umane: tiene doesn't e That's interi, tiene 1,234 intero, tiene example.com intero, e spezza state-of-the-art in quattro perché lo standard tratta il trattino come una rottura. Una quarta regola, scritta per tenere insieme lettere e cifre attraverso trattini, apostrofi, punti e virgole interni, dà 28: fra le regole macchina, la più vicina a ciò che direbbe una persona a cui si chiedesse di contare ad alta voce.

La correzione onesta: su prosa semplice concordano tutti

Sarebbe più ordinato affermare che i conteggi di parole discordano ovunque, e non è vero. Abbiamo contato un paragrafo di 160 caratteri di prosa narrativa ordinaria — nessun composto, nessuna cifra, nessun indirizzo — e i quattro metodi hanno restituito esattamente 29. Poi abbiamo contato 49.616 caratteri del testo inglese degli articoli di questo sito e abbiamo ottenuto 8622 dalla divisione sugli spazi, 8537 dalla regola con trattini, 8729 dalla segmentazione e 8917 dall'espressione regolare. Dal più basso al più alto lo scarto è del 4,5 %.

Quindi l'affermazione vera è più stretta e più utile di «i conteggi di parole non sono affidabili». Sono affidabili sulla prosa e inaffidabili non appena un testo mescola prosa e materiale leggibile dalla macchina. Il nostro paragrafo tecnico si estende da 25 a 38, uno scarto del 52 %, su 188 caratteri. Una clausola contrattuale con una cifra, un aggettivo composto, un URL e un orario si estende da 24 a 33, il 38 %. Il predittore non è la lunghezza del testo, ma la densità di ciò che non sono parole comuni.

Dove esattamente i metodi si separano

I composti con trattino sono la maggiore singola fonte di disaccordo. state-of-the-art conta come uno con la divisione sugli spazi e con la regola dei trattini, e come quattro sia con l'espressione regolare sia con la segmentazione Unicode. Qualsiasi testo con più composti simili — una specifica, una scheda prodotto, un documento legale — mostrerà un divario visibile fra strumenti già solo per questo.

Le contrazioni dividono il campo in altro modo. doesn't vale una parola per la divisione sugli spazi, una per la segmentazione e una per la regola dei trattini, ma due per l'espressione regolare, che tratta l'apostrofo come confine e lascia una t orfana. L'apostrofo curvo si comporta allo stesso modo, quindi passare un documento agli apostrofi tipografici non lo risolve. Il plurale possessivo è più discreto: the students' work conta tre con ogni metodo, perché l'apostrofo sta a fine unità e non al suo interno.

Numeri e indirizzi fanno il resto. 1,234 e 98.6 valgono ciascuno uno per tre metodi e due per l'espressione regolare, incapace di distinguere un separatore delle migliaia o una virgola decimale dalla punteggiatura. Un indirizzo di posta vale uno, due o tre a seconda del metodo; un URL vale uno, tre o quattro. E una sigla scritta con i punti — U.S.A. — vale una parola per la divisione sugli spazi, la segmentazione e la regola dei trattini, ma tre per l'espressione regolare. La punteggiatura che unisce due parole senza spazio intorno spezza tutto tranne la divisione sugli spazi: tokens—it, 2024–2026, and/or e wait…what valgono tutti due per tre metodi e uno per il quarto.

Cinese e giapponese, dove la divisione sugli spazi restituisce 1

Prendi una frase cinese di sedici caratteri senza spazi, come le frasi cinesi generalmente non ne hanno. Dividere sugli spazi restituisce 1: l'intera frase è un'unità. L'espressione regolare di caratteri di parola restituisce 0, perché la classe di caratteri di parola in un pattern senza flag Unicode copre solo lettere ASCII, cifre e trattino basso, e un carattere cinese non è nessuno di questi. La regola Unicode con trattini restituisce 2, perché la frase ha una virgola interna e la regola vede due sequenze di lettere.

La segmentazione Unicode restituisce 8, e le otto unità che trova sono le parole che un lettore individuerebbe. La frase giapponese equivalente, di ventuno caratteri, si segmenta in undici. È lavoro da dizionario più che da pattern, ed è per questo che vale la pena ricorrere alla segmentazione anche in un prodotto in alfabeto latino: è l'unico metodo dell'elenco che non restituisce in silenzio una risposta sbagliata su testo per cui non è stato progettato. Non richiede neppure di conoscere la lingua in anticipo: segmentare la frase cinese con la lingua inglese ha dato le stesse otto unità.

Perché il conteggio di un editore e quello di un elaboratore di testi differiscono

Un elaboratore di testi conta ciò che il suo autore ha deciso sia una parola, il che in pratica si avvicina alla divisione sugli spazi con qualche aggiustamento: è ottimizzato per una persona che scrive prosa e vuole che il numero nella barra di stato sembri giusto. Un sistema di gestione dei contenuti conta spesso con un'espressione regolare, perché era ciò che c'era nel linguaggio in cui è stato scritto. Un editore che paga a parola può non contare nessuna delle due, e dividere invece il numero di caratteri per una cifra fissa, perché così la discussione sui composti sparisce del tutto.

Nessuno bara. Sono tre risposte a una domanda senza forma canonica, e l'unica cosa che va storta è confrontarle. Se ti dicono che un pezzo è di 1500 parole, quel numero è privo di senso finché non sai quale conteggio lo ha prodotto. Sul nostro paragrafo di prova, mille parole significano 7520 caratteri se il conteggio è sugli spazi e 4947 caratteri se è sulla regex: la stessa quantità nominale consegna metà in più in una lettura rispetto all'altra.

I conteggi di caratteri non sfuggono al problema, lo spostano. Un carattere è un'unità contesa quanto una parola: unità di codice, punti di codice e gruppi di grafemi danno tre numeri diversi per la stessa stringa, e qualsiasi testo con una emoji o un accento combinante li produrrà tutti e tre. Lo abbiamo smontato in un pezzo a parte sui limiti di caratteri; in breve, entrambi i conteggi sono definizioni, e un limite espresso in uno dei due resta incompleto finché non nomina la definizione.

Che fare quando il limite è contrattuale

Nomina il contatore, non solo il numero. «Non più di 2000 parole» non è una specifica; «non più di 2000 parole come contate da X» lo è. Accordarsi su uno strumento basta: entrambe le parti incollano il testo nello stesso contatore e ottengono la stessa risposta, qualunque definizione implementi. Ciò che non deve accadere è che ciascuna parte usi il proprio e scopra il divario dopo la consegna.

Se non puoi nominare uno strumento, enuncia una regola in prosa: se i composti con trattino contano come uno o come più, se un URL conta come uno, se le cifre contano affatto. Quelle tre frasi eliminano quasi tutto il disaccordo, perché quelle tre categorie spiegano quasi tutto lo scarto del 52 % che abbiamo misurato. E se vuoi un'unità davvero difficile da contestare, usa i caratteri esclusi gli spazi e di' quale carattere intendi: come misura dello sforzo è peggiore, come misura della lunghezza molto migliore.

Regex di caratteri di parola
Lo stesso frammento contato in quattro modi — Node 26, Intl.Segmenter con granularity "word"
FrammentoDivisione sugli spaziRegex di caratteri di parolaSegmentazione UnicodeRegola con trattini
state-of-the-art1441
doesn't1211
1,2341211
U.S.A.1311
https://example.com/docs1433
tokens—it (lineetta lunga, senza spazi)1222
Una frase cinese di 16 caratteri1082
Conta occorrenzeConta quante volte una parola o frase compare nel testo.Prova lo strumento

Domande frequenti

Quale conteggio di parole è quello giusto?
Non ce n'è uno giusto, solo uno adatto. Se il conteggio esiste perché un lettore sappia quanto è lungo un pezzo, la divisione sugli spazi e la segmentazione Unicode vanno entrambe bene, e la segmentazione copre più lingue. Se esiste perché una macchina indicizzi o tronchi, la segmentazione è l'unica con una specifica pubblicata alle spalle. Se esiste perché del denaro passi di mano, quello giusto è quello che entrambe le parti hanno nominato in anticipo.
Perché il mio conteggio di parole salta quando incollo da un sito?
Di solito perché il testo incollato ha portato con sé URL, cifre e termini con trattino, che sono le tre categorie su cui i metodi divergono di più. Il nostro paragrafo tecnico di prova varia del 52 % fra il metodo più basso e quello più alto, mentre un paragrafo narrativo ordinario dà lo stesso numero con tutti e quattro. Una seconda causa sono i caratteri invisibili — spazi unificatori da un numero formattato, un giuntore a larghezza zero da una emoji — che possono fondere o spezzare unità senza mostrare nulla sullo schermo.
La regex di caratteri di parola funziona per lingue con accenti?
Non senza aiuto. Nella sua forma semplice la classe di caratteri di parola copre lettere ASCII, cifre e trattino basso, il che significa che una lettera accentata è un confine e non parte di una parola. Un testo francese o portoghese sarà quindi sovracontato, con ogni parola accentata spezzata sull'accento. Il rimedio è scrivere il pattern sulle proprietà Unicode di lettera e numero, che è ciò che fa la regola con trattini di questo articolo, o usare la segmentazione e saltare la domanda.
Intl.Segmenter è disponibile ovunque?
Fa parte dello standard di internazionalizzazione di ECMAScript ed è presente nei browser attuali e in Node, dove abbiamo prodotto ogni numero di questo articolo. La riserva pratica non è la disponibilità ma i dati: la qualità della segmentazione dipende dai dati di lingua con cui il runtime è stato distribuito, quindi due ambienti possono divergere leggermente sullo stesso testo. Per contare prosa in alfabeto latino la differenza è trascurabile; per il giapponese, dove la segmentazione è un vero problema di dizionario, non lo è.
Come dovrebbe trattare le emoji un contatore di parole?
In modo coerente, e di solito non contandole come parole. Nel nostro test «Great work 👍 thanks» dà quattro con la divisione sugli spazi, che conta l'emoji come parola, e tre con gli altri metodi, che non lo fanno. Nessuno sbaglia, ma un contatore che riporta quattro dovrebbe dirlo, perché altrimenti chi scrive con un limite metterà a bilancio una parola che non porta testo. Qualunque scelta tu faccia, applicala all'intero documento e non emoji per emoji.
Posso convertire fra conteggi di parole con un rapporto fisso?
Solo molto approssimativamente, e solo per la prosa. Su 50.000 caratteri di testo d'articolo ordinario i quattro metodi sono rimasti entro il 4,5 % l'uno dall'altro, quindi lì un unico rapporto è un'approssimazione praticabile. Su un paragrafo tecnico gli stessi quattro si allargano del 52 %, e nessun rapporto ci sopravvive. Se devi stimare, stima dai caratteri: la nostra prosa d'articolo in inglese sta sui 5,75 caratteri per parola secondo gli spazi, e quel valore è molto più stabile fra tipi di testo del rapporto fra due regole di conteggio.

Articoli che potrebbero interessarti

Tutte le guide
GuidaFormattare i numeri per sei lingue: separatori, valuta e il ritorno al valore1.234,56 e 1,234.56 sono lo stesso numero, e confonderli cambia il valore che un lettore legge. Abbiamo eseguito Intl.NumberFormat per tutte e sei le lingue del sito e stampato ogni separatore — compreso quello invisibile usato dal francese — e poi misurato perché parseFloat non può disfare nulla di tutto ciò.SpiegazioneFrequenza delle parole e legge di Zipf: abbiamo contato sei libri in sei lingue e stimato la pendenzaLa parola di rango n compare circa 1/n volte rispetto alla prima. Abbiamo contato sei libri di pubblico dominio, stampato rango × frequenza, stimato log frequenza contro log rango e ottenuto pendenze fra -1,02 e -1,08 in tutte e sei le lingue — più i due punti in cui la legge si rompe.SpiegazioneDove una riga può andare a capo: l'algoritmo Unicode dietro ogni paragrafo mandato a capo«Andare a capo sugli spazi» fallisce nella maggior parte dei sistemi di scrittura. UAX #14 assegna a ogni carattere una classe di interruzione di riga; abbiamo cercato le nostre in Unicode 17.0.0 ed eseguito un'implementazione conforme su spazi unificatori, trattini morbidi, spazi a larghezza zero, URL, giapponese e thai.SpiegazioneLe emoji sono più difficili di quanto sembri: perché «basta toglierle» non ha una risposta in una rigaUna emoji visibile può valere un punto di codice o quattordici unità UTF-16. Abbiamo lanciato tre espressioni regolari diffuse su una frase vera e ognuna si è rotta in modo diverso; una ha cancellato le cifre. Ecco perché, quale proprietà Unicode risponde a quale domanda, e la regola a gruppi di grafemi che funziona davvero.GuidaI limiti di caratteri che mordono davvero: unità di codice, code point e grafemiUn carattere è tre cose insieme. Un'emoji con tonalità di pelle è 1 grafema, 2 code point e 4 unità UTF-16. Ogni conteggio di questa guida è stato misurato in Node, più il motivo per cui un SMS scende da 160 a 70 e perché VARCHAR(255) non sono 255 di niente in particolare.SpiegazioneChe cosa misurano davvero gli indici di leggibilità (e le tre cose che non vedono)Il Flesch Reading Ease e il livello Flesch-Kincaid contano sillabe e lunghezza delle frasi. Nient'altro. Entrambe le formule per intero, un brano valutato da cima a fondo e il trucco della virgola che regala 3,9 anni scolastici senza cambiare una parola.

Strumenti correlati

Fonti

Hai notato un errore in questo articolo?