【悩み】
・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の学び方」などを発信しています。定期的に更新していますので、ぜひブックマークをよろしくお願いします。
コメント