2018年7月3日火曜日

greple + App::Greple::msdoc で Microsoft Office ドキュメントをコマンドラインから検索、テキスト抽出(出力)する!

知人がFacebookでつぶいていたのをみて、面白そうだったので早速手持ちの Mac(macOS 10.13.5)にインストール。ちょっとインストールに手間取ったので、備忘録として残しておきます。

参考情報


greple を Mac へインストール


ターミナルより、次の3つのコマンドでインストールできます。
※参考情報であげたサイトをみると brew (要 Homebrewのインストール)でインストールしてますね。

sudo cpan install App::Greple::perl
sudo cpan install App::cpanminus
sudo cpanm install App::Greple::msdoc

cpan は perl モジュールをインストールするためのツールで、macOS には標準搭載されています。これを使って greple をインストールします。 /Library 以下に書き込む(標準 perl を使うので)ため、sudo を使って管理者権限でインストールします。

greple コマンドは、
  • /usr/local/bin/greple 
にインストールされます。

次に cpanm コマンドをインストールします。これは App::cpanmius というモジュールをインストールすることで利用できるようになります。

cpanm コマンドは、
  • /usr/local/bin/cpanm
にインストールされます。
cpanm をインストールした理由は、App:Greple::msdoc(GitHub)のINSTALL項目に、「cpanm App::Greple::msdoc」とあったので、cpanm があったほうがいいのだろうな、、という軽い気持ちでした。

で、そのコマンドを叩いてインストールしたのでした。

/usr/local/bin への PATHを通そう!


macOS 標準の bash シェルを使っているなら、
which greple
/usr/local/bin/greple
とPATHがすでに通っていれば何もしなくてもよいのですが、
which greple と /usr/local/bin/greple 等 greple のPATHが表示されないなら、PATHを設定する必要があります。

 ~/.bash_profile
export PATH="/usr/local/bin:$PATH"
を追加しておきましょう。

使ってみよう!


とまぁ、インストールは cpanm をどうやってインストールするのかなとかで少し手間取りましたが、終わってみれはあっさりとインストールできました。インストールしたからには使ってみなければ!ですね!

Microsoft Office 2016 for Mac で、2種類のフォーマットの Word文書を用意してみた
  • test.doc (Word 97-2004 までの形式)
  • test.docx (Word 2007 以降の形式)
でまぁ文章は上記の通りですね。あまり考えてません (^^;
ダウンロードフォルダに test.docとtest.docx を置いたとします。

現在の Word 形式の場合


greple -Mmsdoc --dump  ~/Downloads/test.docx >  ~/Downloads/test.txt

としてダウンロードフォルダに text.txt として出力してみましょう。
それを CotEditor というテキストエディタで開きます。


ほうほう、改行コードは LF なのね。。また段落(Enter)ごとに空行が入るのは仕様だそうです(参考情報によれば)。ちなみに、Shift+Enter (改行)は、認識しないようで、テキストデータで出すと、改行なしで出力されます。

を出力すると


になります。

画像を途中で挟んでも、そこは無視されてテキスト部分だけが出力されます(当たり前か)。

古い Word 97-2014 形式の場合


greple -Mmsdoc --dump  ~/Downloads/test.doc >  ~/Downloads/test2.txt
SKIP /Users/◯◯/Downloads/test.doc

あらま、古い形式は対応していないようですね。
test2.txt も空でデータが入っていません。

検索してみよう


greple -Mmsdoc '検索'  ~/Downloads/test.docx


ふむふむ。まぁ テキストファイルに落とし込めたなら、あとは別ツールを使えばいいので、このあたりでいいかな。

PowerPoint もいけるそうだが、どうやる?


折角なので、発表に使ったデータでやってみましょう。
のように 64スライドもあります。画像も沢山つかっています。
これを test.pptx にリネームして、ダウンロードフォルダにいれておきます。

greple -Mmsdoc --dump  ~/Downloads/test4doc >  ~/Downloads/test4.txt

とするとあっさりできましたね。
ちなみにサクッと出来ました。time で時間をはかるとほぼ一瞬。

time greple -Mmsdoc --dump ~/Downloads/test4.pptx> test4.txt
real 0m0.297s
user 0m0.218s
sys 0m0.047s

はやいな!
データは、スライドにページ番号をいれていたので、
開幕〜いきますよ!
9
のようにスライド9番目だなというのは分かります。ただスライドの順番がバラバラですねぇ。スライド28→7→8→9→10→22→11→.. 


スライド44の文字化け


は、下図のように元スライドをみると「→」か。。まぁ一部このような部分もありますが、ほぼテキストをうまく取り出しているのですごいですね!



じゃあ、Excelはいけるの?いけるよね?


Excelデータを test5.xlsx としてダウンロードフォルダに入れる

greple -Mmsdoc --dump ~/Downloads/test5.xlsx > test5.txt

さすがに意味不明なデータになりますね。



元は、下記のようにA - E にデータが入っていました。もちろんテキストデータとしては問題なく出力できていますが、どの行かわからなーいという感じに。




簡単に使えるようにエイリアス設定をしておこう!


greple というコマンド自体覚えておける自信がありません。
ここは alias コマンドで好きな名前で使えるようにしちゃいましょう。
macOS の標準シェルは bash です。ので、 ~/.bash_profile の末尾に、

alias msdump='greple -Mmsdoc --dump'

を追加しておけば、以後

msdump  ◯◯.docx  > △△.txt 

のように、コマンドオプションを知らなくても使えるようになりますよ。

XML形式での出力も可能


何かプログラム処理をしたいなら、そういうのもありかもしれません。

greple -Mmsdoc --dump --indent ~/Downloads/test.docx >  ~/Downloads/test.xml

などのように --dump に加えて --indent オプションを追加するだけです。
すると下図のように、XML形式のデータとして出力できますね。



とちょっと面白そうなコマンドだなと思っていろいろ試したのでした。これはなかなか良さそうですね!

2018年7月3日 @kimipooh




0 件のコメント: