PowerPoint PDF 処理機能の改善
概要
本文書では、PowerPoint から PDF 化された資料の読み込み精度を向上させるために実装された機能について説明します。従来のシンプルなテキスト抽出では、PowerPoint 特有のレイアウトや重複コンテンツが原因で、正確なテキスト読み込みができない問題がありました。
実装された改善
1. デバッグログの強化
PDF処理全体のログ
- PDFメタデータの出力
- ページ数と処理進行状況の詳細ログ
- 各ページの生テキストアイテム数の表示
- 抽出されたテキスト長の監視
テキスト抽出の詳細ログ
- 各ページの最初の5個のテキストアイテムの座標とサイズ情報
- 重複テキストの検出と除去ログ
- 抽出された行数の統計情報
完全テキスト内容の出力
- 抽出された完全なテキスト内容をコンソールに出力
- デバッグ用の区切り線付きで視認性を向上
2. PowerPoint PDF に最適化されたテキスト抽出
座標ベースソート
// Y座標で降順ソート(上から下へ)
// 同じY座標ならX座標で昇順ソート(左から右へ)
textItems.sort((a, b) => {
const yDiff = Math.abs(a.y - b.y);
if (yDiff <= 5) {
return a.x - b.x; // 同じ行なら左から右へ
}
return b.y - a.y; // 上から下へ
});
重複テキストの除去
- 完全一致テキストの除去
- 部分的一致(包含関係)の検出
- 座標が近接するテキストの重複除去
行の再構成
- Y座標の差が5px以内の場合は同じ行として処理
- 適切な改行とスペースの挿入
- 空行の除去
3. エラーハンドリングとフォールバック
3段階のテキスト抽出戦略
- 座標ベース抽出(メイン): PowerPoint PDF に最適化
- シンプル抽出(フォールバック): 従来の方法
- エラーハンドリング: 処理失敗時の適切な対応
堅牢性の向上
transform
プロパティが存在しない場合のデフォルト値設定
- テキストアイテムの検証とフィルタリング
- 例外処理による処理継続
コード変更詳細
主要メソッドの追加
PowerPoint PDF に最適化されたメインの抽出メソッド
座標ベースでのテキスト抽出を実行
フォールバック用のシンプルなテキスト抽出
isDuplicateText(text1, text2)
テキストの重複を検出
isOverlappingPosition(newItem, existingLine)
重複する位置にあるテキストを検出
ログ出力の改善
processPDFFile メソッド
- PDFメタデータの出力
- 各ページの処理詳細
- 完全テキスト内容のコンソール出力
preparePDFContext メソッド
- ファイル別のテキスト長統計
- 結合前後のテキスト長比較
- コンテキスト内容の部分的出力
期待される効果
PowerPoint PDF の読み込み精度向上
- レイアウトを考慮したテキスト順序の正確な復元
- 重複コンテンツの適切な除去
- 読みやすい形式でのテキスト抽出
デバッグ作業の効率化
- 詳細なログによる問題箇所の特定
- 抽出されたテキスト内容の完全な可視化
- 処理過程の透明性向上
システム安定性の向上
- エラーハンドリングによる処理継続
- フォールバック機能による堅牢性
- 様々なPDF形式への対応
使用方法
- PDFファイルをアップロード: PowerPoint から生成された PDF ファイルを選択
- コンソールログの確認: ブラウザの開発者ツールでログを監視
- テキスト抽出結果の確認: 抽出されたテキスト内容がコンソールに出力される
- 対話生成の実行: 改善されたテキストを使用して対話を開始
技術仕様
対応ブラウザ
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
依存関係
- PDF.js 3.11.174
- ES6+ JavaScript
パフォーマンス考慮事項
- 大きなPDFファイルの場合、処理時間が増加する可能性
- コンソールログの出力により、メモリ使用量が増加
- デバッグモードでの使用を推奨
トラブルシューティング
PDF.js ライブラリが読み込まれない場合
⚠️ PDF.js ライブラリが読み込まれていません。PDFアップロード機能は制限されます。
- ネットワーク接続を確認
- CDNブロックの解除
- ページの再読み込み
テキスト抽出が空の場合
⚠️ ページ X - テキストアイテムが見つかりません
- PDF が画像ベースでないかを確認
- OCR処理が必要な場合がある
- 別のPDFファイルで検証
座標ベース抽出に失敗した場合
⚠️ ページ X - 座標ベース抽出に失敗、シンプル抽出に切り替え
- 自動的にフォールバック処理が実行される
- ログで詳細なエラー情報を確認
- 必要に応じて手動でテキスト確認
今後の改善案
OCR 機能の追加
- 画像ベースPDFに対する光学文字認識
- 手書き文字の認識機能
レイアウト解析の高度化
性能最適化
- 大容量PDFファイルの分割処理
- 非同期処理によるUI応答性向上
更新日: 2025年7月31日
バージョン: 1.0.0
作成者: GitHub Copilot & Coding Agent