前回はエクセルファイルでしたが、今回はワードファイル(Microsoft Word File:.docx) です。ワードもエクセルと同様に必要なファイルやフォルダをまとめたZIPファイルになっています。つまり.docxの拡張子を.zipに変更して解凍すればワードファイル内に埋め込まれた画像を取り出すことができます。OpenOffice,LibreOfficeでのドキュメントも同様にZIP圧縮されたファイルなのでワードファイルと同様に解凍して中身を確認することができます。ただし、ワードファイルとは構成は異なっています。

今回もこれまでのようにサンプルで利用するファイル・ディレクトリはデスクトップのsampleディレクトリとしています。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)
また、カレントディレクトリも上記の場所になります。cd ~/Desktop/sampleのようにコマンドを入力してカレントディレクトリを変更しておけばよいでしょう。

docxはzipファイル

 今回解凍するワードファイルは以下の内容になっています。

 それでは、手軽な方法でdocx形式をZIP解凍して画像を取り出してみましょう。Mac/WindowsともZIP圧縮/解凍する機能が標準で用意されています。Linux/FreeBSDなど他の環境ではzip/unzipが標準で入ってないことがあります。その場合は別途インストールしてください。

 Windowsでdocx形式を解凍するにはファイル名の拡張子を.zipに変更します。ちなみにワードがインストールされていなくても画像データなどは取り出すことができます)

 拡張子が.zipになったらZIPファイルとして認識されるので解凍します。

解凍すると以下のようなディレクトリ構成になります。

macOSの場合はターミナルで以下のようにコマンドを入力します。なお、カレントディレクトリになっている~/Desktop/sample/にワードファイルがあるものとします。コマンドを実行するとsaple.docxファイルが解凍され図のようなディレクトリが生成されます。

unzip sample.docx

エクセルの場合はxlディレクトリ内に必要なファイルが入っていましたが、ワードの場合はwordディレクトリ内に入っています。

画像ファイルだけ抜き出す

 それでは画像ファイルだけ抜き出してみます。
解凍されたワードファイルの内容をすべてリスト表示すると以下の図のような構成になります。

画像ファイルはwordディレクトリ内にあるmediaディレクトリ内に入っています。これはエクセルファイルと同じです。

場所が確認できれば後はExplorerやFinderで一般的なファイルと同じようにコピーすることができます。
JPEGファイルだけをデスクトップのsampleフォルダにコピーするにはcpコマンドを使います。*.jpegまたは.jpgのようにワイルドカードを使えばJPEGファイルだけをコピーすることができます。今回の場合は拡張子が.jpegなので以下のようにコマンドを入力します。

cp word/media/*.jpeg ./

解凍せずに中身を確認する

 次に解凍せずに中身を確認してみましょう。ZIP圧縮されたファイルはunzipコマンドでlオプションを指定すると解凍せず中身のファイルパスだけ表示してくれます。

unzip -l sample.docx

ここでJPEGファイルがあるか確認する場合はパイプとgrepを組み合わせます

unzip -l sample.docx | grep ".jpeg"

PNG画像の場合は以下のように指定します。

unzip -l sample.docx | grep ".png"

ちなみにファイルがたくさんあるかもしれない場合は以下のようにwcコマンドを使って何個あるか調べる方が良いでしょう。

unzip -l sample.docx | grep ".jpeg" | wc -l

また、ワードファイルの中身を全て解凍してから取り出すのではなく、JPEG画像だけ抜き出すこともできます。この場合は以下のように指定します。

unzip -j sample.docx 'word/media/*.jpeg'

OpenOffice系のドキュメントファイルの中身を確認する

 次にOpenOffice系のドキュメントファイルの中身を確認してみます。

openoffice
https://www.openoffice.org/ja/
LibreOffice
https://ja.libreoffice.org/

ここではLibreOfficeで作成したドキュメントを使います。内容は先ほどのワードと同じようにしてあります。ファイルの場所もデスクトップのsampleディレクトリ内です。

sample.odtもZIPファイルなのでunzipコマンドで解凍することができます。

unzip sample.odt

中身だけ確認するのであれば以下のようにunzipコマンドのlオプションを指定します。ここらへんは先ほどのワードファイルと同じです。

unzip -l sample.odt

ディレクトリ構成に関してはワードファイルとは異なります。ディレクトリ構成やファイルがどのようになっているかは以下のサイトで仕様が公開されています。

Open Document Format for Office Applications (OpenDocument) Version 1.3
https://www.oasis-open.org/standard/open-document-format-for-office-applications-opendocument-version-1-3-2/
ISO/IEC 26300:2006
https://www.iso.org/standard/43485.html

ドキュメント内の画像はPicturesディレクトリに入っています。

このPicturesディレクトリ内にあるJPEG画像だけを取り出してコピーするには以下のようにします。

unzip -j sample.odt 'Pictures/*.jpg'

画像だけでなく文書内の文字データなども必要に応じて取り出すことができます。
ワードやOpenOffice系のようにドキュメントフォーマットが公開されているものは扱いが楽なので必要なデータを抜き出すプログラムやシェルスクリプトをAIに作成させるのも今の時代には有効ではないかと思います。

では、また次回。

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。