O número da tradução não é pequeno, mas a unidade se perde: a fiscalização deve ser dividida em dois níveis

Este artigo propõe uma estratégia de verificação hierárquica para abordar o problema de emparelhar números de quantidade com unidades na aceitação da tradução. Por meio do módulo decimal da biblioteca padrão Python, é demonstrado como analisar e comparar valores de quantidade com precisão e evitar armadilhas de precisão de ponto flutuante; ele também define os limites de responsabilidade da verificação automatizada de código e da revisão semântica manual e combina o OmniDoc para ilustrar o caminho prático de aceitação da entrega de tradução de documentos.

Os números na tradução não parecem estar faltando, mas as unidades podem ter sido perdidas silenciosamente. Uma vez que os valores ou quantidades nas cotações, declarações e dados técnicos estejam incorretos, as implicações reais do negócio serão afetadas, portanto os números precisam ser verificados individualmente antes da entrega.

Este artigo foi escrito para aqueles que são responsáveis pela aceitação de documentos traduzidos, especialmente aqueles que lidam frequentemente com cotações, demonstrações financeiras e fichas técnicas. O artigo explicará por que 1,234.50 pode se tornar 1.234,50 na tradução, como declarar primeiro as regras de entrada e depois comparar os valores e quais julgamentos ainda precisam ser feitos manualmente. Após a leitura, você pode construir um conjunto de verificações de duas camadas: o código automatizado é responsável pelos formatos e valores, e os humanos são responsáveis pela semântica e pelos campos de negócios.

Os exemplos neste artigo usam amostras sintéticas e o código passou nas verificações de amostra em um ambiente isolado, mas isso não representa uma garantia de todos os arquivos reais ou efeitos do produto. Guarde os originais antes de manusear documentos importantes.

O número de traduções não é pequeno, como aceitar? Conclusão de uma frase

Para verificação numérica, as regras de entrada devem ser declaradas primeiro e depois os valores normalizados comparados. A moeda e a unidade são mantidas como campos independentes.

sua situaçãoPráticas recomendadasrazão
Mesmo valor, moeda diferenteVerifique se a etiqueta da moeda foi alteradanão deve ser considerado equivalente por padrão
O formato não está em conformidade com a declaraçãoVerifique a localidade de origem ou o processo de extraçãoToda pontuação não deve ser removida incondicionalmente
O sinal negativo desapareceCombinando texto de origem e verificação de contexto de traduçãoValores absolutos não devem ser obtidos automaticamente
Precisão diminuídaRodada e registro de acordo com as regrasAs diferenças não devem ser ignoradas

Declare as regras de entrada primeiro

1,234.50 e 1.234,50 representam respectivamente quantidades iguais ou diferentes nas alfândegas de diferentes regiões. Sem primeiro especificar qual formato usar, o programa não poderá dizer se os números traduzidos estão corretos.

Lida apenas com dois formatos explícitos

Este artigo cobre apenas os dois formatos a seguir:

  • Vírgula milhares, ponto decimal: por exemplo 1,234.50
  • Milhares de pontos, vírgula decimal: por exemplo 1.234,50

Espaços em milhares, colchetes para números negativos, notação científica e outros métodos de escrita não estão incluídos no intervalo. Quando as regras de origem não são claras, deve-se resistir às suposições em vez de decidir por elas.

Verifique primeiro o formato e depois faça a conversão decimal

A string é primeiro verificada de acordo com o formato declarado e depois convertida para Decimal após passá-la.

import re
from decimal import Decimal

def amount(text, style):
    rules = {
        "comma_group": (r"-?(?:[0-9]{1,3}(?:,[0-9]{3})+|[0-9]+)(?:\.[0-9]+)?", ",", "."),
        "dot_group": (r"-?(?:[0-9]{1,3}(?:\.[0-9]{3})+|[0-9]+)(?:,[0-9]+)?", ".", ",")
    }
    if style not in rules:
        raise ValueError("unknown number convention")
    pattern, grouping, decimal = rules[style]
    if re.fullmatch(pattern, text) is None:
        raise ValueError("number does not match declared convention")
    return Decimal(text.replace(grouping, "").replace(decimal, "."))

assert amount("1,234.50", "comma_group") == amount("1.234,50", "dot_group")
assert amount("-12.50", "comma_group") == Decimal("-12.50")
assert (amount("12.50", "comma_group"), "USD") != (amount("12.50", "comma_group"), "EUR")
for bad in ["12,34.50", "1,234.50 USD", "NaN"]:
    try:
        amount(bad, "comma_group")
    except ValueError:
        pass
    else:
        raise AssertionError("invalid number accepted")

