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 sytuacja | Zalecane praktyki | powód |
|---|---|---|
| Ta sama wartość, inna waluta | Sprawdź, czy znacznik waluty został zmieniony | nie powinny być domyślnie uznawane za równoważne |
| Format nie jest zgodny z instrukcją | Sprawdź ustawienia regionalne źródła lub proces wyodrębniania | Nie należy bezwarunkowo usuwać wszelkich znaków interpunkcyjnych |
| Znak ujemny znika | Łączenie tekstu źródłowego i sprawdzania kontekstu tłumaczenia | Wartości bezwzględne nie powinny być pobierane automatycznie |
| Zmniejszona dokładność | Zaokrąglij i zapisz zgodnie z zasadami | Nie 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 wyniki | należy sprawdzić | nie powinno odbywać się automatycznie |
|---|---|---|
| Ta sama wartość, inna waluta | Czy zmieniono oznaczenie waluty | Domyślnie traktowane jako równoważne |
| Format nie jest zgodny z instrukcją | Region źródłowy lub błąd ekstrakcji | Bezwarunkowo usuń wszystkie znaki interpunkcyjne |
| Znak ujemny znika | Tekst źródłowy i kontekst tłumaczenia | Automatycznie przyjmuj wartość bezwzględną |
| Zmniejszona dokładność | Czy zaokrąglać zgodnie z regułami | Ignoruj 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:
- Najpierw uporządkuj pozycje czeku pod względem kwoty i jednostki oraz wypisz pola biznesowe odpowiadające każdej liczbie.
- Porównaj kolejno pozycje kontroli z rękopisem tłumaczenia i zanotuj różnice w formacie, walucie, znaku ujemnym i dokładności.
- 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
| Format | Przykład | Metoda przetwarzania |
|---|---|---|
| przecinek tysiące, kropka dziesiętna | 1,234.50 | W zakresie, analizowane zgodnie z regułami deklaracji |
| Kropka, tysiące, przecinek, dziesiętny | 1.234,50 | W zakresie, analizowane zgodnie z regułami deklaracji |
| Spacja tysiące, nawiasy dla liczb ujemnych, notacja naukowa | Nie dotyczy tego artykułu | Nie 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


