株式会社クリアコード > ククログ

ククログ

«2010-10-29 最新 クリアコードの業務内容を紹介 - NICT情報通信ベンチャー支援センターのインタビュー»
タグ:

PDFやオフィス文書からテキストを抜き出すツールをテスト公開 - ChupaText 0.5.0

全文検索エンジンgroongaを囲む夕べ #1 : ATNDの定員が50人から120人に増えましたね。たぶん、何人かはキャンセルするはずなので、今のうちに登録しておくとおそらく参加できるでしょう。興味のある方はお早めに登録してください。

さて、以前、サーバ上でPDFやオフィス文書からテキストを抜き出す方法を紹介しました。これらを使うことにより様々なフォーマットの文書からテキストを抽出し、groongaなどの全文検索エンジンを利用して高速に目的の文書を見つけることができます。例えば、ファイルサーバやデスクトップ上にある文書を検索する用途にも有用です。

しかし、文書のフォーマット毎に抽出方法を変えなければいけないため、実際にテキストを抽出する部分(インデクサーの機能の一部)を作る場合に不便です。文書のフォーマットに依らず、同じ方法でテキストを抽出できると便利ですよね。

ということで、文書のフォーマットの違いを意識することなくテキストとメタデータ(タイトル・作成者・作成時刻など)を抽出するツールChupaTextを開発し、テスト公開しました。ライセンスはLGPLv2+なので自由に利用可能です。

出力フォーマット

入力文書のフォーマットの違いを意識せずに利用するためには、テキスト抽出後の結果が入力文書のフォーマットに依存せず、統一されていなければいけません。ChupaTextでは文書を入力すると、入力文書のフォーマットに依存せず、以下のようにMIME形式で出力します。

% chupatext /tmp/sample_multi_pages.pdf
URI: file:///tmp/sample_multi_pages.pdf
Content-Type: text/plain; charset=UTF-8
Content-Length: 26
Original-Content-Length: 6145
Creation-Time: 2010-09-27T04:09:17Z
Original-Filename: sample_multi_pages.pdf
Original-Content-Type: application/pdf
Original-Content-Disposition: inline;
 filename=sample_multi_pages.pdf;
 size=6145;
 creation-date=Mon, 27 Sep 2010 04:09:17 +0000

page1
2 ページ目
page3

出力フォーマットとしてMIMEを選択したのは以下の理由からです。

  • すでに広く利用されているフォーマット
  • 1つの出力で複数のコンテンツを表現可能
  • メタデータ(ヘッダー部分)の内容を拡張可能

1番大きな理由が1番目の理由です。独自に新しいフォーマットを定義するよりも、すでに広く利用されているフォーマットを採用する方が利用しやすくなります。JSONが外部出力のフォーマットとして多く採用されているのも、同様の理由でしょう。

構造

ChupaTextはそれぞれのフォーマットからテキストやメタデータを抽出する部分をモジュール化し、新しいフォーマットに対応しやすい構造になっています*1

これからも対応フォーマットを増やす予定ですが、それに適した構造になっているというわけです。

インストール方法

ChupaTextは様々なフォーマットに対応するために、多くのライブラリを必要とします。そのため、ビルドするのは少し面倒です。以下のライブラリがインストールされている必要があります。

  • libgsf: 構造化されたフォーマットを読み書きするためのライブラリ。MS OLE2やzipなどにも対応しており、以下のライブラリの中にもlibgsfを利用しているものが多い。
  • Poppler: PDFの読み込みと描画機能を提供するライブラリ。
  • wv: MS Wordファイルを読み込む機能を提供するライブラリ。
  • Gnumericとlibgoffice: MS Excelファイルの読み書き機能を提供するライブラリ。libgofficeの上にGnumericが実装されている。
  • LibreOfficeまたはOpenOffice.org: MS PowerPointなどMS OfficeファイルやOpenDocumentフォーマットなどを読み書きするアプリケーション群。
  • Ruby 1.9.2: オブジェクト指向スクリプト言語。Rubyでテキスト抽出部分を記述することができるので、容易に新しいフォーマットに対応できる。

簡単にインストールできるようにするため、Debian GNU/LinuxとUbuntu用のパッケージを用意しました。

Fedora用のパッケージは後で用意するかもしれません。

まとめ

全文検索システムを開発する場合に有用なテキスト抽出ツールChupaTextを紹介しました。興味のある方は試してみてください。

リポジトリはGitHubにあります。

*1 もう少し詳しく書くと、ChupaTextはC言語で実装されていて、抽出部分がそれぞれ共有ライブラリになっています。そのため、特定のディレクトリにファイルを配置することによりChupaTextをビルドし直さなくても新しく対応フォーマットを追加することができます。また、抽出部分をRubyで書くこともできるため、より簡単に対応フォーマットを追加することができます。

つづき: 2010-12-29
2010-11-08

«2010-10-29 最新 クリアコードの業務内容を紹介 - NICT情報通信ベンチャー支援センターのインタビュー»
2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|
タグ:
RubyKaigi 2015 sponsor RubyKaigi 2015 speaker RubyKaigi 2015 committer RubyKaigi 2014 official-sponsor RubyKaigi 2014 speaker RubyKaigi 2014 committer RubyKaigi 2013 OfficialSponsor RubyKaigi 2013 Speaker RubyKaigi 2013 Committer SapporoRubyKaigi 2012 OfficialSponsor SapporoRubyKaigi 2012 Speaker RubyKaigi2010 Sponsor RubyKaigi2010 Speaker RubyKaigi2010 Committer badge_speaker.gif RubyKaigi2010 Sponsor RubyKaigi2010 Speaker RubyKaigi2010 Committer
SapporoRubyKaigi02Sponsor
SapporoRubyKaigi02Speaker
RubyKaigi2009Sponsor
RubyKaigi2009Speaker
RubyKaigi2008Speaker