【要約】【Python】PDFの特定文字列に自動でマーカーを引く [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
PythonでPDF操作を行う開発者が、日本語検索の精度不足という課題に直面した。標準的な検索メソッドでは、日本語の文字列が正しくヒットしないケースがある。具体的には以下の問題が発生する。
- ・
Page.search_for()が日本語に対して不安定に動作する。 - ・文字の位置を正確に特定できず、ハイライトがズレる可能性がある。
- ・PDFの内部構造に依存した検索の失敗が避けられない。
// Approach
開発者は、文字単位の座標情報を直接取得して自前でマッピングする手法を採用した。
rawdictを利用して、文字のテキストと座標を同期させて管理する。具体的な手順は以下の通りである。- ・
get_text("rawdict")で文字ごとのbboxを取得する。 - ・文字列のインデックスと座標リストの対応関係を構築する。
- ・
group_rects関数で、Y座標が近い矩形をグループ化する。 - ・グループ化した矩形を
pymupdf.Quadに変換し、ハイライトを適用する。
// Result
実装により、指定したキーワードに対して正確なハイライトを施したPDFを生成できた。青空文庫のテキストを例に、視覚的に適切なマーカー付与を実現している。
- ・キーワードに基づいた正確な位置へのハイライト付与。
- ・行単位のグループ化による、1文字ずつに分かれない綺麗な描画。
- ・
outディレクトリへの処理済みPDFの自動保存。
Senior Engineer Insight
> 実用的な回避策だが、PDFの内部構造への依存度が極めて高い。ルビの混入や特殊な組版により、検索が失敗するリスクを考慮すべきだ。また、改行やページ跨ぎの検索に非対応である点は、大規模文書の解析において致命的な制約となる。特定のフォーマットが保証された文書のバッチ処理には適しているが、汎用的なツールとしては設計の見直しが必要である。