大量PDFの文字化け問題にぶつかった話
目次
シチュエーション:大量PDFの文字化け問題
DifyにPDFをどんどん突っ込んでナレッジ化していたら、「見た目は日本語なのに、AIに読ませると文字化けしてしまうPDF」が混ざっていることに気づきました。
画面で開くとちゃんと読めるのに、次のような挙動をするPDFです。
- コピー&ペーストすると謎の記号だらけ
- Difyにアップすると、ベクトル化の時点で文字化けして学習されない
という、やっかいなタイプのPDFです。
手元には約1000ファイル。1つずつ開いて確認するのは、現実的ではありません。そこで「AIに手伝ってもらって、怪しそうなファイルだけふるいにかけたい」という発想になりました。
ここで登場するのが、図解にした3つのアプローチです。
パターン① ChatGPTにコードを書いてもらい、自分の環境で回す
1つ目は、ChatGPTにPythonスクリプトを書いてもらい、自分のPCで実行するやり方です。
- 使うのは「ChatGPTアプリ(またはWeb)」と、自分のPCに入っているPython環境
- 「フォルダ内のPDFを全部チェックして、文字化けっぽいものだけ教えて」と要件を伝えると、ChatGPTがスクリプトを書いてくれる
- そのコードをローカルで実行すると、一気に1000ファイルを走査してくれる
この方法の特徴は、次のような点です。
- 実行はあくまで自分の環境なので、ChatGPT側のトークン上限や制約を気にしなくていい
- 一度スクリプトができれば、何度でも再利用できる
- 逆に、Pythonやコマンドライン環境にある程度慣れている人向け
今回も、ほぼ日本語のPDFばかりだったので、このアプローチで一気に走査した結果、1000本のうち「怪しい」と判定されたのは5本だけ。
あとはその5本だけ目視で確認して、無事に仕分けを終えることができました。
パターン② Claude Codeにコードを書かせて、そのまま実行してもらう
2つ目は、Claude Codeのようなエージェント型LLMに「コードを書いて・実行までやってもらう」パターンです。
ここでは、次のような要件を投げます。
- 「フォルダ内のPDFをチェックして、文字化けの可能性があるファイルだけリストアップして」
- 「結果は画面とテキストファイルの両方に出力して」
すると、Claude Codeが次のようなことをやってくれます。
- Pythonコードを書く
- 必要なライブラリをインストールする
- ターミナルで実行する
この方法の特徴は、
- 自分で環境構築をしなくても、Claude Code側が実行環境を用意してくれる
- 大量のPDFを処理したいとき、「AIにコードを書かせる+自動実行」の組み合わせが強い
- ただし、その過程でいろいろなライブラリが自動でインストールされるので、「自分のPCの環境をきれいに保ちたい人」はその点を意識しておいた方がいい
「自前でPythonを触る自信はないけれど、大量ファイルを自動処理したい」という人には、この②のスタイルが現実的な落としどころになります。
パターン③ Claude Codeにプログラムを書かせず、PDFをそのまま読ませる
3つ目は、Claude CodeにPDFを直接読ませて、「文字化けしていそうかどうか」を評価してもらうやり方です。
- PDFを何本か添付して、「この中に文字化けしていそうなファイルはある?」と聞くだけなので、
- プログラムを書かなくてよい
- 実行環境もいらない
- 数本〜数十本程度なら、この方法が一番手軽です
一方で、Claudeはトークン制&コンテキスト上限ありなので、
- 1000本のPDFを全部コンテキストに載せていくのは、ほぼ不可能
- 多数のファイルを何度も読み直させようとすると、トークン上限にすぐ近づく
- その都度読み捨てになるので、「一括チェックツール」としての再利用性は低い
つまり、③は次のような用途には向いていますが、大量のPDFを本気でふるいにかける用途にはあまり向かない方法です。
- 少数のPDFをざっくり確認する
- 「文字化けPDFとはどんな見え方になるのか」をAIと一緒に観察して、感覚をつかむ
3つを比べて見えること
この3パターンを並べてみると、ざっくりこう整理できます。
-
① ChatGPT+自前環境
- Pythonや環境構築が得意な人向け
- 自分のPCで完結し、再利用性が高い
-
② Claude Codeでコード+実行
- 環境構築をAIに任せたい人向け
- 大量ファイルを扱うなら、③よりずっと現実的
-
③ Claude Codeが直接読む
- コードを書きたくない人向け
- 少数のPDFを確認する用途には便利だが、トークン上限があるので大量処理には不向き
同じ「AIに助けてもらう」でも、
- モデルに全部読ませるのか
- モデルに道具(スクリプト)を作ってもらって、自分の環境で回すのか
で、向き・不向きがかなり変わってきます。
今回のように「1000ファイルから文字化け候補だけを抜き出したい」というシチュエーションでは、図解にした3パターンのうち、①か②のように「コードを介してまとめて処理する」やり方が、現実的で安心な選択肢になると感じました。




