Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Convert Word (DOCX) to Markdown With Python (Standard Library Only) for LLM Prompts and Chatbot Knowledge

2026年11月04日に「Dev.to」が公開したITニュース「Convert Word (DOCX) to Markdown With Python (Standard Library Only) for LLM Prompts and Chatbot Knowledge」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Word文書をLLMプロンプトやチャットボットの知識源として活用するため、Python標準ライブラリのみでDOCXをMarkdownに変換するスクリプトが紹介されている。見出し、リスト、テーブル、リンク、画像を保持し、依存関係なしで実行可能。社内ドキュメントの効率的な利用を可能にする。

ITニュース解説

企業内に蓄積された多くの重要な情報、例えば返金ポリシーや新入社員向けガイド、業務手順書などは、しばしばMicrosoft Wordファイル(.docx形式)として保存されている。システムエンジニアを目指す上で、これらのWord文書を効率的に活用する方法を学ぶことは非常に重要だ。特に、近年注目される大規模言語モデル(LLM)のプロンプトとして利用したり、Retrieval Augmented Generation(RAG)システムのインデックスに含めたり、チャットボットの知識ベースとして活用したりする場合、Wordファイルそのままの形式や、単にテキストを抽出しただけでは扱いづらいという課題がある。

ここで有効なのが、Word文書をMarkdown形式に変換することだ。Markdownは、見出し、リスト、テーブル、リンクといった文書の構造をシンプルかつ読みやすいテキスト形式で表現できる。この特性により、Word文書の構造を保ったままAIシステムに渡せるだけでなく、人間の目にとっても内容の確認や差分比較が容易になり、情報を意味のある単位で分割しやすくなるという大きな利点がある。

この課題を解決するため、Pythonの標準ライブラリのみを用いてWordファイルをMarkdownに変換するツールが開発されている。標準ライブラリ(具体的にはzipfileとxml.etree.ElementTree)だけを使うメリットは非常に大きい。外部のライブラリを追加でインストールする必要がないため、開発環境や運用環境への導入が容易になり、CI/CDパイプライン(ソフトウェア開発の自動化プロセス)やリソースが限られたコンテナ環境、あるいはサーバーレス関数といった多様な環境で手軽に利用できる。この変換ツールは、Word文書内の見出し、太字や斜体、ハイパーリンク、ネストされた箇条書きや番号付きリスト、テーブル、改行、画像、さらには変更履歴で挿入されたテキストまでを適切にMarkdown形式に変換できる能力を持つ。

Wordファイル(.docx)は、実際には単一のファイルではなく、複数のXMLファイルをZIP圧縮したアーカイブである。もしWordファイルの拡張子を.zipに変更して解凍すると、その中に多くのXMLファイルが格納されているのがわかるだろう。この内部構造を理解することが、変換ツールを構築する上での鍵となる。主要なXMLファイルとして、文書の本文内容が記述されたword/document.xml、見出しなどのスタイル定義が記述されたword/styles.xml、リスト(箇条書きや番号付きリスト)の具体的な書式が定義されたword/numbering.xml、そしてハイパーリンクのターゲットや画像ファイルの参照先といったファイル間の関係性が記述されたword/_rels/document.xml.relsなどがある。

したがって、WordからMarkdownへの変換ツールは、これらのXMLファイルを適切に読み込み、解析する一連の処理を実行する。具体的には、word/document.xmlから本文の構造を順序通りに抽出する。次に、word/styles.xmlとword/numbering.xmlを参照し、各段落が見出しであるか、リストのどのレベルに属するか、そのリストが箇条書きなのか番号付きなのかといった詳細な書式情報を解決する。さらに、word/_rels/document.xml.relsを用いて、ハイパーリンクの実際のURLや画像のファイルパスを特定する。

