Liczba tłumaczeń nie jest mała, ale jednostka zostaje utracona: kontrolę należy podzielić na dwa poziomy

W tym artykule zaproponowano hierarchiczną strategię weryfikacji, aby rozwiązać problem łączenia liczb kwot z jednostkami w akceptacji tłumaczenia. Za pomocą modułu dziesiętnego standardowej biblioteki Pythona pokazano, jak dokładnie analizować i porównywać wartości kwot oraz unikać precyzyjnych pułapek zmiennoprzecinkowych; definiuje także granice odpowiedzialności za automatyczną weryfikację kodu i ręczny przegląd semantyczny oraz łączy OmniDoc w celu zilustrowania praktycznej ścieżki akceptacji dostarczania tłumaczenia dokumentów.

Wydaje się, że w tłumaczeniu nie brakuje liczb, ale jednostki mogły zostać po cichu utracone. Jeśli kwoty lub ilości w ofertach, zestawieniach i danych technicznych będą nieprawidłowe, będzie to miało wpływ na rzeczywiste skutki biznesowe, dlatego przed dostawą należy sprawdzić liczby indywidualnie.

Artykuł ten przeznaczony jest dla osób odpowiedzialnych za akceptację tłumaczonych dokumentów, zwłaszcza tych, które często zajmują się wycenami, sprawozdaniami finansowymi i kartami technicznymi. W artykule wyjaśniono, dlaczego 1,234.50 może w tłumaczeniu stać się 1.234,50, jak najpierw zadeklarować reguły wejściowe, a następnie porównać wartości oraz jakie oceny należy jeszcze wykonać ręcznie. Po przeczytaniu możesz zbudować zestaw dwuwarstwowych kontroli: zautomatyzowany kod jest odpowiedzialny za formaty i wartości, a ludzie są odpowiedzialni za semantykę i obszary biznesowe.

W przykładach w tym artykule wykorzystano próbki syntetyczne, a kod przeszedł weryfikację próbek w izolowanym środowisku, ale nie gwarantuje to wszystkich rzeczywistych plików lub efektów produktu. Przed posługiwaniem się ważnymi dokumentami należy zachować oryginały.

Ilość tłumaczeń nie jest mała, jak to przyjąć? Wniosek w jednym zdaniu

W celu weryfikacji numerycznej należy najpierw zadeklarować reguły wejściowe, a następnie porównać znormalizowane wartości. Waluta i jednostka są zachowywane jako niezależne pola.

twoja sytuacjaZalecane praktykipowód
Ta sama wartość, inna walutaSprawdź, czy znacznik waluty został zmienionynie powinny być domyślnie uznawane za równoważne
Format nie jest zgodny z instrukcjąSprawdź ustawienia regionalne źródła lub proces wyodrębnianiaNie należy bezwarunkowo usuwać wszelkich znaków interpunkcyjnych
Znak ujemny znikaŁączenie tekstu źródłowego i sprawdzania kontekstu tłumaczeniaWartości bezwzględne nie powinny być pobierane automatycznie
Zmniejszona dokładnośćZaokrąglij i zapisz zgodnie z zasadamiNie należy ignorować różnic

Najpierw zadeklaruj reguły wejściowe

1,234.50 i 1.234,50 reprezentują odpowiednio te same lub różne ilości w zwyczajach różnych regionów. Bez uprzedniego określenia, jakiego formatu użyć, program nie będzie w stanie stwierdzić, czy przetłumaczone liczby są poprawne.

Obsługuje tylko dwa jawne formaty

W tym artykule omówiono wyłącznie następujące dwa formaty:

  • Przecinek tysięcy, kropka dziesiętna: Na przykład 1,234.50
  • Dotykowe kropki, przecinek dziesiętny: Na przykład 1.234,50

Spacje w tysiącach, nawiasy liczb ujemnych, notacja naukowa i inne metody zapisu nie są objęte zakresem. Gdy reguły źródłowe są niejasne, należy raczej oprzeć się domysłom, niż je podejmować.

Najpierw sprawdź format, a następnie wykonaj konwersję na dziesiętny

Łańcuch jest najpierw sprawdzany zgodnie z zadeklarowanym formatem, a następnie po przekazaniu konwertowany na Decimal.

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")

Te same wartości nie wystarczą

Ten kod odbiera ustawiony ciąg kwoty i nie znajdzie automatycznie kwoty z żadnego dokumentu. Podczas pozycjonowania pól należy zachować etykietę, walutę i lokalizację źródłową. Ta sama liczba, ale zmiana z kilogramów na funty lub cenę całkowitą na cenę jednostkową, nie jest prawidłowym sprawdzeniem.

