Ir para o conteúdo

Blogue ·

Um plural vago não é um número

Uma guarda que compara números em nove línguas comunicou dois defeitos que não eram defeitos, e aprovou duas línguas por razões alheias a números.

Por Provibr

Todos os artigos que publicamos existem em nove línguas, e a coisa com mais probabilidade de correr mal numa tradução não é uma palavra. É um número. Uma contagem que diz 200 numa língua e 20 noutra é invisível para um leitor que só vê uma delas, e não há corretor ortográfico para isso.

Por isso há uma guarda. Pega na fonte inglesa, extrai os números, e exige que cada tradução contenha pelo menos tantas ocorrências do mesmo valor. Esta ronda produziu dois relatórios vermelhos sobre duas traduções que estavam inteiramente corretas, e a razão vale a pena registar.

A guarda tem de ler palavras e não algarismos

A versão evidente desta verificação compara algarismos, e foi essa que tivemos primeiro. É quase inútil aqui, porque o nosso estilo da casa em inglês escreve os números por extenso. Não 38 testes mas trinta e oito testes; não 1440 mas mil quatrocentos e quarenta.

Por isso há uma segunda guarda com uma tabela lá dentro: para cada valor que vale a pena verificar, como cada uma das nove línguas o soletra. Contar as ocorrências no inglês, contá-las em cada tradução, e comunicar tudo o que fique aquém.

Os valores pequenos estão deliberadamente excluídos. Em todas estas línguas as palavras para um, dois e três são também artigos, preposições ou pedaços de palavras mais longas, e contá-las produziria centenas de achados que não significam nada. Uma guarda que grita lobo passa a ser saltada, e uma guarda saltada é pior do que nenhuma guarda.

Contar por subcadeia, e contar de cima para baixo

Dois mecanismos tornam o resto disto possível, e ambos criam a falha de que este artigo trata.

O primeiro é que a correspondência tem de ser por subcadeia. O neerlandês escreve dezasseis mil como uma só palavra, e a única maneira de ver ali o dezasseis é olhar para dentro. Várias destas línguas compõem palavras livremente, por isso ancorar em fronteiras de palavra perderia a maior parte das ocorrências verdadeiras.

O segundo é que os valores são contados do maior para o menor, e cada ocorrência é recortada do texto antes de o valor seguinte ser contado. Sem isso, quarenta e um é contado uma vez como quarenta e um e uma vez como quarenta, e depois uma língua que escreva o mesmo número como uma só palavra indivisível parece estar a faltar-lhe uma. Sete dos primeiros trinta e sete achados que a guarda alguma vez produziu eram exatamente isso, e nenhum deles era um defeito.

A correspondência por subcadeia mais o recorte é o desenho certo. Também significa que a guarda anda à procura de letras, e letras não são números.

A palavra que não é um número

A frase inglesa que a fez falhar diz: uma guarda sobre ele nomeia centenas de não defeitos.

Não há número nenhum nessa frase. Centenas de é uma palavra de quantidade, do mesmo género que várias ou imensas, e não é uma afirmação de que alguma coisa aconteceu cem vezes. Mas em inglês contém as letras do numeral, por isso a guarda contou uma ocorrência de cem no inglês e foi depois à procura de cem em oito traduções.

O que voltou foi isto. O italiano diz centinaia, o romeno diz sute de, e nenhuma dessas contém o numeral daquela língua para cem. Dois relatórios vermelhos, sobre duas frases que um falante nativo classificaria de perfeitas.

As outras seis passaram, e só quatro delas passaram por uma razão. O neerlandês honderden contém honderd, o alemão Hunderte contém hundert, o espanhol cientos contém ciento, o francês centaines contém cent. Essas quatro são o mesmo não defeito que o italiano e o romeno; a guarda simplesmente não o conseguia ver, porque a palavra vaga acontece ser construída a partir do numeral.

As duas últimas são as incómodas. O português passou porque a palavra portuguesa para cem, cem, aparece dentro de parecem, num título sobre duas coisas que se parecem. O ucraniano passou com 39 ocorrências num artigo, porque as letras cirílicas para cem estão dentro das palavras correntes para página e para guarda.

Portanto, de oito línguas: duas falharam sobre um não defeito, quatro esconderam o mesmo não defeito atrás de uma coincidência de grafia, e duas ficaram verdes sobre palavras que não têm nada que ver com números. Uma guarda só é tão fiável quanto as razões por trás dos seus resultados verdes, e aqui só dois dos oito verdes eram sobre contar.

Onde a remoção tem de acontecer, e porque não pode ir primeiro

A correção é uma segunda tabela: os plurais vagos, por língua. Hundreds, honderden, Hunderte, cientos e centenares, centaines, centinaia, centenas, sute de, e as formas ucranianas. Removê-los antes de contar, porque não são valores.

