Il numero delle traduzioni non è piccolo, ma si perde l'unità: l'ispezione dovrebbe essere divisa in due livelli
Questo articolo propone una strategia di verifica gerarchica per affrontare il punto dolente dell'abbinamento dei numeri di importo con le unità nell'accettazione della traduzione. Attraverso il modulo decimale della libreria standard Python, viene dimostrato come analizzare e confrontare accuratamente valori di importo ed evitare trappole di precisione in virgola mobile; definisce inoltre i limiti di responsabilità della verifica automatizzata del codice e della revisione semantica manuale e combina OmniDoc per illustrare il percorso pratico di accettazione della consegna della traduzione dei documenti.
I numeri nella traduzione non sembrano mancare, ma le unità potrebbero essere andate tranquillamente perdute. Una volta che gli importi o le quantità nei preventivi, nelle dichiarazioni e nei dati tecnici non sono corretti, le effettive implicazioni commerciali ne risentiranno, pertanto i numeri devono essere controllati individualmente prima della consegna.
Questo articolo è scritto per coloro che si occupano dell'accettazione dei documenti tradotti, in particolare per coloro che hanno a che fare frequentemente con preventivi, bilanci e schede tecniche. L'articolo spiegherà perché 1,234.50 potrebbe diventare 1.234,50 nella traduzione, come dichiarare prima le regole di input e poi confrontare i valori e quali valutazioni devono ancora essere eseguite manualmente. Dopo la lettura, puoi creare una serie di controlli a due livelli: il codice automatizzato è responsabile di formati e valori e gli esseri umani sono responsabili della semantica e dei campi aziendali.
Gli esempi in questo articolo utilizzano campioni sintetici e il codice ha superato i controlli dei campioni in un ambiente isolato, ma ciò non rappresenta una garanzia di tutti i file reali o degli effetti del prodotto. Si prega di conservare gli originali prima di maneggiare documenti importanti.
Il numero di traduzioni non è piccolo, come accettarlo? Conclusione di una frase
Per la verifica numerica è necessario dichiarare prima le regole di input e poi confrontare i valori normalizzati. Valuta e unità vengono mantenuti come campi indipendenti.
| la tua situazione | Pratiche consigliate | motivo |
|---|---|---|
| Stesso valore, valuta diversa | Controlla se il tag della valuta è stato modificato | non dovrebbero essere considerati equivalenti per impostazione predefinita |
| Il formato non è conforme alla dichiarazione | Controlla le impostazioni locali di origine o il processo di estrazione | Tutta la punteggiatura non deve essere rimossa incondizionatamente |
| Il segno negativo scompare | Combinazione del testo di partenza e del controllo del contesto della traduzione | I valori assoluti non dovrebbero essere presi automaticamente |
| Precisione ridotta | Arrotondare e registrare secondo le regole | Le differenze non dovrebbero essere ignorate |
Dichiara prima le regole di input
1,234.50 e 1.234,50 rappresentano rispettivamente le stesse o diverse quantità nelle dogane delle diverse regioni. Senza prima specificare quale formato utilizzare, il programma non può dire se i numeri tradotti sono corretti.
Gestisce solo due formati espliciti
Questo articolo tratta solo i due formati seguenti:
- Virgola migliaia, punto decimale: ad esempio
1,234.50 - Punto migliaia, virgola decimale: ad esempio
1.234,50
Non sono compresi nell'intervallo gli spazi delle migliaia, le parentesi per i numeri negativi, la notazione scientifica e altri metodi di scrittura. Quando le regole sulla fonte non sono chiare, le congetture dovrebbero essere contrastate piuttosto che decise.
Verifica prima il formato, quindi esegui la conversione decimale
La stringa viene prima controllata in base al formato dichiarato e quindi convertita in Decimal dopo averlo passato.
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")
Gli stessi valori non bastano
Questo codice riceve la stringa dell'importo che è stata posizionata e non troverà automaticamente l'importo da nessun documento. Quando si posizionano i campi, è necessario preservare l'etichetta, la valuta e la posizione di origine. Lo stesso numero ma la modifica da chilogrammi a libbre, o dal prezzo totale al prezzo unitario, non è un controllo corretto.
| Confronta i risultati | dovrebbe essere controllato | non dovrebbe essere fatto automaticamente |
|---|---|---|
| Stesso valore, valuta diversa | Se il contrassegno valutario è stato modificato | Trattato come equivalente per impostazione predefinita |
| Il formato non è conforme alla dichiarazione | Regione di origine o errore di estrazione | Elimina incondizionatamente tutta la punteggiatura |
| Il segno negativo scompare | Testo di partenza e contesto di traduzione | Assumi automaticamente il valore assoluto |
| Precisione ridotta | Se arrotondare secondo le regole | Ignora tutte le differenze |
Il decimale risolve solo una parte del problema
Decimal può aiutarti a farlo
- Evitare alcuni errori di rappresentazione binaria in virgola mobile
- Basare i confronti numerici su risultati normalizzati espliciti
Decimal non può farlo per te
- Seleziona le regole di arrotondamento
- Spiegare l'importo dell'imposta
- Eseguire la conversione del tasso di cambio
Ogni volta che effettui una conversione in un valore numerico, dovresti conservare i valori prima e dopo la conversione e il motivo della stessa in una lista di controllo.
I numeri nei file di traduzione meritano un'accettazione separata
Quando utilizzi OmniDoc (portale del prodotto) per elaborare preventivi, report o dati tecnici, puoi accettarli nel seguente ordine:
- Per prima cosa suddividi gli elementi dell'assegno per importo e unità ed elenca i campi aziendali corrispondenti a ciascun numero.
- Confronta uno per uno gli elementi di ispezione con il manoscritto di traduzione e registra le differenze di formato, valuta, segno negativo e accuratezza.
- Per gli articoli sospetti, tornare al testo di origine per verificare quale campo aziendale rappresenta.
L'ispezione digitale ha il compito di scoprire i dubbi, e il giudizio finale deve ancora essere completato ritornando al testo di partenza.
Riferimenti: Python decimal.
📊 Confronto fondamentale
| Formato | Esempio | Metodo di elaborazione |
|---|---|---|
| virgola migliaia, punto decimale | 1,234.50 | Nell'ambito, analizzato in base alle regole di dichiarazione |
| Punto, migliaia, virgola, decimale | 1.234,50 | Nell'ambito, analizzato in base alle regole di dichiarazione |
| Spazio alle migliaia, parentesi per i numeri negativi, notazione scientifica | Non applicabile a questo articolo | Non rientra nell'ambito, rifiuta di indovinare quando le regole di origine sono sconosciute |
🎯Quale metodo è adatto a te?
Se elabori preventivi o rapporti
Per prima cosa seleziona le voci di controllo dell'importo e dell'unità, quindi confrontale una per una con il manoscritto di traduzione.
Se il tuo file utilizza altri metodi di scrittura dei numeri
Questo articolo non tratta gli spazi tra migliaia, i numeri negativi tra parentesi o la notazione scientifica. Conferma prima le regole del sorgente, non lasciare che il programma indovini.
Se è necessario effettuare la conversione del tasso di cambio
Decimal non eseguirà la conversione per te, registra i valori prima e dopo la conversione e il motivo nell'elenco.
❓ Domande frequenti (FAQ)
1. Perché non confrontare gli importi direttamente utilizzando i numeri in virgola mobile?
L'uso di Decimal può evitare alcuni errori di rappresentazione binaria in virgola mobile, quindi è più adatto per i confronti numerici.
2. Se i numeri sono gli stessi ma le valute sono diverse, possono essere considerate equivalenti?
Non dovrebbe essere considerato equivalente per impostazione predefinita, controlla prima se il tag della valuta è stato alterato.
3. È possibile assumere automaticamente il valore assoluto quando scompare il segno negativo?
Il valore assoluto non dovrebbe essere preso automaticamente, ma dovrebbe essere controllato insieme al contesto del testo di partenza e della traduzione.
4. Il codice può trovare automaticamente l'importo da qualsiasi documento?
non può. Il codice riceve la stringa dell'importo che è stata posizionata. L'etichetta, la valuta e la posizione di origine devono essere conservate quando si individua il campo.
📝 Riepilogo
La chiave per la verifica dei numeri è dichiarare prima le regole del formato, quindi confrontare i valori normalizzati e mantenere la valuta e l'unità come campi indipendenti. Per scoprire i punti dubbi viene utilizzato un controllo automatizzato e il significato commerciale deve ancora essere confermato tornando al testo di partenza.
Provalo subito: carica il documento per iniziare la traduzione, mantenendo il layout originale


