Salta al contenuto

Blog ·

Un plurale vago non è un numero

Una protezione che confronta i numeri in nove lingue ha segnalato due difetti inesistenti, e ne ha promosse due per ragioni che con i numeri non c’entrano.

Di Provibr

Ogni articolo che pubblichiamo esiste in nove lingue, e la cosa che più facilmente va storta in una traduzione non è una parola. È un numero. Un conteggio che dice 200 in una lingua e 20 in un’altra è invisibile per un lettore che ne vede una sola, e non esiste un correttore ortografico per questo.

C’è quindi una protezione. Prende la fonte inglese, ne estrae i numeri e pretende che ogni traduzione contenga almeno altrettante occorrenze dello stesso valore. Questa tornata ha prodotto due rapporti rossi su due traduzioni del tutto corrette, e la ragione vale la pena di essere annotata.

La protezione deve leggere parole, non cifre

La versione ovvia di questo controllo confronta le cifre, ed è quella che abbiamo avuto per prima. Qui è quasi inutile, perché il nostro stile di casa scrive i numeri per esteso. Non 38 test ma trentotto test; non 1440 ma millequattrocentoquaranta.

C’è quindi una seconda protezione con dentro una tabella: per ogni valore che vale la pena controllare, come lo scrive ciascuna delle nove lingue. Si contano le occorrenze nell’inglese, si contano in ogni traduzione, e si segnala tutto ciò che risulta mancante.

I valori piccoli sono esclusi di proposito. In ognuna di queste lingue le parole per uno, due e tre sono anche articoli, preposizioni o pezzi di parole più lunghe, e contarle produrrebbe centinaia di rilevamenti che non significano niente. Una protezione che grida al lupo viene saltata, e una protezione saltata è peggio di nessuna protezione.

Contare per sottostringa, e contare dall’alto verso il basso

Due meccanismi rendono possibile tutto il resto, ed entrambi creano il fallimento di cui parla questo articolo.

Il primo è che la corrispondenza deve essere una corrispondenza per sottostringa. L’olandese scrive sedicimila come una parola sola, e l’unico modo per vederci dentro il sedici è guardare all’interno. Parecchie di queste lingue compongono liberamente, quindi ancorarsi ai confini di parola perderebbe la maggior parte dei riscontri veri.

Il secondo è che i valori vengono contati dal più grande al più piccolo, e ogni riscontro viene ritagliato via dal testo prima che si conti il valore successivo. Senza quello, quarantuno viene contato una volta come quarantuno e una volta come quaranta, e allora una lingua che scrive lo stesso numero come una sola parola indivisibile sembra che ne perda uno. Sette dei primi trentasette rilevamenti che questa protezione abbia mai prodotto erano esattamente quello, e nessuno di loro era un difetto.

La corrispondenza per sottostringa insieme al ritaglio è la progettazione giusta. Significa anche che la protezione cerca lettere, e le lettere non sono numeri.

La parola che non è un numero

La frase inglese che l’ha rotta recita: a guard on it names hundreds of non defects.

In quella frase non c’è nessun numero. Hundreds of è una parola di quantità, dello stesso genere di several o plenty, e non è l’affermazione che qualcosa sia successo cento volte. Ma contiene le lettere del numerale, quindi la protezione ha contato un’occorrenza di cento nell’inglese ed è poi andata a cercare cento in otto traduzioni.

Quello che è tornato è questo. L’italiano dice centinaia, il rumeno dice sute de, e nessuno dei due contiene il numerale per cento della propria lingua. Due rapporti rossi, su due frasi che un madrelingua definirebbe perfette.

Le altre sei sono passate, e solo quattro di loro sono passate per una ragione. L’olandese honderden contiene honderd, il tedesco Hunderte contiene hundert, lo spagnolo cientos contiene ciento, il francese centaines contiene cent. Quelle quattro sono lo stesso difetto dell’italiano e del rumeno; la protezione semplicemente non poteva vederlo, perché si dà il caso che la parola vaga sia costruita a partire dal numerale.

Le ultime due sono quelle scomode. Il portoghese è passato perché la parola portoghese per cento, cem, compare dentro parecem, in un’intestazione su due cose che si assomigliano. L’ucraino è passato con 39 riscontri in un solo articolo, perché le lettere cirilliche per cento stanno dentro le parole ordinarie per pagina e per protezione.

Quindi su otto lingue: due hanno fallito su un non difetto, quattro hanno nascosto lo stesso non difetto dietro una coincidenza di grafia, e due erano verdi su parole che con i numeri non c’entrano proprio niente. Una protezione è affidabile quanto le ragioni che stanno dietro i suoi risultati verdi, e qui solo due degli otto verdi riguardavano il conteggio.

Dove deve stare la rimozione, e perché non può stare all’inizio

La correzione è una seconda tabella: i plurali vaghi, lingua per lingua. Hundreds, honderden, Hunderte, cientos e centenares, centaines, centinaia, centenas, sute de, e le forme ucraine. Vanno tolti prima di contare, perché non sono valori.

