エプスタイン文書350万ページから「日本人名」を抽出する ─ 黒塗りの解除と自動検出パイプラインの構築(python)
...
2026-02-11 14:27:50,624 [INFO] ★ EFTA01362493.pdf: 1 known, 0 unknown
2026-02-11 14:28:20,161 [INFO] ★ EFTA01362931.pdf: 1 known, 0 unknown
2026-02-11 14:28:20,218 [INFO] ★ EFTA01362932.pdf: 1 known, 0 unknown
2026-02-11 14:28:34,316 [INFO] ★ EFTA01363137.pdf: 3 known, 0 unknown
2026-02-11 14:28:34,406 [INFO] ★ EFTA01363138.pdf: 2 known, 0 unknown
2026-02-11 14:28:44,487 [INFO] ★ EFTA01363299.pdf: 1 known, 0 unknown
2026-02-11 14:28:49,166 [INFO] ★ EFTA01363354.pdf: 0 known, 2 unknown
...Note.comは全く集客できないようなので、独自にサイトを立ち上げました。
2025年12月から2026年1月にかけて、米国司法省(DOJ)はジェフリー・エプスタイン事件に関する文書を段階的に公開した。その総量は約350万ページ、280GB。Data Set 1から12まで、12巻に分かれている。
この調査の目的は一つ。その中に日本人の名前があるかを確かめることだ。
350万ページを人間が1枚ずつ読むのは不可能なので、自動検出プログラムを開発した。そして開発の過程で、一部の文書に施された黒塗り(リダクション)が偽装であり、その下のテキストを復元できることがわかった。
この記事では、どのような技術的手法でそれを実現したかを説明する。調査結果そのものではなく、**「なぜこの手法で得られた結果を信用できるのか」**を示すことが目的だ。
データ収集そのものが、この調査最大の難関だった
350万ページを解析する以前に、まず「350万ページを手に入れる」こと自体が極めて困難だった。DOJ(米国司法省)はエプスタインファイルを公式サイトおよびInternet Archive(archive.org)で公開しているが、その公開状態は完全ではない。
DataSet 10を例に挙げる。
DOJの公式公開版(Archive.org版)に収録されているDS10のPDFは、約100件に過ぎない。しかし実際のDS10には503,154件のPDFが存在する。公開版では99.98%が欠落している計算になる。しかもEFTA番号帯すら異なり(Archive.org版:39025〜40146、完全版:01263124〜02186235)、別データセットと見間違えるほどの乖離がある。
つまりDOJの公式公開サイトだけを見ていた調査者は、DS10の実質的な内容をほぼ全て見落としている。
では完全なデータはどこにあるのか。
答えは、世界中の有志がtorrentで保存・共有しているコピーだ。GitHubの `yung-megafone/Epstein-Files`(スター437、フォーク78)は、その代表的な取り組みのひとつだ。2026年2月5日時点のIssue #1には 「DS9の完全アーカイブを持っている人がいれば、magnetリンクとともにPull Requestを送ってほしい」という呼びかけが残っており、コミュニティが互いに欠損分を補い合いながらデータを維持している実態が分かる。
本調査でもこのtorrentネットワークを通じて完全データを入手し、DS10では約180GBのデータをダウンロードしてローカル環境でスキャンした。
DOJが公開した文書に関する異常はデータの欠落だけではない。
当初「約600万ページ」と報告されていた総文書数のうち、実際に公開されたのは約350万ページ(残り250万ページの所在は不明)
公開後に数千件のファイルがDOJサイトから削除された
DataSet 9〜11は本来別々のセットであるにもかかわらず一括公開され、区別が困難な状態になっている
EFTA番号に説明なしの大きなジャンプが複数存在する
これらは公開プロセスの不透明さを示す事実であり、「公開された文書が全てではない」ことを前提に調査を進める必要がある理由でもある。本調査はこうした困難な条件のもとで、入手可能な最大限のデータを対象として実施している。
黒塗りには「本物」と「偽物」がある
2025年12月のリリース直後、TikTokやX(旧Twitter)で「エプスタイン文書の黒塗りを外せた」という投稿が相次いだ。最初はデマだと思った人も多いだろう。しかし、これは技術的に正しい。
PDFの黒塗りには2種類ある。
本物のリダクションは、テキストデータそのものを削除し、その上に黒い矩形を描画する。EFTA番号(EFTA00001〜)が付与されたDOJ正式文書は、この方式で処理されている。コピー&ペーストしても何も出てこない。テキストは存在しない。
偽装リダクションは、テキストデータを残したまま、その上に黒い矩形を重ねただけのものだ。見た目は黒塗りだが、テキストは生きている。PDF Associationの分析によれば、DOJが本体文書に組み込んだ裁判所提出文書(バージン諸島司法長官の2021年民事訴訟文書など)にこの偽装リダクションが確認されている。Data Set 1〜7のEFTA文書自体は正しく処理されているが、Data Set 8以降やNATIVES(原本形式)フォルダの文書については網羅的な検証がなされていない。
つまり、黒塗りを「信頼して読み飛ばす」のは、調査として不十分ということになる。
黒塗りの下を自動で読む
本プログラムでは、PDFを開いた瞬間にまず偽装リダクションの検出を行う。これを「Layer 0」と呼んでいる。
仕組みはシンプルだ。
PDFのページ上にある黒い矩形をすべて検出する
その矩形が覆っている領域にテキストデータが存在するかを確認する
テキストが存在すれば、それは偽装リダクション。テキストを復元する
検出にはFree Law Projectが開発した「x-ray」というオープンソースのライブラリを使用している。米国の判例データベースを運営する非営利団体が、裁判文書の不適切なリダクションを検出するために作ったツールだ。x-rayが利用できない環境ではPyMuPDF(PDFの解析ライブラリ)のネイティブ機能で代替する。いずれもソースコードは公開されており、検証可能である。
復元されたテキストには自動的に「REDACTED_RECOVERED」のフラグが付与され、通常のテキストと区別される。黒塗りの下から日本人名が検出された場合、それは意図的に隠されていた可能性がある──調査上、極めて重要な証拠となる。
350万ページから日本人名を見つける方法
280GBのPDFに対して「日本人の名前」を直接検索するのは、効率が悪い。日本人の姓は数百種類あり、ローマ字表記にはブレがあり、そもそも名簿に載っていない人物は検索のしようがない。
さらに、DOJの公開文書にはスキャン画像として保存されたPDFが多数含まれている。テキストデータが埋め込まれていないため、そのままではプログラムで読めない。これらのPDFに対しては、自前のCloud Vision OCR(光学文字認識)システムでテキストデータを補完している。
ただし、OCRの適用には制約がある。OCRはPDFをいったん画像に変換して文字を読み取るため、黒塗りの下にあるテキストデータにはアクセスできない。 したがって、黒塗り解除(Layer 0)は必ずPDFファイルを直接解析する段階で先に行い、OCRは「テキストが埋め込まれていないスキャン画像PDF」に対してのみ、テキスト抽出の補完手段として使用する。
そこで発想を逆転させた。
先に文書中の全固有名詞(人名・組織名)を抽出し、その中から日本人を絞り込む。
このパイプラインは3段階で動く。
Step 1:全固有名詞の抽出
280GBのPDFからテキストを抽出し、以下のパターンで固有名詞を拾い上げる。
大文字で始まる2〜3語の連続(英語圏の人名・組織名の標準的な表記)
メールヘッダー(From / To / Cc に記載された名前)
敬称付きの名前(Mr., Dr., Ambassador など)
全大文字の名前(法的文書に多い "JOHN DOE" 形式)
メールアドレスと電話番号
この段階では国籍を問わない。エプスタインファイルに登場するすべての人名・組織名がリスト化される。350万ページの海が、数十万件の固有名詞リストに圧縮される。
Step 2:日本人フィルタ(6層検出)
Step 1で得られた固有名詞リストに対して、6つの層(レイヤー)で日本関連の名前を絞り込む。
Layer 1:事前に作成した調査対象者リスト(135名+)との完全一致
Layer 2:日本人の姓(185姓)が含まれるかどうか
Layer 3:前後の文脈に「Japan」「Tokyo」「Mitsubishi」等の関連語があるか
Layer 4:.jp ドメインのメールアドレス
Layer 5:+81(日本の国番号)で始まる電話番号
Layer 6:ひらがな・カタカナ・漢字の検出
Layer 1は確実だが、それだけでは「想定していなかった人物」を見逃す。Layer 2〜6は、名簿に載っていない未知の日本人を捕捉するための網だ。
Step 3:照合と分類
Step 2を通過した名前を、調査対象者リストと照合し、2つに分類する。
既知(Known):リストに載っている人物と一致した
未知(Unknown):リストに載っていないが、日本人である可能性が高い
この「未知」の発見こそが、このシステムの最大の価値だ。 誰も予想していなかった名前が浮上する可能性がある。
データの重複と整合性
DOJが公開した文書は整理されていない。時系列順でもなく、同じメールスレッドが異なる墨消しレベルで複数のData Setに散在している。さらに、ダウンロード元(torrents / zips / DOJサイト直接)によって同一ファイルが複数のフォルダに存在するケースがある。
本プログラムでは、ファイル名とファイルサイズの組み合わせで重複を判定し、同一文書の二重処理を自動的に排除している。また、各PDFの処理状況はデータベースに記録され、中断と再開が可能だ。280GBを1日で処理する必要はない。毎日少しずつ、数か月かけて完走する設計になっている。
なぜこの手法を公開するのか
エプスタイン文書の分析は世界中で行われている。しかし、その多くは「特定のページに○○の名前があった」という断片的な報告だ。350万ページの中から恣意的に選んだ1ページを見せても、それが全体の中でどういう意味を持つのかはわからない。
本調査は、280GBの全文書を同じアルゴリズムで機械的に処理する。 特定の名前を狙い撃ちにするのではなく、全固有名詞を抽出したうえで日本関連の名前を絞り込む。黒塗りの下も含めて。
手法を公開するのは、結果の信頼性を担保するためだ。
使用したツールはすべてオープンソースであり、誰でも検証できる
偽装リダクションの検出ロジックは公開されたライブラリに基づいている
6層検出の各パラメータ(姓リスト、キーワード、正規表現パターン)は設定ファイルとして外部化されており、第三者が同じ条件で再現できる
処理の進捗と結果はSQLiteデータベースに記録され、後から監査可能である
今後、このパイプラインで検出された結果を順次報告していく。見つかった名前が何を意味するのかは、DOJの一次資料と突き合わせて検証する。
350万ページの海に、どんな名前が沈んでいるか。
X に投稿しますので気が向きましたらフォローをお願いします。「@FactCeckAomori」
コード実行例
右端の「unknown」は「names.jsonに載っていないが、6層フィルタで日本人の可能性があると判定された名前」です。事前に登録していなかった未知の日本人候補が文書中に見つかったことを意味します。
DOJ(アメリカ司法省)公開文書「data-set-1」 実行中のサンプルです
...
2026-02-11 14:27:50,624 [INFO] ★ EFTA01362493.pdf: 1 known, 0 unknown
2026-02-11 14:28:20,161 [INFO] ★ EFTA01362931.pdf: 1 known, 0 unknown
2026-02-11 14:28:20,218 [INFO] ★ EFTA01362932.pdf: 1 known, 0 unknown
2026-02-11 14:28:34,316 [INFO] ★ EFTA01363137.pdf: 3 known, 0 unknown
2026-02-11 14:28:34,406 [INFO] ★ EFTA01363138.pdf: 2 known, 0 unknown
2026-02-11 14:28:44,487 [INFO] ★ EFTA01363299.pdf: 1 known, 0 unknown
...