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ção | Práticas recomendadas | razão |
|---|---|---|
| Mesmo valor, moeda diferente | Verifique se a etiqueta da moeda foi alterada | não deve ser considerado equivalente por padrão |
| O formato não está em conformidade com a declaração | Verifique a localidade de origem ou o processo de extração | Toda pontuação não deve ser removida incondicionalmente |
| O sinal negativo desaparece | Combinando texto de origem e verificação de contexto de tradução | Valores absolutos não devem ser obtidos automaticamente |
| Precisão diminuída | Rodada e registro de acordo com as regras | As 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 resultados | deve ser verificado | não deve ser feito automaticamente |
|---|---|---|
| Mesmo valor, moeda diferente | Se a marca da moeda foi alterada | Tratado como equivalente por padrão |
| O formato não está em conformidade com a declaração | Região de origem ou erro de extração | Exclua incondicionalmente toda a pontuação |
| O sinal negativo desaparece | Texto fonte e contexto da tradução | Automaticamente toma valores absolutos |
| Redução da precisão | Se o arredondamento é feito de acordo com as regras | Ignore 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:
- Primeiro, organize a lista de verificação para valores e unidades, listando os campos de negócios correspondentes a cada número.
- 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.
- 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
| Formato | Exemplo | Métodos de manuseio |
|---|---|---|
| Vírgulas em milhares e decimais em pontos | 1,234.50 | Dentro do intervalo, analise conforme as regras de declaração |
| Pontos em milhares e decimais por vírgula | 1.234,50 | Dentro do intervalo, analise conforme as regras de declaração |
| Espaços nos milhares, parênteses para números negativos, notação científica | Não aplicável a este artigo | Nã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


