optex -Mtextconv
以前、こういう記事を書いた。
簡単に言うと、Word のファイルを通常のテキストファイルとして扱うことができるというものだ。実際には、Word だけではなくて、PowerPoint や PDF など、様々なファイルタイプにも対応している。というものの、PDF はやはり PDF ビューアで見た方がいいし、テキスト情報を取り出して処理しようとしても、レイアウトによって元の文章のコンテキストが破壊されていて、思ったような結果が得られないことが多い。PowerPoint も似たような感じだ。
その点、Word のファイルからは、テキスト情報を素直に抜き出して良質のデータソースとして利用することができる。パラグラフの途中で改行していないので、プレインテキストのファイルよりも処理しやすいくらいだ。しかも、Word の文書は Word アプリで読んだ方がいいかというとそうでもない。起動に時間がかかるし、ドキュメントビューアとしてはイマイチだし、余計な機能がゴチャゴチャ付いててうるさい。第一、僕の MacBook には Word のアプリなんか入ってないのだ。だから Pages が立ち上がるわけだが、これがまたどうも冴えない。
optex
の textconv
モジュールを使うと、Word のファイルをテキストファイルと同じように扱うことができる。たとえば、
optex -Mtextconv less foo.docx
とするだけで、ファイルの中身を less で見ることができる。-Mtextconv
が長すぎれば -Mtc
でもいい。僕は
alias tc='optex -Mtextconv'
という alias を作っているので、実行したいコマンドの最初に tc
を付けるだけでなんでもできる。なんなら、less で直接 docx ファイルを開けるように設定することもできる1。
デジ庁のサイトにオープンデータ基本指針というファイルがあるので、これを読むとこんな感じだ。
実際には次のようにして、ansicolumn -DPC2
というコマンドを使って2カラムに表示している。こうしないと、横長の画面では視線の移動が大きくなって読みにくい。-D
オプションが指定されていると、禁則処理も行う。
tc ansicolumn -DPC2 20210615_resources_data_guideline_02.docx | less
ここまでは既に書いてきた内容だが、今までと違うのは上の例で赤く色付けした部分だ。これは脚注の番号で、別のコマンドで処理して色付けしてある。
脚注対応
textconv
モジュールは、テキストデータを抜き出して、検索したり校正したりするのが主な用途で、そのまま読むことはあまり考えていなかった。そもそも表やら図やらが含まれていても見えないので実用的ではない。しかし、このような文章だけのドキュメントであれば、PDF で整形した結果を読むよりも、むしろ読みやすくはないだろうか。
読むのが目的なら脚注番号もなければ困るだろうということで、今までは無視していたものを表示するようにした。実際の脚注は、ページではなく文書の最後にまとめて付けられる。
脚注番号が2からはじまっているのは、データファイルの中にそう書いてあるからだ。Word で表示すると1からになるが、どういうルールなのか不明だ。
大きな画面があれば、文書全体を表示することもできる。全体を俯瞰して見たい場合には有効だと思う。
XSLT の使用をやめた
今回のリリースで、大きく変更した部分がある。Office ファイルは OOXML という形式の XML ファイルでできていて、textconv モジュールの最初の実装は、そのデータから半ば力づくでデータを抜き出す方式だった。その後、XSLT という XML データを変換するフレームワークがあることがわかったので、同じことを XSLT で実装して、可能であればそちらを実行するようになっていた。
しかし、この XSLT がどうもトラブルの元だ。まず、ライブラリがインストールできない。macOS の場合、標準でインストールされているのでいいのだが、新しいバージョンを入れようとすると失敗する。GitHub Actions のテスト環境でもデカいライブラリをインストールしようとして時間かけた挙句にコケる。
それよりなにより、プログラムがまったく読めない。XML を変換するルールを XML で書こうと決めたのは一体全体どういう了見なんだろうか。見よう見まねで書いてはみたものの、後から読んでもさっぱり理解不能だ。Perl のプログラムも読みにくいと言われるが、そんなレベルではない。そもそも XML が人が読むためのものではないし、ましてや人が書くものではないのだろう。いやいや、XSLT にもこんないい面があるんだという話があったら、どうかご教授願いたい。
今回、脚注を処理するために以前より複雑な処理が必要になったこともあり、XSLT でそれを実装するのは止めて、標準インストールの手順からも外した。というわけで、元の力づくの方法に戻っているが、極めて単純なロジックで実装されていて高速に動作する。だから、処理速度的にはまったく問題はない。
リポジトリ
インストールは cpanm
で。
cpanm App::optex::textconv
関連記事
以前書いたこの環境も最新バージョンに対応しているので、Docker が使えれば手軽に試すことができる。
cpanm App::Greple::xlate
して
xlate -C
するだけで、カレントディレクトリをマウントして Docker 上でシェルが立ち上がる。ただ、これだと cpanm App::optex::textconv
するのと変わらないか。インストールしないで Docker だけで使う方法は記事の中に書いてあるのでよかったらどうぞ。
-
optex --ln less
すると~/.optex.d/bin/less
というシンボリックリンクが作られる。このディレクトリをPATH
に入れて、~/.optex.d/less.rc
の中にoption --tc -Mtextconv $<move>
という行を入れておくと less で--tc
オプションが使えるようになる。さらに、option default --tc
を追加すれば、常にそれが有効になる。 ↩