BookTranslator
BookTranslator

翻訳前にOCRの改行とハイフネーションを修正する方法

本来必要なハイフン、段落、リスト、詩などを誤って削除することなく、折り返されたOCRテキストを修復します。後戻り可能なワークフローと、ダウンロード可能な12のクリーンアップ例を活用しましょう。

BookTranslator

BookTranslator Team

25 min read

OCRの改行を修正するには、まず1つの段落に属するテキストを特定します。そのうえで、不要な改行のみを半角スペースに置き換えます。行をまたいで分割された単語については、ハイフンを削除するか残すかを個別に判断します。例えば、 trans- の後に lation が続く場合は translationとなりますが、 well- の後に known が続く場合は well-knownとなります。変更履歴を残し、判断に迷う結合箇所は元のページと照合してください。

本全体に対して「すべての改行を削除」や「すべてのハイフンを削除」を一括実行してはいけません。 一見するとスムーズに読めるテキストに仕上がったように見えても、段落が消失したり、2つのリスト項目が結合されたり、技術的な識別子が改変されたりしていることがあります。目指すべきは改行文字を極力減らすことではなく、信頼性の高い閲覧用・翻訳用テキストを作成することです。

本ガイドは、 テキスト認識が完了した後の手順から始まります。PDFからテキストをコピーした際に文字や数字の誤りがある場合は、まず テキスト層の状態を診断してください。改行を修正したところで、誤認識された B-2O4 を本来の B-204.

各改行が何を表しているかを判別する

元のスキャンデータと抽出した未編集テキストはそのまま残しておきます。作業用コピーを用意し、エディタで空白文字や段落記号を表示する設定をオンにしてください。エディタのウィンドウ幅を変更してみましょう。改行コードを含まずに再流し込み(リフロー)される行は、画面上で折り返されているだけなので、削除すべきものはありません。

実際に挿入されている改行コードについては、別の確認が必要です。1つの連続した段落、見出し、リスト、およびレイアウトが大きく異なるページを元のページ画像と比較してください。タイトルページだけを見て、文書全体の構造を決めつけてはいけません。

改行が表す内容適切な対応判断に必要な根拠
1つの段落内における単語間の視覚的な折り返し保持されている改行を半角スペース1つに置き換える両方の行が原文の同じ段落に属している場合
1つの単語内での分割断片を結合し、通常はレイアウト用のハイフンを削除する本来の綴り、原文の文脈、および言語固有の規則
本来の複合語ハイフンの直後での折り返し改行を削除し、ハイフンは保持する行末の体裁に関係なく、その単語自体にハイフンが含まれる場合
段落、見出し、リスト項目、または詩句の境界境界を保持する文末の句読点だけでなく、原文の構造に基づく
順序が不明確な段組みやページの変わり目未解決のままにしてページを確認する文の続き、段組みの順序、キャプション、脚注

空行やインデントは段落を見つける手がかりになりますが、確実な保証ではありません。見出しの後に空行がない場合もあります。インデントされた行が新しい段落ではなく、リストの続きであることもあります。ピリオドで終わる短い行は、段落の最後の行であることもあれば、段落の途中にある文であることもあります。

OCRのエクスポートにレイアウト情報やブロック情報が含まれている場合は、テキストを確認する間もそれを保持してください。プレーンテキストのみのエクスポートでは、それらの境界を再構築するために必要な情報が失われてしまう可能性があります。

分割された単語と本来のハイフンを区別する

見た目が似ている3つのケースでは、それぞれ異なる修正が必要です。

trans-          → translation
lation

well-           → well-known
known

trans\u00ADlation → translation in a verified reading copy

最後の行では、視認しにくい文字を明確にするために \u00AD を使用しています。Unicodeでは、単語内の任意改行マーカーである U+00AD SOFT HYPHENと、 U+2010 HYPHENなどの可視ハイフンを区別しています。これらは互換性のある文字ではありません。 Unicodeの改行仕様 でも、改行位置での言語固有の綴りの変化について説明されています。つまり、見えているハイフンを削除して文字をつなぎ合わせるだけでは不十分な場合があるのです。

一般的な文章であれば、確認済みの任意ハイフン記号を削除することで、読みやすいテキストを作成できます。一方、アーカイブ用の書き起こしでは、原本のデータを別途保持してください。単語の見た目が変わらなくても、記号を削除するとエンコードされたテキスト自体が変わってしまうためです。

修正候補の綴りを確認するには、まず 原文言語 の辞書を引き、そのうえで前後の文脈に戻って検討します。辞書の見出し語はあくまで裏付けの一つであり、固有名詞や識別子、歴史的な綴りを書き換えてよい根拠にはなりません。文書内で同じ表記が繰り返し出現しているかどうかも参考になりますが、OCRエラーが一貫して繰り返されている可能性もあります。

たとえば、ドイツ語のサンプルを見てみましょう。

