MS-Offiiceから平文を抽出するコマンドの整備

中盤では,MS-Offiiceから平文を抽出するコマンドを揃える.

ここで,選択肢がある.

MS-Word や MS-Excel から平文を抽出するために,前回は abiword とか ssconvert を利用した.その一方で,変換サーバーも試してみたいと,r-labsには書いた.

実はそれから程なくして,unoconvを利用して,OpenSlide環境を構築したのである.(2012年3月)

その際にハマったことは,初期の段階では,LibreOfficeサーバを立ち上げても,エージェントからの要求を受け付けなかったのである.この障害は,LibreOfficeのバージョンが上がることで,多少はエラーが出るものの,すぐに自然消滅した.

せっかくだから,今回はこれにチャレンジしてみる.もし,日本語文字コードで障害が生じ知れば,abiwordやssconvertで解決することにする.

さらに最終盤では,インデックスを作成するための「クロール」を作成して cron として仕掛け,全体が終わるわけだ.


さて,デフォルトでインストールされている LibreOffice は 4.1.4.2-3 である.デフォルトでインストールされている unoconv のバージョンは 0.6 であるが,これと整合がとれている.

しかし,その unoconv をテストしてみると,平文ファイルを出力はするのだが,かならず Segmentation Fault で終了する.ネットで検索してみると,一貫性のない対処方法が紹介されている.

LibreOffice の最新版は 4.4 であり,もはや LibreOffice へ追随していないコマンドであろう.なので今回は unoconv の採用をやめ,LibreOffice で平文への変換を行うことにする.

実行コマンドは,だいたい,次のようになろう.

日本語ファイル名が “お能の表面に貼る.xxx” だとすると,Word,PowerPointExcelの順に,

$ soffice --nologo  --headless  --convert-to “txt:Text (encoded):UTF8” “お能の表面に貼る.doc"
$ soffice --nologo  --headless  --convert-to txt:impress8 “お能の表面に貼る.ppt
$ soffice --nologo  --headless  --convert-to txt:calc8 “お能の表面に貼る.xls

オプションに変換プログラムを明示しなくても,勝手にそれらのプログラムを動作せるのだが,これを明記するのが望ましい.


出力が txt といっても,実際にテストすると,リッチテキストだったりするので,Hyperestraier は検索大丈夫か?とは思うが,今の時点では,おそらく大丈夫だろうと,仮定しておく*1

なお,LibreOffice 4.4 を既存のLIbreOfficeへ上書きインストールできないことがわかかった.なぜなら,ファイル名からして違うのである.

例えば既存の LibreOffice は次のようにしてリストを見ることができる.

$ yum list installed libreoffice*

この時既に 4.4 をインストールしていれば,両者ともにリスト出力される.旧い方の 4.1.1.2 では,

$ rpm -e `rpm -qa | sort | grep -i libreoffice-*`

一方で LibreOffice 4.4 は,

$ rpm -qa | sort | grep -i libreoffice4.4-*
libreoffice4.4-4.4.1.2-2.x86_64
libreoffice4.4-base-4.4.1.2-2.x86_64
libreoffice4.4-calc-4.4.1.2-2.x86_64
libreoffice4.4-dict-en-4.4.1.2-2.x86_64
libreoffice4.4-dict-es-4.4.1.2-2.x86_64
libreoffice4.4-dict-fr-4.4.1.2-2.x86_64
libreoffice4.4-draw-4.4.1.2-2.x86_64
libreoffice4.4-en-US-4.4.1.2-2.x86_64
libreoffice4.4-freedesktop-menus-4.4.1-2.noarch
libreoffice4.4-impress-4.4.1.2-2.x86_64
libreoffice4.4-ja-4.4.1.2-2.x86_64
libreoffice4.4-math-4.4.1.2-2.x86_64
libreoffice4.4-ure-4.4.1.2-2.x86_64
libreoffice4.4-writer-4.4.1.2-2.x86_64

古いバージョンを消し去りたければ,

$ yum remove libreoffice-*

ともう一つ,

$ yum remove libreoffice-*.noarch


LibreOffice 4.4 アーカイブ・ファイルをダウンロードして解凍すると,その中に install コマンドが入っている.これを rpm ファイルを使ってインストールすれば良い.なんとインストール先も選択できるが,まずはオプションを確認する.

$ ./install 
Usage: ./install [-a,--add] [-l,--link] [-U,--update] [-h,--help] <rpm-source-dir> <office-installation-dir>
Example: ./install . ~/libreoffice

インストール先を ~/libreoffice とすると,そこには opt ディレクトリが作成され,更にその下へ libreoffice が作成されていく.

平文へのフォーマット変換は cron で定時起動であり,コマンド名をその起動ファイルへ明記すれば良いので,これでも問題ない.

コマンド名称が例えば libreoffice ではなくて,libreoffice4.4 になったりするのが注意点である.

なお,LibreOfficeをサーバーとして起動させておく案は,デーモンとして働く soffice.bin にまつわるトラブルが今でも多そうなので,今回も近寄らないことにした.Xvfbという,X Windows Systems のバーチャルフレームバッファについても,デーモンとして働かせる必要がない.

*1:無理でした.その一方でunoconvが改善されていたので(2015年6月現在),unoconvを利用する方針へ変更します.Xvfbも不要でした.