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ší situaciDoporučené postupydůvod
Stejná hodnota, jiná měnaZkontrolujte, zda se nezměnil štítek měnyby neměly být standardně považovány za rovnocenné
Formát neodpovídá prohlášeníZkontrolujte národní prostředí zdroje nebo proces extrakceVeškerá interpunkce by neměla být bezpodmínečně odstraněna
Záporné znaménko zmizíKombinace kontroly zdrojového textu a překladuAbsolutní hodnoty by neměly být brány automaticky
Snížená přesnostKolo a záznam podle pravidelRozdí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ýsledkyby měl být zkontrolovánby se nemělo provádět automaticky
Stejná hodnota, jiná měnaZda byla změněna značka měnyVe výchozím nastavení považováno za ekvivalent
Formát neodpovídá prohlášeníZdrojová oblast nebo chyba extrakceBezpodmínečně odstraňte veškerou interpunkci
Záporné znaménko zmizíZdrojový text a kontext překladuAutomaticky převzít absolutní hodnotu
Snížená přesnostZda zaokrouhlovat podle pravidelIgnorujte 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í:

  1. Nejprve roztřiďte kontrolní položky podle množství a jednotky a uveďte obchodní pole odpovídající každému číslu.
  2. 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.
  3. 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átPříkladZpůsob zpracování
čárka tisíce, desetinná tečka1,234.50V rámci rozsahu analyzováno podle pravidel deklarace
Tečka, tisíce, čárka, desetinné číslo1.234,50V rámci rozsahu analyzováno podle pravidel deklarace
Mezera tisíce, závorky pro záporná čísla, vědecký zápisNevztahuje se na tento článekNení 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í

Aktualizováno 2026-11-14