Google デスクトップで検索できない

先日「幾つかの PDF が Google で検索できない」ということを、『超「超」整理法』の書評の流れで述べた。これは以前から解っていたのだが、これを機会に原因を調べてみる。(→対処法にジャンプ)

先ず Google デスクトップのオンライン・ヘルプで「アイテムを検索できない : PDF ファイル」を見てみると、

  • PDF ファイル
    • クリア/透明テキストを使用
    • スキャンされた画像が含まれている
    • 暗号化されているか制限付きの PDF
      Adobe Reader でテキスト・データをコピーできないファイルがこれにあたるよう
    • 最後の方にある文字を検索している
      全文検索かと思っていたら、最初の約 10000 語までという制限があるよう
  • Google デスクトップの「設定」
    • 「テキスト、その他のファイル」が選択されていない
    • 「検索しないファイル、フォルダ」に設定してある、隠しフォルダにある

等が書かれている。また PDF のテキスト・データの抽出は、PDFtoText が行っていることがわかる。そこで上手くインデックスが作成されない PDF に大して、

pdftotext hoge.pdf

としてみると、

Error: Unknown character collection 'Adobe-Japan1'

Error: Couldn't open cidToUnicode file 'C:/Resource/Adobe-Japan1.cidToUnicode' Error: Unknown character collection 'Adobe-Japan1'

等とエラーが出る。(どちらになるかは状況による) そこで Google って見た結果、次の手順を踏むと、全てではないが、今までインデックスが上手くいかなかった PDF ファイルの幾つかは、ある程度上手く検索できるようになった

  1. Xpdf: Download から をダウンロード
    必要に応じて日本語以外の言語も対応するファイルをダウンロードすれば良いだろう
  2. PDFtoText のインストール
    1. xpdf-3.02pl2-win32.zip を展開
    2. 展開して出来るフォルダ「xpdf-3.02pl2-win32」の中にある pdftotext.exe をパスの通ったフォルダに移動
      専用のフォルダ (ここでは C:\xpdf) を作成し、
      1. 「コントロールパネル」の「システム」を開く
      2. 「詳細」の [環境変数] を開く
      3. 「~のユーザー環境変数」の「変数」で「PATH」を選び [編集]
      4. 自分のインストールした環境に合わせて、最後に「;C:\xpdf」追加
        この時「;」を忘れないこと
      としても良いし、通常パスが最初から通してある「C:\Windows」に移動しても良い
  3. PDFtoText の日本語設定
    1. xpdf-japanese.tar.gz を展開
      「xpdf-japanese」というフォルダが出来上がる
    2. 適当なフォルダを作成 (ここでは「C:\Resource」とする)
    3. 作成したフォルダに「xpdf-japanese」の中身を全てコピー
    4. add-to-xpdfrc を xpdfrc という名前で、pdftotext.exe と同じフォルダにコピー
      ただし既にファイルがある場合は、add-to-xpdfrc の内容を追記する
    5. コピーした xpdfrc を適当なテキスト・エディタで開き、「/usr/local/share/xpdf/japanese」と書かれた部分があるので、「C:/Resource」等と環境に合わせて書き換える
    6. またデフォルトの出力コードを UTF-8 にしておくと良い
      Shift_JIS (ファイル中の表記は Shift-JIS」) も可能だが、実際に変換したファイルが英数字まで全角になる
      私の環境での xpdfrc↓
      cidToUnicode Adobe-Japan1 C:/Resource/Adobe-Japan1.cidToUnicode unicodeMap ISO-2022-JP C:/Resource/ISO-2022-JP.unicodeMap unicodeMap EUC-JP C:/Resource/EUC-JP.unicodeMap unicodeMap Shift-JIS C:/Resource/Shift-JIS.unicodeMap cMapDir Adobe-Japan1 C:/Resource/CMap toUnicodeDir C:/Resource/CMap textEncoding UTF-8
  4. インストールした pdftotext.exe が使われるようにする
    このままだと Google デスクトップをインストールしたフォルダ (通常は、C:\Program Files\Google\Google Desktop Search) にある pdftotext.exe が使われることがあるので、これ (通常は C:\Program Files\Google\Google Desktop Search\pdftotext.exe) を削除
  5. これで
    pdftotext hoge.pdf
    や、標準の文字コードを指定していなければ、
    pdftotext -enc UTF-8 hoge.pdf
    でエラーなく同じフォルダに hoge.txt と拡張子だけ変化したファイルができ、日本語も表示されれば成功

