Word(docx)ファイルからテキストを抽出する方法
Wordファイルからテキスト情報だけを抽出したいことはよくあると思います。特に大量のWordファイルからテキストだけを取り出したいときには、プログラムで実行してあげるととても簡単に、しかも短時間で処理が終了します。
ここでは、Linux上で、拡張子がdocxになっているWordファイルからテキスト情報だけを抽出する方法をご紹介します。
Wordファイルは展開できる
Linux上では、拡張子がdocxとなっているWordファイルを、unzipコマンドを用いると解凍することができて、以下のようなディレクトリとファイルができあがります。
Topディレクトリ
|--- customXml/
|--- _rels/
|--- [Content_Types].xml
|--- docProps/
|--- word/
|--- document.xml
この中のwordディレクトリ内にあるdocument.xmlファイルにテキスト情報が記載されています。これをプログラムを使ってパースしてあげると、Wordファイル内のテキスト情報だけを取得することができます。
ちなみに、私がいつも行っている方法は、document.xmlファイル内のタグだけをすべて取り除くという単純な方法です。これで、テキストだけを取りだすことができます。
以下にサンプルプログラムを載せています。Perlでの処理になりますが、正規表現での処理なので、PHPやPython、Javaでも同様の処理を簡単に書くことができると思います。
my $file = "sample.docx";
`unzip $file`;
my $text = removeTag("word/document.xml");
print $text;
#XMLからタグを取り除く
sub removeTag{
my ($text) = @_;
$text =~ s/<.*?>//gm;
return $text;
}
もっと単純な方法
テキストだけしか含まれていないWordファイルの場合には、とても簡単にデータを取得できます。以下のコマンドを実行するだけです。折り返されているように見えますが、1行で記述します。
unzip -p ファイル | sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g'
unzipのpオプションは、処理の結果をパイプラインに渡すという意味があります。docxとなっているWordファイルをunzipで処理してあげるとxmlデータが取得できますので、sedで必要なところのみを抽出するという流れになります。
上記のコマンドを実行することで、ほしいテキスト情報が得られることも多いですが、場合によっては文字をエンコードする必要があります。また、画像など他の情報が含まれている場合には、テキストの抽出に著しく時間がかかる場合もあります。その場合には、上で紹介した方法を利用してください。
関連記事
1.Word(docx)内の画像を抽出する方法
2.exif情報の役に立つ活用の仕方~WEB上の写真の上手な利用方法
2.exif情報を持つ写真をブログやSNSにアップするときの注意点