【5分でわかる】PythonでWordから画像を抽出:応用例も解説

 

【悩み】
・PythonでWord内に挿入された画像を抽出したい。
・Wordから画像を取り出すPythonプログラムを作りたい。
・Wordに挿入された画像に対して全文検索をしたい。



こういった「悩み」に答えます。
 

【本記事の内容】
① 事前準備:Pythonのインストールとdocxの構成理解
➁ PythonでWordから画像を抽出:extract関数
➂ 応用例:Word内の画像ファイルを全文検索



本記事に掲載した方法を実践したことで、Pythonを使ってWord文書(docxやdocファイル)から画像を取得できました(下の動画参照)。
 



記事の前半では「Pythonのインストール方法などの環境準備」について解説します。

記事の後半では「Wordから画像を抽出するPythonプログラム」と「応用例である画像に対する全文検索システムの作り方」を説明します。
 

この記事を読み終えることで、「Wordファイルを開かずに挿入された全ての画像ファイルを取り出せる」状態になります。
 

ちなみに、「新規作成」「編集」「変換」といった操作もPythonで実施できます。以下の記事にまとめているので興味がある方は是非ご覧ください。


 

事前準備:Pythonのインストールとdocxの構成理解


「PythonでWordから画像を取り出すための準備」に関してご紹介します。
 

【流れ】
手順1:Pythonのインストール
手順2:docxの構成:unzipなどで解凍して確認



上記の流れで説明します。
 

Pythonのインストール

以下の記事を参考にし、お使いのパソコンやサーバーにPythonをインストールしましょう。

>> 【ubuntu向け】pyenvでPythonをインストールする手順【簡単】

>> 【コピペOK】pyenvでPythonをインストールする手順【Linux用】

>> 【最短5分】PyAutoGUIをWindowsにインストールする手順の「手順1:Pythonのインストール」を参照

>> 【環境構築】インストーラーでMacOSにPythonをインストール

 

docxの構成:unzipなどで解凍して確認

Word文書の拡張子は「docx」です。unzipコマンドなどの解凍操作をdocxファイルに対して実施により、docxの構成ファイルやフォルダを確認できます(下の動画)。
 


上記動画のように、docxファイルは、以下のファイルとフォルダから構成されます。
 



docxファイル内に挿入された画像は、mediaフォルダ内に格納されます(上図の赤字)。

よって、Pythonを用いて、「docxファイルを展開しmediaフォルダ内にある画像ファイルのコピー」により、「wordから画像を抽出」できます。
 

以降で、Pythonを使ってWordから画像を抽出するプログラムとその実行結果を解説します。Pythonの標準ライブラリのみで実現できます。(追加ライブラリ不要)


 

PythonでWordから画像を抽出:extract関数


「Wordから画像を抽出する」プログラムは、以下となります。 

import zipfile
import os

# 対象のワードファイルのPATH
word_path = "sample-for-image.docx"

# ワードファイルの読み込み
word_zip = zipfile.ZipFile(word_path)

# 読み込んだワードファイルの構成ファイル一覧を取得
file_list = word_zip.namelist()

# 抽出した画像の保存用フォルダを作成
output_dir = './images/'
os.mkdir(output_dir)

# 画像ファイルを指定ディレクトリに抽出し保存
for file in file_list:    
    if file.startswith("word/media/") and file != "word/media/":
      word_zip.extract(file, path=output_dir)

word_zip.close()



上記のプログラムを「extract-image.py」というファイル名で保存しましょう。
 

【extract関数について】
・機能
 ZIPファイル内のファイルを指定したフォルダに保存
・使い方
 zipfile型の変数.extract(抽出したいzip内のファイルPATH, path=<保存先>)
・参照
 extractのリファレンス(公式サイト)



以下のコマンドで、上記プログラムを実行できます。ちなみに、上記プログラムでは、以下のdocxファイルを使います。

python extract-image.py


その結果、以下のようにWordから画像を抽出できます(下の動画参照)。

 

上記のようにPythonの標準ライブラリ「zipfile」「os」を使うことで、Wordから画像を抽出できます。


 

応用例:Word内の画像ファイルを全文検索


本記事でご紹介した「Wordから画像抽出」を応用として、以下のような「Word内の画像ファイルを全文検索するシステム」を構築できます。
 


上記全文検索システムは、以下の手順で構築できます。上記の全文検索システムを使うことで、Word内のテキストだけでなく画像も検索対象にできます。
 

【流れ】
手順1:Word文書から画像を抽出
手順2:PythonとOCRで画像を文字認識
手順3:Fessを使って画像ファイルを全文検索



以降で、上記の各手順を簡単に説明します。
 

Word文書から画像を抽出

まずは、本記事の「PythonでWordから画像を抽出:extract関数」箇所で記載したプログラムを元に「指定したフォルダ内にある全てのWordから画像を抽出するプログラム」作成しましょう。
 

PythonとOCRで画像を文字認識

次に、Word文書から取り出した画像に対してOCRで文字認識をするプログラムを作成します。

プログラムの作成方法に関しては、以下の記事をご覧ください。

>>【最短5分】PythonとOCRでPDFや画像から文字認識をする方法
 

Fessを使って画像ファイルを全文検索

最後に、画像ファイルに対して全文検索ができるFessをインストールしセットアップしましょう。

Fessのインストールやセットアップ方法に関しては、以下の記事をご覧ください。

>>【OCR利用】FessでPNG画像ファイルを全文検索する方法
 

以上のように、本記事で紹介したextract関数、OCRソフトウェア、Fessを使うことで、全文検索システムを構築できます。



Pythonを使うことで、Word文書から画像を抽出できることを説明しました。このPythonを使うことで、あらゆる業務や作業を自動化できます。
その事例やヒントを知りたい方には、以下の本がオススメです。

 



ちなみに、上記教材の詳細なレビューに関しては、以下のサイトにまとめています。

>> 「退屈なことはPythonにやらせよう」のレビューの一覧


 

【まとめ】追加ライブラリなしでWordから画像抽出が可能


いかがでしたでしょうか?

上記で紹介した標準ライブラリのextract関数を使うことで、PythonでWord文書から画像を取り出すことができます。

最後にもう一度内容を確認しましょう。
 

【おさらい】
・PythonでWordから画像抽出する場合、追加ライブラリは不要
・画像抽出したい場合はextract関数を使うこと
・画像抽出の応用として、「画像に対する全文検索システムの構築」がある



ちなみに、「新規作成」「編集」「変換」といった操作もPythonで実施できます。以下の記事にまとめているので興味がある方は是非ご覧ください。



本ブログでは、「業務の時短化に繋がるIT技術」や「クラウドやOSSの学び方」などを発信しています。定期的に更新していますので、ぜひブックマークをよろしくお願いします。

>> IT技術やその学び方を発信しているサイト「駆け出し物語」(本ブログ)
 

コメント