Die Auf-
gabe ist klar.

この作成例で意図された単語は Aufgabe; Dudenの項目 では、その分節位置が Auf|ga|beと記載されています。このケースでは、 Auf- と gabe をつなげるのが適切です。ただし、この単一の例をドイツ語のハイフン除去における一般的な規則とみなすことはできません。また、最新の辞書の綴りを適用して、古い版の正書法を無断で書き換えるべきではありません。

URL、カタログコード、化学名、負の値、その他の技術的なトークンは、個別に確認するケースとして扱ってください。ダッシュやハイフンを残すかどうかは、英語の単語を前提としたヒューリスティクスではなく、原文と各トークンの意味に基づいて判断する必要があります。

12の制御されたサンプルが示すもの

私たちは、12種類のオリジナルの文字列を含む ダウンロード可能なクリーンアップのデモ を作成しました。これらの文字列は、意図する単語や構造を定めた上で作成し、意図的に改行やハイフネーションによるアーティファクトを挿入したものです。 これらは人工的に作成されたテキストのサンプルであり、OCRエンジンの出力結果や書籍のスキャンデータではありません。

あえて単純化したベースライン処理では、「ハイフン+改行」の削除、残りの改行のスペースへの置換、ソフトハイフンの削除という3つの置換を行います。もう一方のアプローチでは、個別に承認された変更のみを対象のテキストに適用し、段落の認識や単語の綴りの自動決定は一切行いません。

サンプル単純なベースライン承認された判断
英文の折り返し2つの行を正しく結合する確認済みの折り返しをスペースに置き換える
trans- / lation正しく次のように出力される: translation挿入されたハイフンと改行を削除する
well- / known次のように出力される: wellknown本来のハイフンを保持する
ドイツ語の Auf- / gabe正しく次のように出力される: Aufgabeこの確認済み表記のみを結合する
埋め込まれた U+00ADソフトハイフン(任意ハイフン)マーカーを削除するこの作成された閲覧用テキストから削除する
フランス語の三点リーダー、その後に新しい段落段落同士を結合してしまう著者が意図した段落の区切りを保持する
番号付きリスト、詩文、コード、見出し別個の構造を平坦化してしまうそれぞれの改行を保持する
空行のない2つの段落1つに結合してしまう著者が意図した段落分けを保持する
未確認のページマーカーページの変わり目を平坦化してしまう順序を確認するまでそのまま残す

2026年10月3日に Node.js 25.2.1 でフィクスチャを実行したところ、単純なベースライン手法では 12例中4例 でしかリファレンスと一致するテキストを生成できませんでした。承認済みパスでは12例すべてでリファレンスと一致し、アンドゥによって12例すべての入力を元の状態に復元できました。また、古い入力や一意でない一致、一致が見つからないケースも適切に拒絶されました。

これらの結果は、 作成済みの既知のリファレンスに対してパッチが正確に適用されるかをテストしたものです。承認済みの判断にはあらかじめ正解が含まれており、コーパスも意図的に失敗例をあぶり出すよう選定されているため、実環境での精度を推定するものではありません。市販のクリーナーツール、OCRエンジン、翻訳モデル、またはBookTranslatorへのアップロードによる検証は行っていません。再試行や除外したサンプルもありません。

こちらの 実際の入出力およびパッチログ と 再現手順をダウンロードできます。JavaScriptは依存関係やネットワーク通信なしでローカルに実行され、結果を出力します。ファイルが上書きされることはありません。チェック処理は承認された編集が異なるテキストに誤適用されるのを防ぎますが、その編集が言語的に正しいかどうかを判定できるわけではありません。

検証済みのブロックを1つずつクリーンアップする

まずは、読む順序や段落の境界が確認できる短い散文ブロックから始めましょう。キャプション、引用文、リスト、脚注などが混在する章全体を一度に処理し始めてはいけません。

  1. 元のコピーを保存し、出典の位置を記録する。 レビューした文章ごとに、ファイル名、ページ番号、段落またはブロック、言語の情報を保持しておきます。
  2. まず構造上の境界に印をつける。 見出し、箇条書きの項目、詩、表、コードを通常の散文から分離します。後からマーカーを削除する場合でも、本文の外側にあるページ参照情報は保持しておいてください。
  3. そのブロック内の通常の単語間の改行を結合する。 確認できた各改行をスペースに置き換えます。単語同士がくっついてしまっていないか、また既存のスペースと重なって余計な二重スペースになっていないかを確認してください。
  4. 分断された単語は個別にレビューする。 トークン全体と前後の文を表示します。「レイアウト用ハイフンを削除」「本来のハイフンを維持」「未解決」のいずれかを記録します。未解決の候補を承認済みの変更として扱ってはいけません。
  5. 承認する前に差分(diff)を確認する。 削除した改行やハイフンを原文と照合します。修正の判断記録とともに、クリーンアップ済みのバージョンを新しいファイル名で保存してください。
  6. 保存したファイルを再度開き、そこからコピーします。 エディタのプレビューだけでなく、実際に使用するファイルそのものを確認してください。

