翻訳の数は少なくないが、単位が失われているため、検査を 2 つのレベルに分けて行う必要がある
この記事では、翻訳受理において金額数値と単位を組み合わせる際の問題点に対処するための階層的検証戦略を提案します。 Python 標準ライブラリの 10 進数モジュールを通じて、量の値を正確に解析して比較し、浮動小数点精度のトラップを回避する方法を示します。また、自動化されたコード検証と手動のセマンティック レビューの責任の境界も定義し、OmniDoc を組み合わせて文書翻訳配信の実際的な受け入れパスを示します。
翻訳に記載されている数字は欠けているようには見えませんが、単位はひっそりと失われている可能性があります。見積書、明細書、技術資料の金額や数量に誤りがあると、実際のビジネスに影響を与えるため、納品前に個別に数値を確認する必要があります。
この記事は、翻訳された文書の受け入れを担当する人、特に見積書、財務諸表、技術データシートを頻繁に扱う人を対象に書かれています。この記事では、変換時に 1,234.50 が 1.234,50 になる理由、最初に入力ルールを宣言してから値を比較する方法、さらに手動で行う必要がある判断について説明します。読んだ後は、2 層のチェックのセットを構築できます。自動化されたコードは形式と値を担当し、人間はセマンティクスとビジネス フィールドを担当します。
この記事の例では合成サンプルを使用しており、コードは隔離された環境でのサンプル チェックに合格していますが、これはすべての実際のファイルや製品の効果を保証するものではありません。重要書類を扱う前に原本を保管してください。
翻訳の数は少なくありませんが、どのように受け入れればよいでしょうか?一文の結論
数値検証の場合は、最初に入力ルールを宣言してから、正規化された値を比較する必要があります。通貨と単位は独立したフィールドとして保持されます。
| あなたの状況 | 推奨される実践方法 | 理由 |
|---|---|---|
| 同じ価値、異なる通貨 | 通貨タグが変更されているかどうかを確認する | デフォルトでは同等とみなされるべきではありません |
| 形式がステートメントに準拠していません | ソースロケールまたは抽出プロセスを確認してください | すべての句読点は無条件に削除すべきではありません |
| マイナス記号が消える | ソーステキストと翻訳コンテキストチェックの組み合わせ | 絶対値は自動的に取得されるべきではありません |
| 精度の低下 | ルールに従って丸めて記録する | 違いを無視すべきではない |
最初に入力ルールを宣言します
1,234.50 と 1.234,50 はそれぞれ、異なる地域の税関における同じ数量または異なる数量を表します。最初に使用する形式を指定しないと、プログラムは変換された数値が正しいかどうかを判断できません。
2 つの明示的な形式のみを処理します
この記事では、次の 2 つの形式のみを説明します。
- カンマ千、ピリオド10進数: 例:
1,234.50 - ドット千桁、カンマ 10 進数: 例:
1.234,50
千単位のスペース、負の数の括弧、科学的記数法、その他の記述方法はこの範囲に含まれません。ソースのルールが不明瞭な場合は、それを決定するのではなく、推測に抵抗する必要があります。
最初に形式を確認してから、10 進数変換を実行します
文字列はまず宣言された形式に従ってチェックされ、渡された後に 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")
同じ値では十分ではありません
このコードは、配置された金額文字列を受け取りますが、ドキュメントから金額を自動的に検索することはありません。フィールドを配置するときは、ラベル、通貨、およびソースの場所を保持する必要があります。同じ数値であっても、キログラムからポンドに変更したり、合計価格から単価に変更したりすることは、正しいチェックではありません。
| 結果を比較する | チェックする必要があります | 自動的に行われるべきではありません |
|---|---|---|
| 同じ価値、異なる通貨 | 通貨マークが変更されたかどうか | デフォルトでは同等のものとして扱われます |
| 形式がステートメントに準拠していません | ソース領域または抽出エラー | すべての句読点を無条件に削除します |
| マイナス記号が消える | ソーステキストと翻訳コンテキスト | 絶対値を自動的に取得します |
| 精度の低下 | ルールに従って丸めるかどうか | すべての違いを無視する |
10 進数では問題の一部しか解決されません
Decimal はそれを行うのに役立ちます
- 特定のバイナリ浮動小数点表現エラーを回避する
- 明示的に正規化された結果に基づいた数値比較
Decimal ではそれができません
- 四捨五入ルールの選択
- 税額を説明する
- 為替レート換算を実行する
数値に変換する場合は、変換前後の値とその理由をチェックリストに記録してください。
翻訳ファイル内の番号は個別に承認する必要があります
OmniDoc (製品ポータル)を使用して見積書、レポート、または技術データを処理する場合、次の順序でそれらを受け入れることができます。
- まず金額と単位のチェック項目を整理し、それぞれの数字に対応する事業分野を列挙します。
- 検査項目と翻訳原稿を一つ一つ比較し、形式、通貨、マイナス記号、精度などの違いを記録します。
- 疑わしい項目については、ソース テキストに戻って、どの分野を表しているのかを確認します。
デジタル検査は疑問点を発見する役割を果たしますが、最終的な判断は依然としてソーステキストに戻って完了する必要があります。
参考:Python decimal。
📊 コアの比較
| 形式 | 例 | 加工方法 |
|---|---|---|
| カンマ千、ピリオド 10 進数 | 1,234.50 | スコープ内で、宣言ルールに従って解析されます |
| ドット、千の位、カンマ、小数点 | 1.234,50 | スコープ内で、宣言ルールに従って解析されます |
| スペースの千、負の数の括弧、科学的記数法 | この記事には当てはまりません | 範囲外です。ソースルールが不明な場合は推測を拒否します |
🎯 どの方法があなたに適していますか?
見積書やレポートを処理する場合
まずは金額や単位などのチェック項目を整理し、翻訳原稿と一つ一つチェックしていきます。
ファイルで他の数値書き込み方法が使用されている場合
この記事では、千単位のスペース、括弧で囲まれた負の数、科学表記法については説明しません。最初にソース ルールを確認し、プログラムに推測させないでください。
為替レート換算を行う必要がある場合
Decimal は変換を行いません。変換前後の値とその理由をリストに記録してください。
❓ よくある質問 (FAQ)
1. 浮動小数点数を使用して金額を直接比較してみてはいかがでしょうか?
Decimal を使用すると、バイナリ浮動小数点表現のエラーを回避できるため、数値比較により適しています。
2. 数値が同じでも通貨が異なる場合、それらは同等であると見なすことができますか?
デフォルトでは同等とみなされません。最初に通貨タグが変更されているかどうかを確認してください。
3. マイナス記号が消えたら自動的に絶対値をとることはできますか?
絶対値は自動的に取得されるべきではなく、原文および翻訳のコンテキストと併せてチェックされる必要があります。
4. コードは任意の文書から金額を自動的に見つけることができますか?
できません。コードは、配置された金額文字列を受け取ります。フィールドを見つけるときは、ラベル、通貨、およびソースの場所を保持する必要があります。
📝 概要
数値検証の鍵は、最初に形式ルールを宣言し、次に正規化された値を比較し、通貨と単位を独立したフィールドとして保持することです。自動チェックにより疑わしい点を発見しますが、やはり原文に戻ってビジネス上の意味を確認する必要があります。