La parte interessante è il quando. L’istinto è toglierli all’inizio, come passata di pulizia sul testo, e questo romperebbe la protezione in un modo molto più difficile da notare della cosa che ripara.

Il rumeno per quattrocento volte è patru sute de ori. Contiene sute de alla lettera. Se si tolgono i plurali vaghi in apertura si è distrutto un quattrocento vero mentre si toglieva un cento falso, e adesso la protezione riferisce che al rumeno manca un numero che ha in tutta evidenza.

La rimozione avviene quindi dentro il ciclo, nel momento in cui il ciclo arriva al valore cento. A quel punto la passata per quattrocento ha già consumato patru sute, e quello che resta di sute de è davvero la parola vaga. L’ordine che esisteva per un’altra ragione si rivela essere la cosa che rende sicuro tutto questo, il che è un buon argomento per tenere la ragione scritta accanto al codice.

Con i plurali vaghi rimossi il confronto è passato da 224 conteggi e due rilevamenti a 216 conteggi e nessuno. Il conteggio cala perché un valore che compare zero volte nell’inglese non viene più confrontato affatto, il che è esattamente giusto: lì un cento non c’è mai stato.

Sei valori che erano semplicemente assenti

Mentre dimostravamo tutto questo è venuto fuori che alla tabella mancavano sei dei valori usati dai nuovi articoli, quindi quei numeri erano non controllati in otto lingue ciascuno.

Questo è il fallimento più ordinario ed è quello che si ripeterà. Una tabella di valori viene scritta per gli articoli della tornata che l’ha creata, e la tornata successiva scrive numeri diversi. Una riga mancante non fallisce; in silenzio non controlla niente, che è la stessa forma di una voce di allowlist con dentro un refuso, e con quello ci siamo già scottati.

La descrizione onesta di questa protezione è quindi: è una rete dalla maglia nota, cattura la classe di errore per cui è stata costruita, e ogni tornata deve aggiungere i propri valori oppure non ottiene niente. Il che va bene, finché nessuno legge un risultato verde come copertura.

Che cosa annoteremmo

  1. Una parola di quantità non è un valore. Hundreds of è più vicino a several che a 100.
  2. La corrispondenza per sottostringa qui è corretta ed è l’origine del problema. Le lingue che compongono ne hanno bisogno.
  3. Si chieda perché ogni risultato verde sia verde. Quattro dei nostri erano coincidenze e due erano rumore.
  4. Una radice di numerale corta si nasconde dentro parole ordinarie, e il 100 cirillico sta dentro la parola per pagina.
  5. Ordini le passate dal grande al piccolo e ritagli via ogni riscontro, altrimenti i composti contano due volte.
  6. Dove avviene una pulizia conta quanto ciò che toglie. Togliere per primi i plurali vaghi distrugge un quattrocento vero.
  7. Tenga la ragione accanto all’ordine, perché l’ordine è portante e non sembra esserlo.
  8. Una tabella di valori copre solo la tornata che l’ha scritta. Qui ne mancavano sei.
  9. Una riga mancante è silenziosa, esattamente come una voce di allowlist scritta con un refuso.
  10. Dica che cosa una protezione non copre, così nessuno legge il verde come copertura.

Per chiarezza su che cosa sia: il confronto è girato su quattro articoli in otto lingue, 224 conteggi con due rilevamenti prima che i plurali vaghi fossero trattati e 216 senza nessuno dopo, sei valori aggiunti alla tabella, e la rimozione dei plurali vaghi messa dentro il ciclo invece che prima, così che il rumeno per quattrocento sopravviva. Insieme a questo quella tornata ha prodotto 886 articoli generati senza avvisi, un controllo dei contenuti di 887 file su 887 identici byte per byte, la suite web a 4594 verdi con le altre suite a 7287, il confronto dei fatti a 1144 conteggi senza nessun fallimento, i token a 64 e i nomi dei collegamenti a 72, sette script e quattro regole di tipografia dimostrati rossi prima di essere creduti verdi, e una scansione di impaginazione di 108 controlli a 390 pixel contro una compilazione di produzione. Non dimostrato: il rumore da sottostringa in ucraino e in portoghese è capito ma non rimosso, cosa che richiede un lettore morfologico invece di una tabella, e ogni traduzione ha ancora un solo lettore.

Dal lavoro di piattaforma su Provibr. Che cosa fanno nove cataloghi a un insieme di controlli fissi si trova in sedicimila chiavi, nove lingue, la protezione che distingue un testo di collegamento accorciato da uno sostituito si trova in due nomi per lo stesso articolo, e la revisione del lettore che ha fatto partire tutta questa serie si trova in tre difetti che nessuno script poteva vedere.

Inizi con un host e un agente

Crei un account, installi l’agente con un solo comando e colleghi il suo primo host Proxmox. Il periodo di prova dura 14 giorni e non chiede alcun dato di pagamento.