HWP/HWPX サポート (Phase 2)
概要
PROOF は、a1 バックエンドで pyhwp ベースの専用コンバータを使用して、Hangul Word Processor (.hwp) とその XML ベースの形式 (.hwpx) をサポートしています。これは Docling 前処理パイプラインの Phase 2 の一部です。
- マークダウン抽出:
pyhwp2mdがテキスト、段落、見出し、リスト、表をマークダウンに変換します。 - 画像抽出:
pyhwpがBinDataOLE ストレージを読み込み、埋め込み画像を抽出します。 - ページ数推定:
hwp_converter.get_page_count()が文書の要約情報を読み込み、ページ数を推定します。
パイプラインの流れ
- アップロード:
jobs.pyがmedia_loader.HWP_TYPESを通じて.hwp/.hwpxファイルを検出します。 - ページ数: アップロードされたファイルに対して
hwp_converter.get_page_count()を呼び出します。 - ワーカールーティング:
tasks.pyが単一ファイルまたはアーカイブ内のファイルに対してrun_hwp()を呼び出します。 - 処理:
pipeline_docling.pyのrun_hwp()が:pyhwp2mdでマークダウンを抽出します。pyhwpでBinData画像を抽出します。- 同じ Docling 設定を使用して、必要に応じて LLM レイアウト精製を実行します。
- 結果: 抽出されたマークダウンは、他の Docling 対応文書と同様に CSV/MD/XLSX 出力にマージされます。
ファイルルーティング
media_loader.HWP_TYPES = {"hwp"}- 単一ファイル:
tasks.pyのjob.file_type in media_loader.HWP_TYPES分岐。 - 複数ファイル: アーカイブ展開ループ内の
ftype in media_loader.HWP_TYPES分岐。 - 抽出されたファイルは、PDF/Office 文書と同じパスロジックで Supabase Storage にアップロードされます。
精製(Refinement)
use_docling_refinement/docling_refinementフラグは、HWP/HWPX 結果にも同様に適用されます。- 料金は
settings_storeのcost_per_docling_refinement_page_krw/cost_per_docling_refinement_page_usdで設定します。
API とフロントエンド
POST /api/jobs/uploadはdocling_refinementフォームフィールドを受け入れます。UploadPage.jsxは Docling 互換文書(HWP/HWPX を含む)に対して「Docling レイアウト精製を使用」チェックボックスを表示します。- サポートされるファイル拡張子には
.hwpと.hwpxが含まれます。
主なファイル
app/backend/core/hwp_converter.py— HWP/HWPX テキスト、画像、ページ抽出。app/backend/core/pipeline_docling.py— Docling と同じ精製パスを再利用するrun_hwp()関数。app/backend/workers/tasks.py— HWP/HWPX ファイルをrun_hwp()にルーティング。app/backend/api/jobs.py— HWP/HWPX アップロードのページ数計算とコスト計算。app/backend/core/media_loader.py—HWP_TYPESとファイルタイプ検出。