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も不要でした.

Ghostscriptを使うなんてもう無いと思っていた...

自己組織化マップ(SOM)のサンプルコード,特に日本語文字コードが入っている,を動かすために,まさか Ghostscript とか LaTeX を使うなんて,思ってもいなかった.でもよく考えて見れば,私は27年前に戻りつつあるのである.定年まで数年残す今となって,今までの人生,一体何だったのか?と思わずには入られない.
...という愚痴はさておき,Mac OS X 用にきちんとパッケージ化してくれた,貴得な方が世の中にはいるものである.

  Ghostscript.app - マスクメロンhttp://www.muskmelon.jp/?page_id=75

...であるが,ここで日本語が表示できないと,今回の調査は完了しない.これまた貴得な方がポケモンで自己組織化マップを実行する,という例を示していた.

  懺悔する猫 som_pakを日本語表示してポケモンのクラスタリング

早速,試したがうまくいかない.出力された PostScript ファイルには,Helvetica が設定されていた.どうせ日本語文字コードしか使わないので,*.c *.h のコードを書きなおしてしまう,という手順も先の方が紹介していた.しかし天邪鬼な私は,フォントをちょっとだけ小さくすることにした.つまり,

find . -name \*.c -exec perl -p -i -e 's/Helvetica/HiraMaruPro-W4-UniJIS-UTF8-H/g' {} \;
find . -name \*.h -exec perl -p -i -e 's/Helvetica/HiraMaruPro-W4-UniJIS-UTF8-H/g' {} \;

さて,他人のサンプルコードを拝借して調整は終わったが,此処から先は実データからサンプルを作るので,紹介はできない.

# 「はてな記法」って,こんなに不便だとは思わなかった.次はGist記法とか,TeX記法を試してみよう.

今回の日本語全文検索は構成を変える

今回は CentOS 7.0 で行くが,記事を書いた約3年前は CentOS 5.6 だった.実際に稼働させた社内のサーバーは更に古く,4.7 だった.時期尚早だったというか,とにかく,各OSSのバージョンを調整するのに,試行錯誤の時間が長くなってしまった.

 

今回は新しい OS で,前回はできなかった LibreOffice サーバーをやってみようと思う.実は,あの後2012年2月に,社内のサーバーで OpenSlide を立ち上げようとしたのだが,LibreOffice の "unoconv" リスナーがまともに動作しなかった.

 

その後,私が入院で中断した後に,LibreOffice を 3.5.1 へアップしたら,まともに動作した.実は,共同者にネットで検索してもらって,うまくいくかもと,ベッドの上で内心期待していたのだが. 

 

なぜ OpenOffice サーバーなのか?というと,特に大サイズのMS-Word文書の検索用インデックス作成において,メモリ消費量がバカにならなかったからだ.これは LibreOffice サーバーを常時立ち上げておけば,緩和されることは知っていた.

 

今回はまず最初に,これを試してみようと思う.

 

2年ぶりに再開

実に2年ぶりにダイヤリー,それも自分向けのメモを書くことにした.普段は会社でドキュメントをいやというほど書いているので,公開するものがなかったからだ.でも今後は,多少,オープンなものが増えると思うので,さしあたって,Redmineの日本語全文検索のインストールと設定手順から,メモを書こうと思う.約3年前に書いた記事(日本語全文検索の環境づくり - r-labs)の内容を思い出すのに時間がかかったが...

分かりにくい私の資料でも分かる人がいた!

第5回品川Redmineの資料を事前に[公開](http://shinagawa.redmine.r-labs.org/projects/shinared/wiki/第5回勉強会)した.

驚いたのは几帳面にもそれを読んで,こうtweetした人がいた.

「イシュートラッカーをイシュー発見にも活用するには、というお題が出ていますね。超越的。」by @ysd101 さん

資料を(おそらく)チョット読んだだけで私の真意を汲んでくれる人がいたとは!と感心したいところだが,そもそもこれは,運用業務とかヘルプデスク/サポートデスクなど,あらかじめ issue を計画できない組織を念頭に置いたものである.他にも研究部門や営業活動,商品開発も当てはまるはずである.

今回は,そういった利用背景を選択してもらい,ワークショップで議論していただいた.やはり,利用環境を絞れば,いろいろと意見で出てくるものである.今回はそうして収集した情報を後日,@akipii さんがまとめるだろう.

さて,私がこのような「超越的」な課題を提出したのは,そもそも議論を活発にさせようという意図があった.昨今の傾向として,アジャイル開発ではない利用者が増えてきている,という感触があったので,課題を一般化したのである.

また,かねてより私が抱いていた Redmine の可能性を利用者がどう捉えているのか?を探りたいとも思ったからだ.幸運にも今回,意外な?利用方法が参加者から聞けた(紹介された).その辺りは @akipii さんが取り急ぎ,[まとめている](http://forza.cocolog-nifty.com/blog/2013/06/5redmine-47redm.html).(いつもながら,精力的な記述に感心します.)


さて本題だが,私はこの,あらかじめ issue を計画できない,起票すれば必ず commit しなければならない Redmine において,計画系を作れたらイイナ,と考えていた.実際,私が導入させた運用組織では,起票した issue の「磨き上げ(brush up)」のために,一種の「さらし(exposed)」機能として活用したぐらいである.

そして磨きあげた後に,実際に実行する「タスク」として登録(=コピー?)できたらいいな,と考えていた.欲を言えば,MindMapの図と issue が連動する仕掛けがあれば,なお良い.マネジャーが全体的に把握したものが,そのまま issue にできれば,転記の手間,あるいは修正を繰り返すコストを下げることができるからである.

後日,更に思索を続けよう.

しばらくの間,データ解析システムと機械学習に頭を切り替え無くてはならない...

 

最初に(ただし約3年前)

社内でRedmine Wikiに種々の技術ネタと手順を書き留めていたが,活動の場を外へも広げることになったので,いろいろと公開することにした.

それに,いつも検索でお世話になっているので,自分も貢献しなくては,と思っていたのだった.

続きを読む