Počet překladů není malý, ale jednotka je ztracena: kontrola by měla být rozdělena do dvou úrovní
Tento článek navrhuje hierarchickou ověřovací strategii, která řeší problém spárování čísel množství s jednotkami při přijímání překladu. Prostřednictvím dekadického modulu standardní knihovny Pythonu je ukázáno, jak přesně analyzovat a porovnávat hodnoty množství a vyhnout se pasti s plovoucí desetinnou čárkou; také definuje hranice odpovědnosti automatického ověřování kódu a manuální sémantické kontroly a kombinuje OmniDoc, aby ilustroval praktickou cestu přijímání doručování překladů dokumentů.
Zdá se, že čísla v překladu nechybí, ale jednotky se možná potichu ztratily. Jakmile jsou částky nebo množství v nabídkách, prohlášeních a technických datech nesprávné, budou ovlivněny skutečné obchodní důsledky, takže je třeba čísla před dodáním individuálně zkontrolovat.
Tento článek je napsán pro ty, kteří jsou zodpovědní za přijímání přeložených dokumentů, zejména pro ty, kteří se často zabývají citacemi, finančními výkazy a technickými listy. Článek vysvětlí, proč se 1,234.50 může stát v překladu 1.234,50, jak nejprve deklarovat vstupní pravidla a poté porovnat hodnoty a jaké úsudky je ještě třeba provést ručně. Po přečtení můžete vytvořit sadu dvouvrstvých kontrol: automatizovaný kód je zodpovědný za formáty a hodnoty a lidé jsou zodpovědní za sémantiku a obchodní pole.
Příklady v tomto článku používají syntetické vzorky a kód prošel vzorovými kontrolami v izolovaném prostředí, ale to nepředstavuje záruku všech skutečných souborů nebo efektů produktu. Před manipulací s důležitými dokumenty si prosím uschovejte originály.
Počet překladů není malý, jak to přijmout? Závěr jednou větou
Pro numerické ověření musí být nejprve deklarována vstupní pravidla a poté porovnány normalizované hodnoty. Měna a jednotka jsou zachovány jako nezávislá pole.
| vaší situaci | Doporučené postupy | důvod |
|---|---|---|
| Stejná hodnota, jiná měna | Zkontrolujte, zda se nezměnil štítek měny | by neměly být standardně považovány za rovnocenné |
| Formát neodpovídá prohlášení | Zkontrolujte národní prostředí zdroje nebo proces extrakce | Veškerá interpunkce by neměla být bezpodmínečně odstraněna |
| Záporné znaménko zmizí | Kombinace kontroly zdrojového textu a překladu | Absolutní hodnoty by neměly být brány automaticky |
| Snížená přesnost | Kolo a záznam podle pravidel | Rozdíly by neměly být ignorovány |
Nejprve deklarujte vstupní pravidla
1,234.50 a 1.234,50 reprezentují stejná nebo různá množství ve zvycích různých regionů. Bez předchozího určení formátu, který se má použít, program nemůže zjistit, zda jsou přeložená čísla správná.
Zvládá pouze dva explicitní formáty
Tento článek se zabývá pouze následujícími dvěma formáty:
- Čárka tisíce, desetinná tečka: Například
1,234.50 - Tisíce tečky, desetinná čárka: Například
1.234,50
Mezery v tisících, závorky pro záporná čísla, vědecký zápis a další způsoby psaní nejsou zahrnuty v rozsahu. Když jsou pravidla zdroje nejasná, je třeba se hádání bránit, než se pro ně rozhodovat.
Nejprve ověřte formát a poté proveďte desetinný převod
Řetězec je nejprve zkontrolován podle deklarovaného formátu a poté po předání převeden na desítkové.
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")
Stejné hodnoty nestačí
Tento kód obdrží řetězec částky, který byl umístěn, a automaticky nenajde částku z žádného dokumentu. Při umísťování polí by měl být zachován štítek, měna a zdrojové umístění. Stejné číslo, ale změna z kilogramů na libry nebo z celkové ceny na jednotkovou cenu, není správná kontrola.
| Porovnejte výsledky | by měl být zkontrolován | by se nemělo provádět automaticky |
|---|---|---|
| Stejná hodnota, jiná měna | Zda byla změněna značka měny | Ve výchozím nastavení považováno za ekvivalent |
| Formát neodpovídá prohlášení | Zdrojová oblast nebo chyba extrakce | Bezpodmínečně odstraňte veškerou interpunkci |
| Záporné znaménko zmizí | Zdrojový text a kontext překladu | Automaticky převzít absolutní hodnotu |
| Snížená přesnost | Zda zaokrouhlovat podle pravidel | Ignorujte všechny rozdíly |
Desetinné číslo řeší pouze část problému
Desetinné číslo vám v tom může pomoci
- Vyhněte se určitým chybám binární reprezentace s pohyblivou řádovou čárkou
- Založit numerická srovnání na explicitních normalizovaných výsledcích
Decimal to za vás nemůže udělat
- Vyberte pravidla zaokrouhlování
- Vysvětlete výši daně
- Proveďte převod směnného kurzu
Kdykoli provedete jakýkoli převod na číselnou hodnotu, měli byste si hodnoty před převodem a po převodu a důvod převodu ponechat v kontrolním seznamu.
Čísla v překladových souborech si zaslouží samostatné přijetí
Při použití OmniDoc (produktový portál) ke zpracování nabídek, zpráv nebo technických dat je můžete přijmout v následujícím pořadí:
- Nejprve roztřiďte kontrolní položky podle množství a jednotky a uveďte obchodní pole odpovídající každému číslu.
- Porovnejte položky kontroly s rukopisem překladu jeden po druhém a zaznamenejte rozdíly ve formátu, měně, záporném znaménku a přesnosti.
- U podezřelých položek se vraťte ke zdrojovému textu a ověřte, které obchodní pole představuje.
Digitální kontrola je zodpovědná za odhalení pochybností a konečný úsudek je ještě třeba dokončit návratem ke zdrojovému textu.
Zdroje: Python decimal.
📊 Srovnání jádra
| Formát | Příklad | Způsob zpracování |
|---|---|---|
| čárka tisíce, desetinná tečka | 1,234.50 | V rámci rozsahu analyzováno podle pravidel deklarace |
| Tečka, tisíce, čárka, desetinné číslo | 1.234,50 | V rámci rozsahu analyzováno podle pravidel deklarace |
| Mezera tisíce, závorky pro záporná čísla, vědecký zápis | Nevztahuje se na tento článek | Není v rozsahu, odmítněte hádat, když jsou zdrojová pravidla neznámá |
🎯 Která metoda je pro vás vhodná?
Pokud zpracováváte nabídky nebo zprávy
Nejprve roztřiďte kontrolní položky částky a jednotky a poté je jednu po druhé zkontrolujte podle rukopisu překladu.
Pokud váš soubor používá jiné metody zápisu čísel
Tento článek nepokrývá mezery v tisících, záporná čísla v závorkách ani vědeckou notaci. Nejprve potvrďte zdrojová pravidla, nenechte program hádat.
Pokud potřebujete provést převod směnného kurzu
Desetinné za vás převod neprovede, zaznamenejte si prosím hodnoty před a po převodu a důvod do seznamu.
❓ Často kladené otázky (FAQ)
1. Proč neporovnat částky přímo pomocí čísel s pohyblivou řádovou čárkou?
Použití Desetinné může předejít některým chybám binární reprezentace s pohyblivou řádovou čárkou, takže je vhodnější pro numerická porovnávání.
2. Pokud jsou čísla stejná, ale měny se liší, lze je považovat za ekvivalentní?
Ve výchozím nastavení by nemělo být považováno za ekvivalentní, nejprve zkontrolujte, zda nebyl změněn štítek měny.
3. Může být absolutní hodnota automaticky převzata, když záporné znaménko zmizí?
Absolutní hodnota by se neměla brát automaticky, ale měla by být kontrolována ve spojení s kontextem zdrojového textu a překladu.
4. Dokáže kód automaticky najít částku z jakéhokoli dokladu?
nemůže. Kód obdrží řetězec částky, který byl umístěn. Při hledání pole by měl být zachován štítek, měna a zdrojové umístění.
📝 Shrnutí
Klíčem k ověření čísla je nejprve deklarovat pravidla formátu, poté porovnat normalizované hodnoty a ponechat měnu a jednotku jako nezávislá pole. Automatická kontrola se používá k odhalení pochybných bodů a obchodní význam je stále třeba potvrdit návratem ke zdrojovému textu.
Vyzkoušejte to hned: Nahrajte dokument a začněte překládat při zachování původního rozvržení


