# PDF氏名・日付抽出&リネームツール テンプレート画像(赤枠=氏名欄、青枠=日付欄)を基準に、対象フォルダ内のPDFから 氏名・日付をOCRで抽出し、リネーム・振り分けを行うスクリプトです。 ## セットアップ ```bash pip install opencv-python pdf2image pytesseract pillow numpy ``` システムに以下が必要です(Ubuntu/Debianの例): ```bash sudo apt-get install tesseract-ocr tesseract-ocr-jpn poppler-utils ``` ## 使い方 1. テンプレート画像を用意する - 実際の書類(1枚)をスキャン、または元PDFをそのまま画像化 - 画像編集ソフトなどで、氏名が書かれている位置に赤い四角枠、日付が書かれている位置に青い四角枠を重ねて保存(PNG推奨) - **重要**: テンプレートは実際の対象PDFと同じ用紙サイズ・向きで作成してください(比率で位置を計算するため、多少の解像度差は自動補正されます) 2. フォルダを準備する - `input/` … 処理対象のPDFを入れる - `output/` … 成功時、氏名ごとのサブフォルダに `YYYYMMDD_氏名.pdf` として保存される - `failed/` … 抽出に失敗したPDFがそのまま退避される(要目視確認) 3. 実行する ```bash python extract_and_rename.py \ --template template.png \ --input ./input \ --output ./output \ --failed ./failed \ --margin 0.10 ``` `--margin` は枠位置の許容誤差率です。0.10 = 上下左右に枠の幅・高さの10%分だけ 広げた範囲までOCR対象とします(スキャン時の位置ズレ対策)。 ## 注意点 - OCRは完璧ではありません。特に手書きに近い字体、かすれ、低解像度スキャンでは 誤読が発生します。`output/` の結果は初回運用時に必ず目視確認してください。 - 日付の年が2桁(例: 26/08/02)の場合、スクリプトは "20XX年" と仮定して補完します。 昭和・平成表記など和暦が使われる書類の場合は `clean_date()` 関数の調整が必要です。 - 複数ページPDFの場合、現在は1ページ目のみを対象にしています。 - 氏名に同姓同名がいる場合や、同じ氏名で複数回書類が発行される場合、ファイル名の 衝突は自動的に連番(_1, _2...)で回避されます。 - テンプレートで検出される枠は「最大面積の赤/青矩形」を採用しています。枠線以外に 赤・青の要素(ロゴなど)がテンプレート内にあると誤検出する可能性があるため、 テンプレートはできるだけシンプルな見た目にしてください。 ## ファイル構成 - `box_detector.py` … テンプレートから赤枠・青枠の位置を検出するモジュール - `extract_and_rename.py` … メイン処理(OCR抽出・リネーム・移動)