なお環境によっては、Google デスクトップをインストールしたフォルダ以外にも pdftotext.exe があるので、ヴァージョンを確認して最新版だけにする事。

ただ先に書いたとおり、未だ全ての PDF で上手くいくわけではない。暗号化など Google デスクトップの仕様上、検索できない、つまり

pdftotext hoge.pdf Error: Copying of text from this document is not allowed.

と PDFtoText でエラーになるファイルは致し方ないが、

  • ファイルが作成されるものの、かな文字が抜けてしまう
  • ファイルは問題なく作成されるが、インデックスが上手く作成されない
  • 最初の約 10000 語まで
    の制限よりはるかに少ない文字数でも、ファイルの後ろの方にある文字列が検索できない

となる PDF ファイルが幾つか残っている。情報求む。

2008/12/18 追記

PDF に関しては、GoogleDesktopSearch★Xdoc を使ったほうが手っ取り早いようです。ただ内部で、xdoc2txt を内部から呼び出して使っているので、こちらを常に最新版にしておく必要が有ります。

またこの Plug-In を導入したことによるうれしい誤算は、xdoc2txt が対応しているために、今まで無理だった OpenOffice.org のファイルに対しても、検索できるようになったことです。OpenOffice.org 用の Plug-In は、Google に登録されている Larry's OpenOffice and StarOffice Indexer があるのですが、これは日本語対応していない。

それ以外にも一太郎などのファイル形式も対応しているので、一度 xdoc2txt のサイトで、対応ファイルを確認してみると良いかも。

しかし、解決していない問題があります。

  1. まだ上手くいかない PDF がある

    PDFtoText や xdoc2txt で問題なくテキスト化できる PDF でも、検索に失敗するファイルがある。(例:Subversionマニュアル) 同じフォルダにある別の PDF は問題ないのですが???

  2. OpenOffice.org のファイルが上手く検索できないファイルがある

    ある英単語での検索はヒットし、検索結果でプレヴューも出来るのに、そのプレヴューで表示されている別の日本語単語で検索してみると、表示されているにも拘らず、検索にヒットしない????

  3. 単なるテキストなのにインデックスが作成されないファイルがある

    正確には Larry's Any Text File Indexer を導入して、TeX のソースでも検索できるようにしているのですが、全くインデックスが作成されません。別のフォルダに移動するとインデックスが作成されるので、設定が間違っているわけではありません。同じフォルダの *.txt は検索されるので、フォルダの問題でもありません???

    別のフォルダにコピーしたときの違いは、Subversion を使っている関係で、サブフォルダにほぼ同じ内容のファイルがある/無いの違いだけです。しかし Subversion で管理している別フォルダの HTML は問題ないので、Subversion による管理が直接の原因でもないようです。

その後の経過として

2009/01/04 追記

xpdfrc がどういうわけが、初期状態に書き換わってしまうことがあったので、それに伴って、上記の該当部分の変更

2009/01/15 追記

2008/12/18 追記

  1. まだ上手くいかない PDF がある...
  2. OpenOffice.org のファイルが上手く検索できないファイルがある...

については、どうやらプレヴューで表示されるかどうかとは関係なく、Google デスクトップによる制限のようです。以前書いたように「アイテムを検索できない : PDF ファイル」には、

  • ボリュームの大きい PDF ファイルの最後の方にある文字を検索している。 ほとんどのドキュメントでは最初の約 10,000 語まで検索されます。

とあるのですが、「アイテムを検索できない: ファイル」には、

  • ボリュームの大きいファイルの最後の方にある文字を検索している。 ファイル自体のインデックスが作成されていれば、ファイル名による検索は実行できます。ただし、ファイル内の文字を検索する場合、最初の約 75,000 文字までしか検索できません。検索インデックスとハード ドライブの容量を節約するため、この数はこれより多少減る場合もあります。

PDF ファイルの「約 10,000 語」というのは、おそらく英文を訳したときに、そのまま残ったのではないかと思います。例えば問題にしていたファイルの場合、テキスト・ファイル変換したもので確認すると、半角相当で

  1. PDF
    4200 文字程度 (目次の半分程度(^^;)
  2. OpenOffice.org
    2500 文字程度

は問題なく検索できました。ただこれが仕様だとしても、全文検索を目的に導入したのに、これでは実力不足ですね。

また残る疑問として、

  1. 単なるテキストなのにインデックスが作成されないファイルがある

が残っています。(その後の経過)