PythonでPDF全文検索システムを作ろう(Whoosh + Flask)
プロジェクト概要
このプロジェクトは、PDFファイルの全文検索システムをPythonで構築するものです。主な特徴は:
- Whooshを用いた高速な全文検索
- MeCabによる日本語形態素解析
- Flaskを使ったWebインターフェース
- マルチスレッド処理による効率的なインデックス作成
- 分散処理が可能なアーキテクチャ: インデックス作成(高負荷処理)と検索処理を別マシンで実行可能
システムアーキテクチャ図
- PDFファイル
↓ (PyMuPDFでテキスト抽出) - テキストデータ
↓ (MeCabで形態素解析) - トークン化されたテキスト
↓ (Whooshでインデックス作成) - 検索インデックス
↓ (indexディレクトリに保存) - Flaskサーバー
↓ (Webインターフェース) - ユーザー検索
各コンポーネントの役割:
- PyMuPDF: PDFからテキストを抽出
- MeCab: 日本語テキストを分かち書き
- Whoosh: 全文検索用インデックスを作成
- Flask: 検索用Webインターフェースを提供
必要なライブラリ
|
|
主要コンポーネント解説
1. PDFIndexerクラス (index_creator.py)
PDF処理の中核を担うクラスです:
|
|
- extract_text(): PDFからテキストを抽出(PyMuPDF使用)
- tokenize(): 日本語テキストの分かち書き(MeCab使用)
- process_pdf(): 1つのPDFを処理し検索用データを生成
2. インデックス作成 (index_creator.py)
Whooshのスキーマ定義とインデックス作成:
|
|
3. Webインターフェース (index_gui.py)
Flaskで構築された検索画面:
|
|
主な機能:
- HTMLテンプレートによるレスポンシブなUI
- 検索結果のハイライト表示
- 元PDF表示と検索結果PDF生成機能
使い方ガイド
- インデックス作成:
|
|
- Webサーバー起動:
|
|
- ブラウザでアクセス:
|
|
学習ポイント
-
分散処理の利点:
- インデックス作成(CPU/メモリ負荷が高い)は高性能マシンで実行
- 作成済みインデックスは低性能マシンでも検索可能
- インデックスディレクトリを共有/コピーするだけで環境構築可能
-
Whooshの基本概念:
- Schema: インデックスの構造定義
- IndexWriter: ドキュメント追加用インターフェース
- Searcher: 検索実行用インターフェース
-
日本語処理の工夫:
|
|
- パフォーマンス最適化:
|
|
応用例
- 社内文書管理システム
- 研究論文検索ツール
- 電子書籍ライブラリ
- マニュアル検索システム
まとめ
このプロジェクトでは、以下のPython技術を活用しています:
- Whoosh: 軽量な全文検索エンジン
- MeCab: 日本語形態素解析
- PyMuPDF: PDFテキスト抽出
- Flask: Webインターフェース構築
初心者の方は、各コンポーネントを小さく分割して理解すると良いでしょう。また、全文検索システムを探している方には、Whooshの軽量さとPythonとの親和性の高さが大きなメリットです。