このような変換ツールを実用的なものにするためには、いくつかの技術的な工夫が必要となる。例えば、WordのスタイルIDは言語や作成者によって異なる場合があるため、「Heading1」のようなIDではなく、「heading 1」のようなスタイル名やアウトラインレベル(見出しの階層)を使って見出しを識別する方が信頼性が高い。また、Wordは内部的にテキストを細かく分割することがあるため、Markdownの出力で「annual****plans」のような不自然な連結を避けるため、隣接する同じ書式のテキストは結合する処理が必要だ。書式がオフであることを示す<w:b w:val="0"/>のようなXML要素も正しく解釈しなければならない。リストの書式が段落に直接設定されている場合と、スタイルを通じて適用されている場合の両方に対応することも重要だ。テーブルの変換では、Markdownのテーブル記法に合わせて、セル内のパイプ文字をエスケープしたり、複数段落からなるセルを適切に結合したりする処理が求められる。さらに、文書の変更履歴で挿入されたテキストは含み、削除されたテキストはスキップすることで、読者が見る最終的な内容を正確に変換する。セキュリティの観点からは、javascript:のような危険なリンク先を持つハイパーリンクは変換時に除外することで、潜在的なリスクを防ぐ。

Pythonスクリプトでは、まずDocxクラスがWordファイルを受け取り、前述のXMLファイルを読み込んでスタイル、リスト、リレーションシップの情報を辞書としてメモリ上に格納する。その後、文書の本文を順に走査し、各段落やテーブルなどの要素をMarkdown形式に変換していく。段落内のテキスト、画像、リンクといったインライン要素は、まずセグメントに分解され、その後、同じ書式を持つ隣接するセグメントは結合され、Markdownの太字や斜体、リンクの記法が適用される。画像はWord文書から抽出され、指定されたメディアディレクトリに保存され、Markdownの画像リンクが生成される。テーブルはMarkdownのテーブル構文に変換され、セル内の改行や特殊文字は適切に処理される。

このスクリプトは、単一のWordファイルをMarkdownに変換するだけでなく、複数のWordファイルを一括で変換し、元のフォルダ構造を維持したまま出力するといった実用的な用途にも対応できる。抽出された画像は、生成されるMarkdownファイルからの相対パスでリンクされるため、変換されたMarkdownファイルと画像フォルダをまとめて移動しても、リンクが壊れることなく利用できる。

しかし、このスクリプトにもいくつかの限界があることを理解しておく必要がある。例えば、脚注、末尾注、コメントといった情報は、現在のバージョンでは変換時に無視される。これらはWord文書の別のXMLファイルに格納されているため、必要であればスクリプトを拡張して対応することも可能だ。また、Wordの結合セルやセル内にネストされたテーブルのような複雑なテーブル構造は、Markdownの表現力の限界から、完全に再現できない場合がある。このようなケースでは、MarkdownではなくHTML形式で保持するか、手動で修正する必要があるかもしれない。文字スタイル(例:「Strong」スタイルによる太字)は、現状では直接設定された太字や斜体ほど単純には扱われないが、特定のスタイルIDに対応するようスクリプトを修正することで対応可能だ。

Markdown形式で出力されたファイルは、AIの知識ベースとして非常に高い有用性を持つ。特に、見出し(##など)は情報を意味のあるチャンクに分割する自然な境界となり、RAGシステムなどで利用する際に、より適切な情報検索に繋がりやすい。変換されたMarkdownファイルは、人間が手動でレビューする際も、Wordファイルよりも内容の確認が容易である。ただし、最も重要な点は、変換後のMarkdownファイルが常に最新の情報を含んでいるか、必ず一度は確認することだ。変換ツールは文書の構造を理解しても、その内容の「鮮度」までは判断できないからである。

もしPythonスクリプトの実行や依存関係の管理が難しい環境であれば、オンラインで利用できる変換ツールも選択肢となる。これらのツールはブラウザ上でWordファイルをアップロードするだけで、手軽にMarkdown変換を行うことができる。しかし、大量のファイルを一括処理する場合や、変換のルールを細かく制御したい場合には、今回紹介したようなPythonスクリプトがより適しているだろう。

このPythonスクリプトによるWordからMarkdownへの変換は、単にファイル形式を変えるだけでなく、Word文書の内部構造を理解し、その情報をAIが利用しやすい形に整形するという、システムエンジニアにとって非常に実践的なスキルと知識を要する作業だ。Wordファイルに埋もれた貴重な情報をAIの力で最大限に活用するための、強力な第一歩となる。

1994文字。

関連コンテンツ

関連IT用語

関連ITニュース