Os mesmos valores não são suficientes

Este código recebe a string de valor que foi posicionada e não encontrará automaticamente o valor em nenhum documento. Ao posicionar campos, o rótulo, a moeda e o local de origem devem ser preservados. O mesmo número, mas mudando de quilogramas para libras, ou do preço total para o preço unitário, não é uma verificação correta.

Comparar resultadosdeve ser verificadonão deve ser feito automaticamente
Mesmo valor, moeda diferenteSe a marca da moeda foi alteradaTratado como equivalente por padrão
O formato não está em conformidade com a declaraçãoRegião de origem ou erro de extraçãoExclua incondicionalmente toda a pontuação
O sinal negativo desapareceTexto fonte e contexto da traduçãoAutomaticamente toma valores absolutos
Redução da precisãoSe o arredondamento é feito de acordo com as regrasIgnore todas as diferenças

Decimal resolve apenas parte do problema

O que o Decimal pode fazer por você

  • Evitar erros em certas representações binárias de ponto flutuante
  • Que as comparações numéricas sejam baseadas em resultados claros e padronizados

Decimal não pode fazer isso por você

  • Escolha regras de arredondamento
  • Explique o valor do imposto
  • Realizar a conversão de taxa de câmbio

Ao converter qualquer valor, os valores antes e depois da conversão e os motivos devem ser mantidos na lista de verificação.

Números em documentos traduzidos merecem aceitação separada

Ao usar o OmniDoc (Entrada de Produto) para processar cotações, relatórios ou documentos técnicos, a aceitação pode ser feita na seguinte ordem:

  1. Primeiro, organize a lista de verificação para valores e unidades, listando os campos de negócios correspondentes a cada número.
  2. Compare os itens da lista de verificação com a tradução um a um, registrando diferenças de formato, moeda, sinal negativo e precisão.
  3. Devolva o item suspeito ao texto de origem para confirmar qual área de negócios ele representa.

Verificações digitais são responsáveis por identificar dúvidas, mas o julgamento final ainda precisa ser concluído retornando ao texto fonte.

Referências: Python decimal.

📊 Comparação de Núcleos

FormatoExemploMétodos de manuseio
Vírgulas em milhares e decimais em pontos1,234.50Dentro do intervalo, analise conforme as regras de declaração
Pontos em milhares e decimais por vírgula1.234,50Dentro do intervalo, analise conforme as regras de declaração
Espaços nos milhares, parênteses para números negativos, notação científicaNão aplicável a este artigoNão dentro do escopo, recusando-se a especular quando as regras de origem são incertas

🎯 Qual método combina com você?

Se você lida com citações ou relatórios

Primeiro, organize a quantidade e as listas de verificação da unidade, depois compare cada item com o manuscrito traduzido.

Se seus documentos usam outras notações numéricas

Este artigo não cobre espaços em milhares, números negativos entre parênteses ou notação científica. Primeiro, confirme as regras de origem e não deixe o programa adivinhar.

Se precisar fazer conversões de câmbio

A Decimal não realizará a conversão para você; por favor, registre os valores antes e depois da conversão e os motivos na lista de verificação.

❓ Perguntas Frequentes (FAQ)

1. Por que não comparar diretamente os valores usando números de ponto flutuante?

O uso do Decimal pode evitar erros em certas representações binárias de ponto flutuante, tornando-o mais adequado para comparação numérica.

2. O número pode ser o mesmo, mas a moeda é diferente, e pode ser considerado equivalente?

Não se deve assumir que é considerado equivalente; primeiro, verifique se a marcação da moeda foi alterada.

3. Valores absolutos podem ser automaticamente tomados quando o sinal negativo desaparece?

Valores absolutos não devem ser automaticamente tomados; em vez disso, verifique em conjunto com o contexto da fonte e dos textos traduzidos.

4. O código consegue encontrar automaticamente o valor em algum documento?

Não. O código recebe uma cadeia de quantidade pré-posicionada; ao localizar campos, o rótulo, a moeda e a localização de origem devem ser mantidos.

📝 Resumo

A chave para a verificação digital é primeiro declarar as regras de formatação, depois comparar os valores padronizados e manter a moeda e a unidade como campos independentes. Verificações automatizadas são usadas para identificar pontos suspeitos, mas o significado comercial ainda precisa ser confirmado até o texto fonte.

Experimente agora: Envie seu documento para começar a traduzir, preservando a formatação original

Atualizado em 2026-11-14