
2025/12/24 6:54
**X‑ray:PDF 文書における不適切な赤字消去(レダクション)を検出するための Python ライブラリ**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
x‑rayは、PDF文書内の不適切な赤字(黒い四角形が背後にあるテキストを完全に覆えていない)を自動で検出するPythonライブラリです。PyMuPDFでPDFをスキャンし、四角形の形状を特定してページコンテンツ上に重ね合わせ、各形状が実際に隠された情報を遮蔽しているかどうかをテストします。不適切な赤字はJSON(またはPython辞書)として報告され、ページ番号、境界ボックス、および隠されたテキストがリスト化されます。
Installation
uv add x-ray # 既存のuvプロジェクトに追加 pip install xray # 標準的なpipインストール
インストールせずに実行することも可能です:
uvx --from x-ray xray <PDF_URL>
Usage
コマンドライン:
xray path/to/file.pdf xray https://free.law/pdf/example.pdf # バッチURL cat urls.txt | xargs -n 1 xray
Python import:
import xray bad_redactions = xray.inspect("some/path/to/file.pdf") # `inspect` は str、pathlib.Path、URL(https://)、または PDF コンテンツの bytes を受け取ります。
Output
このツールは、ページ番号をキーとし、不適切な赤字オブジェクトのリストを値とするJSONを出力します。各オブジェクトには
bbox タプルと隠された text が含まれます。モジュールとして使用した場合、同等のPython辞書が返されます。
Project context
- Free Law Projectで数百万件のPDFを監査し、法的透明性を確保するために使用されています。
- GitHub上でオープンソース化されており、貢献にはCLAへの署名が必要で、issues経由で管理されます。
- リリースはGitHub Actionsで自動化されており、手動リリースでは
、CHANGES.md
の更新、タグ付け、およびPoetryによる公開を行います。pyproject.toml - BSDライセンス(許諾型)で配布されています。
x‑rayの軽量なインストールと明確なレポート機能は、法務テック企業や規制当局、オープンデータイニシアチブが不備のある赤字を迅速に特定し、コンプライアンスと透明性を維持するのに役立ちます。
本文
x‑ray – PDF 文書における不適切なレダクションの検出
なぜ x‑ray が必要なのか?
Free Law Project では 数百万件の PDF を扱っていますが、しばしば見られる問題は「不適切なレダクション」です。
本来はテキストを完全に隠すべきところを、人々は既存(多くの場合黒字)テキスト上に黒い長方形やハイライトを重ねるだけで済ませてしまいます。その結果、元の内容が容易に復元可能な状態になります。
x‑ray は次の目的で作られました:
- 「無意味」なレダクションを含む PDF を検出する
- 簡易コマンドラインツールと Python API で迅速にチェックできるようにする
すぐに始める
インストール
| ツール | コマンド |
|---|---|
| uv | |
| pip | |
ヒント:
インストールせずに実行したい場合はを使ってください:uvxuvx --from x-ray xray <PDF_URL>
使い方
# ローカルファイルの場合 xray path/to/your/file.pdf # HTTPS 経由のリモート PDF xray https://example.com/document.pdf
ツールは JSON を出力し、ページ番号をキーにしてレダクションオブジェクトのリストを返します:
{ "1": [ { "bbox": [58.55, 72.20, 75.65, 739.40], "text": "The Ring travels by way of Cirith Ungol" } ] }
– レダクション矩形の四元組bbox(x0, y0, x1, y1)
– 矩形内に隠されたテキストtext
出力を
jq などでパイプしてさらに加工することも可能です。
バッチチェック
URL を 1 行ずつ書いたファイル(例:
urls.txt)を作成し、次のように実行します:
xargs -n 1 xray < urls.txt
Python API
from pprint import pprint import xray # ファイルパスで PDF を検査 bad_redactions = xray.inspect("some/path/to/file.pdf") pprint(bad_redactions) # バイト列(例:ダウンロードしたデータ)で検査 pdf_bytes = requests.get("https://example.com/doc.pdf").content bad_redactions = xray.inspect(pdf_bytes)
対応入力タイプ
| タイプ | 意味 |
|---|---|
または | ローカルファイルパス |
で始まる | URL からダウンロード |
| メモリ上の PDF コンテンツ |
重要:
ファイル名をバイト列(例:)として渡すと失敗します。文字列または Path を使用してください。b"file.pdf"
動作原理
x‑ray は高速な PDF パーシングに PyMuPDF を利用しています。検出パイプラインは以下の通りです:
- PDF 内の全ての長方形を取得
- 各長方形と重なる文字(レターボックス)を特定
- 長方形領域を画像としてレンダリング
- 生成された画像が単色かどうかを判定(単色なら「不適切なレダクション」)
- 単色でない場合は、レダクションは妥当とみなす
コントリビューション
- GitHub の Issue を開いて機能追加やバグ報告を行う
- コントリビューションには署名済み Contributor License Agreement (CLA) が必要です – リポジトリのテンプレートを参照
- リリースは GitHub Actions で自動化されており、手動リリースも定められた手順に従って行います
ライセンス
本プロジェクトは BSD ライセンス の下で配布されており、自由に利用・他プロジェクトへの組み込みが可能です。