短い抜粋であれば、変更履歴付きの手動編集や前後の比較で十分な場合もあります。より長い文章の場合は、正確な元の文字列、置換後、位置、理由、および確認者をパッチリストに記録しておく必要があります。ソースのチェックサムを残しておくと、入力ファイルが変更された後に古い承認内容を誤って適用するのを防ぐのに役立ちます。

使用しているエディタに段落構造を保持したクリーンアップモードがある場合は、流れるような平文だけでなく、処理が難しいブロックでもそのモードをテストしてください。連続する2つの改行を保持する設定にしていても、OCRが単一の改行として認識してしまった段落の境界を復元することはできません。また、表やコードブロックを精査する前に、字下げを削除したりすべてのスペースを詰めたりしないでください。

ページ原本画像を参照すべきタイミングを把握する

フランス語の句読点を見ると、文末判定が段落判定と一致しない理由がよく分かります。作成したサンプルでは、 Il attend… と Le lendemain, il part. は別々の段落に属しています。省略記号(三点リーダー)だけでは、その境界を確定することはできません。 Office québécois de la langue française による三点リーダー(points de suspension)の用法ガイドライン では、発話の中断や未完了の思考を表す用法などが解説されています。次の行と結合すべきかどうかは、ページの構造を見て判断してください。

以下のケースでは、元画像の確認を必須とします。

対象パターンテキスト単体では不十分な理由比較すべき項目
見出しの直後に本文が続く場合抽出処理によって空行が残らないことがあるため書体、配置、余白、およびセクション内での役割
ページや段組みをまたぐ文章ヘッダー、キャプション、脚注によって分断されている恐れがあるためページの最終行、続きの行、および読む順序
人名、コード、数量、または見慣れない専門用語一見自然な結合であっても、本来の値が変わってしまう可能性があるためダッシュの種類や数字を含む、すべての文字
歴史的言語における単語分割改行位置の表記が、分割されていない本来の単語と異なる場合がある版(エディション)、原文の綴り、適切な言語辞書や参考文献
詩・韻文、リスト、表、またはコード行末そのものが意味や構造を表している場合がある詩行の区切り、リスト項目の境界、セル、インデント
省略記号(三点リーダー)、略語、または短い末尾行句読点があるからといって段落の末尾とは限らない段落全体と、その前後のブロック

複数のページで同じ問題が見られる場合は、文書全体でそのパターンを検索し、一致する箇所を確認してください。文字そのもの、読み順、あるいは文章全体が誤っている場合は、正規化作業を中断し、文字認識やテキスト抽出の工程を見直してください。複数の言語にまたがる認識については、個別の 多言語混在PDFのOCRワークフロー.

翻訳前にクリーンアップ済みの原文を検証する

編集したブロックを元のページと比較し、別のブロックや、抽出テキストに含まれる異なる構造タイプもすべて確認してください。誤認識のパターンが判明している箇所は、必ずレビュー対象に残しておきます。サンプリング検査はチェックした箇所の確認にはなりますが、書籍の残りの部分まで保証するものではありません。

  • 固有名詞、数値、日付、コードが原文と一致していることを確認する。
  • 削除したすべてのハイフンと、改行をまたいで再構成した綴りをすべて確認する。
  • 段落、見出し、リスト項目、詩行の境界を比較する。
  • ページの変わり目で、先頭行や末尾行が欠落していないことを確認する。
  • 未解決の候補を検索し、レビューログで確認できるようにしておく。
  • 最終的に保存されたバージョンが、次のワークフローに渡されるファイルであることを確認する。

検索可能なテキストやメモを作成することだけが目的だった場合は、この検証済みテキストが最終成果物となります。修正のために翻訳を行う必要はありません。

文書を別の言語へ翻訳する必要がある場合は、検証済みのテキストをサポート対象の文書形式で準備し、 文書全体の翻訳ワークフローを使用してください。BookTranslatorのOCRモードは、元のページレイアウトをそのまま再現するのではなく、認識されたコンテンツから翻訳済みPDFを再構築します。外部のテキスト整形エディタとして機能するわけではなく、原文のすべての改行が正しく解釈されたことを保証するものでもありません。詳細については、 スキャン済みPDFの翻訳ガイド で認識が必要となるタイミングについて解説しています。

元のページと修正ログは、 最終的なPDF翻訳のQAチェックのために手元に残しておきましょう。どれほど流暢な訳文に仕上がっていても、原文に本来ハイフンが必要だったのか、あるいは一見つながっている2つの文が実際には別々の段落だったのかまでは判別できません。

関連記事

翻訳前にOCRの改行とハイフネーションを修正する方法