Porównaj wynikinależy sprawdzićnie powinno odbywać się automatycznie
Ta sama wartość, inna walutaCzy zmieniono oznaczenie walutyDomyślnie traktowane jako równoważne
Format nie jest zgodny z instrukcjąRegion źródłowy lub błąd ekstrakcjiBezwarunkowo usuń wszystkie znaki interpunkcyjne
Znak ujemny znikaTekst źródłowy i kontekst tłumaczeniaAutomatycznie przyjmuj wartość bezwzględną
Zmniejszona dokładnośćCzy zaokrąglać zgodnie z regułamiIgnoruj wszelkie różnice

Dziesiętny rozwiązuje tylko część problemu

Dziesiętny może Ci w tym pomóc

  • Unikaj pewnych błędów binarnej reprezentacji zmiennoprzecinkowej
  • Opieraj porównania numeryczne na wyraźnych znormalizowanych wynikach

Dziesiętny nie może tego zrobić za Ciebie

  • Wybierz reguły zaokrąglania
  • Wyjaśnij kwotę podatku
  • Wykonaj konwersję kursu wymiany

Za każdym razem, gdy dokonujesz konwersji na wartość liczbową, powinieneś zachować wartości przed i po konwersji oraz powód tego na liście kontrolnej.

Liczby w plikach tłumaczeniowych zasługują na osobną akceptację

Używając OmniDoc (portal produktowy) do przetwarzania ofert, raportów lub danych technicznych, możesz je zaakceptować w następującej kolejności:

  1. Najpierw uporządkuj pozycje czeku pod względem kwoty i jednostki oraz wypisz pola biznesowe odpowiadające każdej liczbie.
  2. Porównaj kolejno pozycje kontroli z rękopisem tłumaczenia i zanotuj różnice w formacie, walucie, znaku ujemnym i dokładności.
  3. W przypadku podejrzanych pozycji wróć do tekstu źródłowego, aby potwierdzić, jaką dziedzinę działalności reprezentuje.

Za wykrycie wątpliwości odpowiedzialna jest kontrola cyfrowa, a ostatecznego wyroku należy jeszcze dopełnić, wracając do tekstu źródłowego.

Źródła: Python decimal.

📊 Porównanie rdzeni

FormatPrzykładMetoda przetwarzania
przecinek tysiące, kropka dziesiętna1,234.50W zakresie, analizowane zgodnie z regułami deklaracji
Kropka, tysiące, przecinek, dziesiętny1.234,50W zakresie, analizowane zgodnie z regułami deklaracji
Spacja tysiące, nawiasy dla liczb ujemnych, notacja naukowaNie dotyczy tego artykułuNie w zakresie, nie zgaduj, gdy reguły źródłowe są nieznane

🎯 Która metoda jest dla Ciebie odpowiednia?

Jeśli przetwarzasz wyceny lub raporty

Najpierw uporządkuj pozycje kontrolne dotyczące kwoty i jednostki, a następnie porównaj je pojedynczo z rękopisem tłumaczenia.

Jeśli Twój plik używa innych metod zapisywania liczb

W tym artykule nie uwzględniono spacji w tysiącach, liczb ujemnych w nawiasach ani notacji naukowej. Najpierw potwierdź reguły źródłowe, nie pozwól programowi zgadnąć.

Jeśli chcesz przeliczyć kurs wymiany

System dziesiętny nie wykona za Ciebie konwersji, proszę zanotować wartości przed i po konwersji oraz powód na liście.

❓ Często zadawane pytania (FAQ)

1. Dlaczego nie porównać kwot bezpośrednio przy użyciu liczb zmiennoprzecinkowych?

Użycie dziesiętnego pozwala uniknąć niektórych błędów binarnej reprezentacji zmiennoprzecinkowej, dlatego jest bardziej odpowiednie do porównań numerycznych.

2. Jeśli liczby są takie same, ale waluty są różne, czy można je uznać za równoważne?

Nie powinien być domyślnie uważany za równoważny. Najpierw sprawdź, czy znacznik waluty został zmieniony.

3. Czy wartość bezwzględna może zostać pobrana automatycznie po zniknięciu znaku ujemnego?

Wartość bezwzględna nie powinna być brana automatycznie, lecz sprawdzana w kontekście tekstu źródłowego i tłumaczenia.

4. Czy kod może automatycznie wyszukać kwotę z dowolnego dokumentu?

nie mogę. Kod otrzymuje ciąg znaków kwoty, który został ustawiony. Podczas lokalizowania pola należy zachować etykietę, walutę i lokalizację źródła.

📝 Podsumowanie

Kluczem do weryfikacji liczb jest najpierw zadeklarowanie reguł formatu, następnie porównanie znormalizowanych wartości i pozostawienie waluty i jednostki jako niezależnych pól. Do wykrycia wątpliwych punktów wykorzystuje się automatyczne sprawdzanie, a znaczenie biznesowe nadal wymaga potwierdzenia poprzez powrót do tekstu źródłowego.

Wypróbuj teraz: prześlij dokument, aby rozpocząć tłumaczenie, zachowując oryginalny układ

Zaktualizowano 2026-11-14