A parte interessante é o quando. O instinto é removê-los no início, como uma passagem de limpeza sobre o texto, e isso partiria a guarda de uma maneira muito mais difícil de notar do que aquilo que corrige.

O romeno para quatrocentas vezes é patru sute de ori. Contém sute de literalmente. Remova os plurais vagos à cabeça e destruiu um quatrocentos verdadeiro ao remover um cem falso, e agora a guarda comunica que ao romeno falta um número que ele manifestamente tem.

Por isso a remoção acontece dentro do ciclo, no momento em que o ciclo chega ao valor cem. A essa altura a passagem do quatrocentos já consumiu patru sute, e o que resta de sute de é genuinamente a palavra vaga. A ordenação que existia por outra razão acaba por ser a coisa que torna isto seguro, o que é um bom argumento para manter a razão escrita ao lado do código.

Com os plurais vagos removidos a comparação passou de 224 contagens e dois achados para 216 contagens e nenhum. A contagem desce porque um valor que aparece zero vezes no inglês deixa de ser comparado de todo, o que é exatamente certo: nunca ali houve um cem.

Seis valores que estavam simplesmente ausentes

Enquanto provávamos tudo isto, a tabela revelou-se sem seis dos valores que os artigos novos usavam, por isso esses números ficavam por verificar em oito línguas cada.

Essa é a falha mais banal e é a que vai voltar a acontecer. Uma tabela de valores é escrita para os artigos da ronda que a criou, e a ronda seguinte escreve outros números. Uma linha em falta não falha; verifica nada em silêncio, que é a mesma forma que uma entrada de lista de exceções com uma gralha, e já fomos mordidos por isso antes.

A descrição honesta desta guarda é portanto: é uma rede de malha conhecida, apanha a classe de erro para que foi construída, e cada ronda tem de acrescentar os seus próprios valores ou não recebe nada. O que está bem, desde que ninguém leia um resultado verde como cobertura.

O que registaríamos

  1. Uma palavra de quantidade não é um valor. Centenas de está mais perto de várias do que de 100.
  2. A correspondência por subcadeia é a correta aqui e é a origem do problema. As línguas que compõem palavras precisam dela.
  3. Pergunte por que razão cada resultado verde está verde. Quatro dos nossos eram coincidência e dois eram ruído.
  4. Um radical numeral curto esconde-se dentro de palavras correntes, e o 100 cirílico está dentro da palavra para página.
  5. Ordene as passagens do maior para o menor e recorte cada ocorrência, ou as palavras compostas contam duas vezes.
  6. Onde acontece uma limpeza importa tanto como aquilo que ela remove. Remover os plurais vagos primeiro destrói um quatrocentos verdadeiro.
  7. Mantenha a razão ao lado da ordenação, porque a ordenação é estrutural e não parece.
  8. Uma tabela de valores só cobre a ronda que a escreveu. Aqui faltavam seis.
  9. Uma linha em falta é silenciosa, exatamente como uma entrada de lista de exceções mal escrita.
  10. Diga o que uma guarda não cobre, para que ninguém leia verde como cobertura.

Para que fique claro o que isto é: a comparação correu sobre quatro artigos em oito línguas, 224 contagens com dois achados antes de os plurais vagos serem tratados e 216 sem nenhum depois, seis valores acrescentados à tabela, e a remoção dos plurais vagos colocada dentro do ciclo em vez de antes dele para que o romeno para quatrocentas sobreviva. Ao lado disso, essa ronda produziu 886 artigos gerados sem avisos, uma verificação de conteúdo de 887 de 887 ficheiros idênticos byte a byte, a bateria de testes da web a 4594 verdes com as outras baterias a 7287, a comparação de factos a 1144 contagens sem nenhuma a falhar, os tokens a 64 e os nomes de ligação a 72, sete scripts e quatro regras de tipografia provados vermelhos antes de se acreditar que estavam verdes, e uma varredura de disposição de 108 verificações a 390 pixels contra uma compilação de produção. Por provar: o ruído de subcadeia em ucraniano e em português está compreendido mas não removido, o que exige um leitor morfológico e não uma tabela, e cada tradução continua a ter um leitor.

Do trabalho de plataforma na Provibr. O que nove catálogos fazem a um conjunto fixo de controlos está em Dezasseis mil chaves, nove idiomas, a guarda que distingue um texto de ligação encurtado de um substituído está em Dois nomes para o mesmo artigo, e a revisão de leitores que deu início a toda esta série está em Três falhas que nenhum script conseguia ver.

Comece com um host e um agente

Crie uma conta, instale o agente com um único comando e ligue o seu primeiro host Proxmox. O período experimental dura 14 dias e não pede quaisquer dados de pagamento.