Кількість перекладів не мала, але одиниця втрачається: перевірку слід розділити на два рівні
У цій статті пропонується стратегія ієрархічної перевірки для вирішення проблемної точки поєднання чисел суми з одиницями під час прийняття перекладу. Через десятковий модуль стандартної бібліотеки Python демонструється, як точно аналізувати та порівнювати значення кількості та уникати пасток точності з плаваючою комою; він також визначає межі відповідальності автоматизованої перевірки коду та ручного семантичного перегляду, а також об’єднує OmniDoc, щоб проілюструвати практичний шлях прийняття перекладу документів.
Числа в перекладі, здається, не відсутні, але одиниці могли бути тихо втрачені. Коли суми або кількості в пропозиціях, заявах і технічних даних будуть неправильними, це вплине на фактичні наслідки для бізнесу, тому цифри потрібно перевірити окремо перед доставкою.
Ця стаття написана для тих, хто відповідає за прийняття перекладених документів, особливо для тих, хто часто має справу з пропозиціями, фінансовими звітами та технічними характеристиками. У статті буде пояснено, чому 1,234.50 може перетворитися на 1.234,50 у перекладі, як спочатку оголосити правила введення, а потім порівняти значення, і які судження ще потрібно зробити вручну. Після прочитання ви можете створити набір дворівневих перевірок: автоматизований код відповідає за формати та значення, а люди відповідають за семантику та бізнес-поля.
У прикладах у цій статті використовуються синтетичні зразки, і код пройшов перевірку зразків в ізольованому середовищі, але це не є гарантією всіх реальних файлів або ефектів продукту. Будь ласка, збережіть оригінали, перш ніж працювати з важливими документами.
Перекладів не мало, як це прийняти? Висновок одним реченням
Для чисельної перевірки спочатку повинні бути оголошені правила введення, а потім порівняні нормалізовані значення. Валюта та одиниця зберігаються як незалежні поля.
| ваша ситуація | Рекомендовані практики | причина |
|---|---|---|
| Однакова вартість, інша валюта | Перевірте, чи змінено тег валюти | не слід вважати еквівалентом за умовчанням |
| Формат не відповідає заяві | Перевірте вихідну мову або процес вилучення | Усі розділові знаки не слід вилучати беззастережно |
| Знак мінус зникає | Поєднання перевірки вихідного тексту та контексту перекладу | Абсолютні значення не повинні прийматися автоматично |
| Знижена точність | Округліть і запишіть за правилами | Не варто ігнорувати відмінності |
Спочатку оголосите правила введення
1,234.50 і 1.234,50 відповідно представляють однакові або різні кількості в звичаях різних регіонів. Без попереднього визначення формату використання програма не зможе визначити, чи правильні перекладені числа.
Обробляє лише два явних формати
Ця стаття охоплює лише такі два формати:
- Тисячі з комою, десяткова крапка: наприклад
1,234.50 - Крапка тисячі, кома десяткова: наприклад
1.234,50
Пробіли в тисячах, дужки для від’ємних чисел, наукові позначення та інші методи запису не входять до діапазону. Коли правила джерела незрозумілі, слід опиратися здогадкам, а не приймати рішення.
Спочатку перевірте формат, а потім виконайте десяткове перетворення
Рядок спочатку перевіряється відповідно до оголошеного формату, а потім після його передачі перетворюється на 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")
Однакові значення недостатньо
Цей код отримує рядок суми, який було розміщено, і не знаходить автоматично суму в жодному документі. При розміщенні полів слід зберегти мітку, валюту та вихідне розташування. Те саме число, але зміна від кілограмів до фунтів або загальної ціни до ціни за одиницю, не є правильною перевіркою.
| Порівняйте результати | слід перевірити | не слід робити автоматично |
|---|---|---|
| Однакова вартість, інша валюта | Чи була змінена марка валюти | За умовчанням розглядається як еквівалент |
| Формат не відповідає заяві | Регіон джерела або помилка вилучення | Беззастережно вилучити всі розділові знаки |
| Знак мінус зникає | Вихідний текст і контекст перекладу | Автоматично приймати абсолютне значення |
| Знижена точність | Чи округлювати за правилами | Ігноруйте всі відмінності |
Decimal вирішує лише частину проблеми
Decimal може допомогти вам у цьому
- Уникайте певних помилок двійкового представлення з плаваючою комою
- Чисельні порівняння базуються на явних нормалізованих результатах
Decimal не може зробити це за вас
- Виберіть правила округлення
- Поясніть суму податку
- Виконайте конвертацію обмінного курсу
Кожного разу, коли ви робите будь-яке перетворення в числове значення, ви повинні зберегти значення до і після перетворення та причину цього в контрольному списку.
Числа у файлах перекладу заслуговують окремого прийняття
Використовуючи OmniDoc (портал продуктів) для обробки пропозицій, звітів або технічних даних, ви можете приймати їх у такому порядку:
- Спочатку відсортуйте позиції перевірки за сумою та одиницею виміру та перерахуйте бізнес-поля, що відповідають кожному номеру.
- Порівняйте елементи перевірки з рукописом перекладу один за одним і запишіть відмінності у форматі, валюті, від’ємному знаку та точності.
- Для підозрілих елементів поверніться до вихідного тексту, щоб підтвердити, яку сферу діяльності він представляє.
Цифрова перевірка відповідає за виявлення сумнівів, і остаточне рішення все ще потрібно завершити, повернувшись до вихідного тексту.
Джерела: Python decimal.
📊 Основне порівняння
| Формат | приклад | Спосіб обробки |
|---|---|---|
| кома тисячі, крапка десяткова | 1,234.50 | У межах області, аналізується відповідно до правил оголошення |
| Крапка, тисячі, кома, десяткова кома | 1.234,50 | У межах області, аналізується відповідно до правил оголошення |
| Пропуск тисяч, дужки для від’ємних чисел, науковий запис | Не стосується цієї статті | Не входить у рамки, відмовляйтеся вгадувати, коли правила джерела невідомі |
🎯 Який спосіб вам підходить?
Якщо ви обробляєте пропозиції чи звіти
Спочатку відсортуйте контрольні пункти суми та одиниці, а потім звірте їх одну за одною з рукописом перекладу.
Якщо ваш файл використовує інші методи запису чисел
Ця стаття не охоплює пробіли в тисячах, від’ємні числа в квадратних дужках або наукову нотацію. Спочатку підтвердьте правила джерела, не дозволяйте програмі вгадувати.
Якщо вам потрібно зробити конвертацію обмінного курсу
Decimal не виконає перетворення за вас, запишіть значення до і після перетворення та причину в списку.
❓ Часті запитання (FAQ)
1. Чому б не порівняти суми безпосередньо за допомогою чисел з плаваючою комою?
Використання Decimal може уникнути деяких помилок двійкового представлення з плаваючою комою, тому воно більше підходить для числових порівнянь.
2. Якщо цифри однакові, але валюти різні, чи можна вважати їх еквівалентними?
Не слід вважати еквівалентом за замовчуванням, спочатку перевірте, чи тег валюти не було змінено.
3. Чи можна автоматично взяти абсолютне значення, коли зникає мінус?
Абсолютне значення не слід брати автоматично, а перевіряти в поєднанні з контекстом вихідного тексту та перекладу.
4. Чи може код автоматично знайти суму з будь-якого документа?
не можна. Код отримує рядок суми, яка була розміщена. Мітку, валюту та розташування джерела слід зберегти під час розташування поля.
📝 Підсумок
Ключ до перевірки числа полягає в тому, щоб спочатку оголосити правила формату, потім порівняти нормалізовані значення та зберегти валюту та одиницю як незалежні поля. Автоматична перевірка використовується для виявлення сумнівних моментів, а бізнес-сенс ще потрібно підтвердити, повернувшись до вихідного тексту.
Спробуйте зараз: завантажте документ, щоб розпочати переклад, зберігаючи вихідний макет


