ごめんなさい。。。
というわけで、今更ですが、Apache Tika を使ってみました。
Apache Tika
前回は Groonga で全文検索データベースを構築しました。
で、テキストファイルだけなら別に問題ないのですが、世の中には「ワード」とか「エクセル」とか「PDF」とか全文検索したいデータが多くあります。
それぞれのファイル毎に解析するものがあれば、まあそれはそれで助かるのですが、特に「ワード」「エクセル」は xml になる前のタイプの解析ツールがなかなか見つからなくて、少し困っていました。
Google先生に聞いてみたところ、「Apache Tika」というものがある、ということを教えてくれたので、早速使ってみました。
Mac でチカチカ
Mac の場合は簡単でした。
$ brew install tika
使い方も簡単
$ tika --text hoge.doc > hoge.txt
これだけです。
そしてすごいのは、doc
だけでなくxls
とかpdf
とかも同じ様に出来るのですよ!
はぁ、もうこれすごい。ありがとー Apache Software Foundation!
Linux でもチカチカ
Debian10 (buster) でインストールしてみました。
# apt install libtika-java
すると、/usr/share/java/
以下に関連ファイルがインストールされます。( tika- で始まるファイルたち )
しかし、これらはコアなツールなので、Mac版と同じようにさらっと使いたい場合は、別途ツールをダウンロードする必要があるようです。
本家からダウンロード
便利ツールは、tika-app-x.xx.jar
(x.xxはバージョン)で、これは本家からダウンロードします。
今回 apt でインストールされたのは、1.20 だったので、バージョンを合わせます。
https://tika.apache.org/download.html の Download Apache Tikaセクションの下の方にある、archives から目的のファイルをダウンロードしましょう。
$ curl -o tika-app-1.20.jar https://archive.apache.org/dist/tika/tika-app-1.20.jar
せっかくなので、先ほど apt でインストールしたところに移動させておきます。
# mv tika-app-1.20.jar /usr/share/java/
使い方は、Mac版と同じ感じです。
ただし、基本 Java なので、以下の感じになります。
$ java -jar /usr/share/java/tika-app-1.20.jar --text huge.doc > hoge.txt
はい、できました。
すごいですね。ありがたい。
画像も取得できるっぽい
なんか色々高機能な感じです。
文書内に埋め込まれた画像とかも抽出することができるみたいです。
Macの場合
$ tika --extract hoge.pdf
Linuxの場合
$ java -jar /usr/share/java/tika-app-1.20.jar --extract hoge.pdf
とすると、同じフォルダに、 hoge.pdf で使われている画像がずらっと取得できます。
Macの場合の実行結果例)
INFO As a convenience, TikaCLI has turned on extraction of
inline images for the PDFParser (TIKA-2374).
Aside from the -z option, this is not the default behavior
in Tika generally or in tika-server.
9月 29, 2020 5:43:27 午後 org.apache.tika.config.InitializableProblemHandler$3 handleInitializableProblem
警告: J2KImageReader not loaded. JPEG2000 files will not be processed.
See https://pdfbox.apache.org/2.0/dependencies.html#jai-image-io
for optional dependencies.
9月 29, 2020 5:43:27 午後 org.apache.tika.config.InitializableProblemHandler$3 handleInitializableProblem
警告: org.xerial's sqlite-jdbc is not loaded.
Please provide the jar on your classpath to parse sqlite files.
See tika-parsers/pom.xml for the correct version.
Extracting 'image0.png' (image/png) to ./image0.png
Extracting 'image1.png' (image/png) to ./image1.png
Extracting 'image2.png' (image/png) to ./image2.png
Extracting 'image3.png' (image/png) to ./image3.png
Extracting 'image4.png' (image/png) to ./image4.png
Extracting 'image5.png' (image/png) to ./image5.png
まあなんか足りないって怒られますが、無事画像を取り出すことに成功しました。
いやすごい。
##まとめ
Apacheさんは Solr とか自前で全文検索エンジンを開発してるから、Tika のようなものも付随して作っているのですよね。そしてそれをオープンソースとして公開されてて、本当すごいなって思います。ありがたいです。
みんなもチカチカしてみましょう。
#あ、Tika の読みは「ティカ」っぽいですが、まあいいでしょう。。