大量のPDFやWord文書からテキストを抽出する作業に苦労していませんか?
例えば、RAGアプリケーションの開発ですね。
数千の文書を処理する必要が出てきます。
そのような場合に効果的なのが、Redditで話題になっていたKreuzbergというライブラリです。
今回は、このライブラリの実力を解説します。
そして、なぜ他のツールより優れているのかも説明していきます。
CPUだけで動く高速テキスト抽出
Kreuzbergの最大の特徴は、GPUを必要としないことです。
つまり、一般的なノートPCでも高速に動作します。
多くのAI系ツールはGPUを前提としています。
しかし、すべての環境でGPUが使えるわけではありません。
特にサーバーレス環境やコンテナ環境では、CPUのみで動作することが重要になります。
Kreuzbergは、この制約を見事に解決しています。
毎秒32ファイルという処理速度を実現。
それでいて、メモリ使用量は約360MBに抑えられているのです。
実際のベンチマーク結果が示す圧倒的な性能
Reddit投稿者が公開したベンチマーク結果を見て驚きました。
競合ツールと比較すると、その差は歴然としています。
例えば、Unstructured.ioは業界でよく知られたツールです。
しかし、処理速度は毎秒4.8ファイルにとどまります。
さらに、メモリも1.3GB必要とします。
インストールサイズも146MBと大きめです。
IBMのDoclingはさらに重い。
毎秒0.26ファイルという処理速度です。
そして、メモリは1.7GBも消費します。
高度な機械学習機能は魅力的ですが、実用的とは言えません。
最も注目すべきは成功率です。
Kreuzbergだけが100%の成功率を達成しています。
タイムアウトやエラーが一切発生しないのです。
バージョン3.11で追加された注目機能
最新版では、単なるテキスト抽出を超えた機能が追加されています。
AI文書分類機能
請求書、契約書、フォームなど、文書の種類を自動判別できるようになりました。
これにより、抽出後の処理を効率化できます。
MCPサーバー統合
ClaudeなどのAIアシスタントと直接連携できるようになりました。
抽出したテキストをそのままAIに渡して分析できるわけです。
パスワード付きPDF対応
暗号化された文書も処理できます。
そのため、セキュアな環境での利用も可能になりました。
CLIツール
uvx kreuzberg extractというコマンドで、プログラミング不要でテキスト抽出ができます。
実装の簡単さも魅力
実装は驚くほど簡単です。
以下のコードを見てください。
from kreuzberg import extract_file_sync # 同期処理でファイルからテキスト抽出 result = extract_file_sync("document.pdf") print(result.content) print(f"MIME type: {result.mime_type}") print(f"Metadata: {result.metadata}")
非同期処理にも対応しています。
import asyncio from kreuzberg import extract_file async def extract_async(): result = await extract_file("document.pdf") return result.content # 実行 asyncio.run(extract_async())
複数ファイルの一括処理も可能です。
from kreuzberg import batch_extract_file_sync file_paths = ["document1.pdf", "document2.docx", "image.jpg"] results = batch_extract_file_sync(file_paths) for path, result in zip(file_paths, results): print(f"File: {path}") print(f"Content: {result.content[:100]}...")
数行のコードで実装できます。
同期・非同期の両方に対応。
そのため、既存のアプリケーションにも組み込みやすいのです。
実装は驚くほど簡単です。以下のコードを見てください。
from kreuzberg import ExtractorFactory # エクストラクターの作成 extractor = ExtractorFactory.create() # ファイルからテキスト抽出 result = extractor.extract("document.pdf") print(result.text) # 非同期処理にも対応 async def extract_async(): result = await extractor.extract_async("document.pdf") return result.text
数行のコードで実装できます。同期・非同期の両方に対応。そのため、既存のアプリケーションにも組み込みやすいのです。
どのような場面で活用できるか
Kreuzbergは、特に以下のような場面で威力を発揮します。
RAGアプリケーションの構築
大量の文書を高速に処理する必要があります。
Kreuzbergの処理速度とメモリ効率の良さが、システム全体のパフォーマンスを向上させます。
ドキュメント管理システム
様々な形式のファイルを扱う必要があります。
Word、Excel、PowerPointからテキストを抽出できるため、統一的な処理が可能になります。
サーバーレス環境での利用
71MBという小さなインストールサイズが魅力です。
低メモリ消費により、AWS LambdaやGoogle Cloud Functionsでも問題なく動作します。
他のツールとの使い分け
もちろん、すべてのケースでKreuzbergが最適というわけではありません。
高精度なレイアウト解析が必要な場合は、SuryaOCRのようなGPUベースのツールが適しています。
ただし、インフラコストが大幅に増加することは覚悟する必要があります。
AGPLライセンスが問題にならない場合は、PyMuPDFも優れた選択肢です。
PDF処理に特化しています。
そして、非常に高速で高品質な抽出が可能です。
Rustベースの高速処理を求めるなら、Extractousも検討に値します。
メモリ管理が優れており、安定性は抜群です。
ただし、対応フォーマットは限定的です。
MITライセンスがもたらす自由度
KreuzbergはMITライセンスで提供されています。
商用利用も自由です。
ソースコードの改変も可能です。
バージョン3.5でGPL依存を完全に排除しました。
これにより、ライセンスの心配なく利用できるようになったのです。
企業での採用において、これは大きなアドバンテージになります。
パフォーマンス比較表
ツール名 | 処理速度 | メモリ使用量 | インストールサイズ | 成功率 |
---|---|---|---|---|
Kreuzberg | 32ファイル/秒 | 360MB | 71MB | 100% |
Unstructured | 4.8ファイル/秒 | 1.3GB | 146MB | 98.8% |
Markitdown | 26ファイル/秒* | 360MB | 251MB | 98.2% |
Docling | 0.26ファイル/秒 | 1.7GB | 1GB以上 | 98.5% |
まとめ
Kreuzbergは、実用性を重視したテキスト抽出ライブラリです。
高速処理、低メモリ消費、100%の成功率。
これらの特徴は、実際の開発現場で大きな価値を発揮します。
GPUなしで動作するため、導入のハードルも低い。
MITライセンスにより、商用プロジェクトでも安心して使えます。
ドキュメント処理の自動化を検討しているなら、一度試してみる価値があります。
特にRAGアプリケーションの開発では、処理速度の違いを実感できるはずです。
GitHubでソースコードも公開されています。
実装例やベンチマークの詳細も確認できます。
興味がある方はチェックしてみてください。