大規模言語モデル(LLM)やRAG(Retrieval-Augmented Generation)ナレッジベースの活用が広がるなか、多くのAI開発者や企業が同じデータ整備の課題に直面しています。これまでWord(DOCX)に蓄積してきた業務知識を、構造を失わずに大規模言語モデルへ取り込むにはどうすればよいのでしょうか。
単純にプレーンテキストとして読み込むだけでは、十分な結果を得にくいことがあります。整った表は文字列の塊になり、丁寧に設定した見出し1・見出し2の階層は失われ、図版も本文との対応が分からなくなります。
複雑なDOCXを、大規模言語モデルが扱いやすいMarkdown形式へ、安定して変換したい場合に向けて、この記事では実務的な処理方法を紹介します。
オープンソース解析ライブラリ(python-docxなど)の限界
多くの開発者は、まずpython-docxやその他のオープンソースツールでWordのテキスト抽出を試します。しかし、すぐに次のような課題にぶつかることがあります。
- 表の構造が失われやすい:Wordの表には、結合セルやネストした表が含まれることがあります。単純な読み取りスクリプトではセル内の文字を連結するだけになり、行と列の対応関係が失われがちです。
- 見出しの意味情報が失われる:文書作成者が標準の「見出し1」「見出し2」スタイルを使わず、本文を大きな文字にして太字にするだけのケースも少なくありません。こうした「見出しのように見える段落」はオープンソースのスクリプトでは判別しにくく、段落分割(Chunking)の際に文脈上の境界が失われます。
- 画像を本文に対応付けにくい:抽出された画像は個別ファイルとして散在しやすく、出力テキスト内の元の掲載位置に画像アンカーを配置するのは簡単ではありません。
- 複雑な文書構造に対応しにくい:複雑な番号付きリストやヘッダー・フッターなどは、オープンソースの方法では完全に処理できないことがあります。
SimplifyAIの方法:表と見出し階層を保持するMarkdown抽出
Word文書をシステムにアップロードし、Markdown形式でエクスポートすると、SimplifyAIは見出し階層や表構造をできる限り保持し、ナレッジベース処理に適した構造化コンテンツとして出力します。
1. 表構造をできる限り保持
結合セルを含む財務報告書や複数ページにまたがる表でも、行列の関係を可能な限り保ち、標準的なMarkdown表記(|---|---|)として出力します。ネストした表については構造化した形で簡略化し、主要なデータの関係を保持できるようにします。
2. 見出しを検出し、意味に沿ったChunkingを支援
標準スタイルだけでなく、ページ上の視覚的な階層も踏まえ、「見出しのように見えるが、標準の見出しスタイルを使っていない」段落を識別します。出力されるMarkdownでは、# H1や## H2のような階層情報をできる限り保持するため、後続の見出し境界に基づく文書分割に活用できます。
3. 本文と画像を対応付け、画像をまとめて出力
抽出対象はテキストだけではありません。システムはDOCX内の図版を出現順に整理し、Markdown内の該当位置に画像アンカーを挿入します。 最終的には、整理された.mdファイルと構造化された画像フォルダを含むZIPファイルをダウンロードできます。ベクトルデータベース向けの処理フローにも接続しやすくなります。
4. 非標準の文書にも対応
実際のWord文書は、異なるバージョンのWPSやOfficeで編集されていることが多く、内部構造が標準的でない場合があります。SimplifyAIはエクスポート前に必要なクリーンアップと互換処理を行い、複雑な文書でもテキスト抽出が成功する可能性を高めます。
ナレッジベース用の構造化文書を準備する
SimplifyAIは、文書をナレッジベースへ登録する前の前処理ツールとして利用できます。複雑な表を含むDOCXをワークスペースにアップロードし、どのような構造化Markdownとして出力されるか確認してみてください。