最近の PDF ファイルはテキスト情報が含まれています。そのため PDF 内をテキスト検索することができるようになっています:

このテキスト部分だけを機械的に抜き出す、というのが今回紹介するテーマです。具体的には Node.js を使って PDF からテキスト情報を抜き出すプログラムを実装してみました。

Node.js の場合、PDF を扱うことのできるライブラリがいくつか存在していますが、今回はこれを使いました。日本語を含むテキストであっても正しく取り出すことができそうでした:
pdf-parse

2019101201


また今回はこの公開 PDF からテキストを取り出してみます:
Kubernetesの基礎

2019101202


後述のコードでは対象 PDF ファイル名を指定して実行できるようにしています。そのため、上記リンク先から同 PDF (h2-takara-3.pdf)をダウンロードしておいてください。これ以外の PDF を使って試すこともできますが、その場合もあらかじめダウンロードしておいてください。

そして具体的なコード(pdf-sample.js)は以下のようになります:
//. pdf-sample.js
var fs = require( 'fs' ),
    pdf = require( 'pdf-parse' );

if( process.argv.length > 1 ){
  var filename = process.argv[2];
  var buf = fs.readFileSync( filename );
  pdf( buf ).then( function( data ){
    var text = data.text;
    console.log( text );
  }).catch( function( err ){
    console.log( err );
  });
}else{
  console.log( 'Usage: $ node pdf-sample ' );
}

pdf-parse を使っている部分を赤字にしました。エラー処理含めてこれだけです。

では実際に実行してみます。まず実行前の準備として pdf-parse ライブラリをインストールしておきます:
$ npm install pdf-parse


そして、対象 PDF ファイル名をパラメータ指定して node コマンドで実行します。例えばプログラムコード(pdf-sample.js)と同じフォルダに PDF ファイル(h2-takara-3.pdf)を保存した場合であれば、以下のように指定して実行します:
$ node pdf-sample ./h2-takara-3.pdf

正しく実行されると、以下のようにテキスト抽出結果がコンソール画面に表示されます:
$ node pdf-sample ./h2-takara-3.pdf


Kubernetesの基礎
InternetWeek 2018
2018年11月28日
日本アイ・ビー・エム株式会社
クラウド事業本部 高良真穂

発音/略称/Logo
綴りKubernetes
発音
koo-ber-net-ees
略称K8s
Kubernetes
12345678
クーベネティスのロゴ

K8sは一言で何ができる?
K8sは、コンテナのアプリ運用のためのOSS
1.コンテナの組み合わせ利用
2.スケールアウト
3.ロールアウト&ロールバック
4.永続ストレージ利用
5.自己修復(可用性)
6.クラスタの分割利用
7.監視&ログ分析

      :
 (中略) : © IBM Corporation 27 Kubernetesを 広めて勢力図を 変えるぞ 参道して シェアを取りに 行くぞ! 複合環境でも 便利♪ 豊富な資金力で 独走を維持するぞ ロックインから 解放だ! チャンス♪ K8sでクラウド・レースの展開に 変化があるかもしれない まとめ •Kubernetesはコンテナの運用基盤 •オンプレ&クラウドで共通のオペレーションで運用できる •必要なインフラ機能が提供され、高効率な運用を実現 •主要クラウドベンダー、ソフトウェア企業が賛同 Kubernetes ハンズオンへ

日本語含めて正しくテキストが抽出できました。