前回 は、テキストファイルとHTMLファイルからテキスト情報を抽出する方法について解説しました。今回はMicrosoft Word等に代表されるアプリケーション固有の文書ファイルからテキスト情報を抽出する方法についてとりあげます。
アプリケーション固有の文書ファイル型式
世の中のアプリケーションの多くは、それぞれ固有のファイル型式で情報を保存しています。たとえば、Microsoft Wordは拡張子.doc や.docx のファイル型式、Adobe Acrobatは拡張子.pdf のファイル型式という具合です。そして、各アプリケーションの固有のファイル型式仕様は、オープンになっているものもあれば、アプリケーションベンダがまったく公開していないものもあります。
仕様がオープンになっている文書ファイル型式のファイルからテキスト情報を抽出するには、公開仕様に基づいて文書ファイルを解析し、ファイルの中からテキスト情報を抽出する処理を行うプログラムを開発することになります。一方、仕様が公開されていない文書ファイル型式からテキスト情報を抽出するには、文書ファイルの仕様を手探りで調べていかかなければならないため、仕様が公開されている文書形式よりも遙かに多くの作業が必要になります。そして、かなり大変な作業を行ったとしても、解析結果が正しいという確証は得られません。未解析が原因となる不具合を地道につぶしていく地道で困難な道が続いています。
広く使われている文書ファイルフォーマットの中で仕様が非公開だったものの代表格として、Microsoft Word/Excel/PowerPointのファイル型式が挙げられます。実は、この2月にMicrosoft Word/Excel/PowerPointの文書ファイル型式の仕様が公開されています。現在、仕様書は次のページからダウンロードできます。
この仕様が公開された背景にはMicrosoftの推進するOpenXMLフォーマットの標準化戦略があるようですが、このような情報公開は、従来は独自に解析作業を行わなければならなかったわけですから、いずれにしても格段の進歩です。開発者にとっては歓迎すべきことだと思います。
商用のテキスト抽出ライブラリ
文書ファイルからテキスト情報を抽出する機能は、検索システムや文書管理システムには必須機能です。ところがゼロから開発するとなると前述のように非常に大変です。このテキスト抽出機能をライブラリとして提供する商用の製品がいくつか存在します。
筆者は、次に紹介するアンテナハウス株式会社のText Porter Server (以前はDMCライブラリという製品名でした)という商用ライブラリを製品開発に使用した経験がありますが、サポートされているファイル型式の豊富さ、安定性などの面でお勧めです。
TextPorterでサポートされているファイル型式は以下の通り非常に多岐に渡ります。また、このライブラリはWindows版以外にもLinux版, Solaris版, AIX版が提供されています。
TextPorterがサポートするファイル型式
Word, Excel, PowerPoint, RTF, Works, Visio, Outlook msg, Outlook Express, 一太郎, PageMaker, Acrobat PDF, OASYS, Lotus 1-2-3, Mac Write II, Claris Works, AppleWorks, WordPerfect, Corel Presentations, QuarkXPress, AutoCAD, IGES, DocuWorks, HTML, XML
フリーソフトウェアによるテキスト抽出
LinuxなどのUNIX系の動作環境では、フリーソフトウェアによるテキスト抽出という方法を利用できるファイル型式があります。代表的なテキスト抽出に利用できるフリーソフトウェアには次のようなものが存在します。
wvWare
Microsoft Wordの文書ファイルからテキスト情報を抽出するのに利用できます。正確には、Wordの文書ファイルをHTMLに変換する機能が提供されます。
xlHtml
Microsoft Excelの文書ファイルからテキスト情報を抽出するツールです。上記のURLから0.5というバージョンがダウンロードできます。ExcelからHTMLへの変換を行うxlhtmlコマンド、Power PointのファイルからHTMLへの変換を行うppthtmlというコマンドが提供されています。
xpdf
xpdfはPDFビューワのツールですが、パッケージにpdftotextというPDFからテキスト情報を抽出するツールが含まれています。現在の最新版は3.02pl2というバージョンです。
以上のようなユーティリティを利用すると、テキスト情報を抽出するプログラムをわざわざ開発しなくても用が足りる場面も多いと思います。しかし、実際に使ってみると、正常にテキスト情報が抽出できないことや、最新版のファイル型式に対応できていないなど、フリーソフトウェアならではの難しさがあることも1つの問題です。
OLEコントロールを使う方法
Microsoft Word, Excel, PowerPointはOLEコントロール というしくみが備わっています。この機能を利用すると、アプリケーションの自動動作ができます。OLEコントロールを利用すると、ネイティブのアプリケーションを起動し、文書ファイルを開き、テキスト形式で保存する処理をバッチ的に実現できます。
フリーソフトウェアの検索エンジンの1つであるNamazuではwvWare, xlHtml, xpdfを用いる代わりにOLEコントロールを使って、テキスト情報を抽出することもできます。ただし、実際に数十万件という単位のファイル数を扱ってみると、途中でWordがハングアップしてWindowsを再起動しないと再度Wordが動作するようにならない問題に遭遇するなど、安定性に関する課題があります。実用に耐えるのはせいぜい数千件の単位のファイルを扱う場面に限られるのではないかと思います。
Mac OS XのSpotlightインポータ
Mac OS Xの10.4(Tiger)以降には、Spotlightという優れた検索機能が備わっています。Spotlightを呼び出してシステムワイドで検索を行うこともできますし、アプリケーションからはSearch API というAPIを通じて検索機能を利用することもできます。
このSpotlightの裏方では、Spotlightインポータ という文書ファイルからテキストなどのメタデータ抽出を行う文書フィルタが機能しています。Appleは主な文書ファイル形式に対応するSpotlightインポータをMac OSに標準添付しています。アプリケーションの開発者は、自分のアプリケーションのファイル型式に対応するSpotlightインポータを実装すれば、自分のアプリケーションのファイルをSpotlightで検索対象にできるというしくみです。
Spotlightインポータについては、「 Spotlight インポータのプログラミングガイド 」に詳しい開発方法が紹介されています。
Spotlightインポータは主としてSpotlight機能のために用意されている文書フィルタですが、独自の検索エンジンから利用することも可能ではないかと考えています。Mac OS X版のFINDSPOTでは、spotlightインポータを利用する方法を検討している所です。
次回予告
次回は、近年Windows環境のテキスト抽出方法としてすっかり定着した感のあるIFilter についてとりあげたいと考えています。