Perlを使用してPDFファイルからテキストを抽出しようとしています。 PDFファイルからテキストを抽出するためにコマンドラインからpdftotext.exe
を使用しています(つまり、Perl system
関数を使用しています)。この方法は正常に機能します。
問題は、生成されたtxtファイルに表示されていないPDFファイルにα、βなどの特殊文字が含まれていることです。また、テキストにランダムに追加されているスペースもほとんどありません。
テキストにα、βなどのすべての記号が含まれ、テキストがPDFのテキストと完全に一致するように、PDFファイルからテキストを抽出するためのより優れた信頼性の高い方法はありますか。 _(つまり余分なスペースなし)?
PDFからテキストを抽出することができるこれらのモジュール
CPANから
my $pdf = CAM::PDF->new($filename);
my $pageone_tree = $pdf->getPageContentTree(1);
print CAM::PDF::PageText->render($pageone_tree);
このモジュールは、PDFページからシーケンシャルテキストを抽出しようとします。PDFテキストは任意の順序でグラフィカルに配置されるため、これは堅牢なプロセスではありません。このモジュールいくつかのヒューリスティックを使用して、どのテキストが他のテキストの隣にあるかを推測しようとしますが、たとえば、添え字、非水平テキスト、フォントの変更、フォームフィールドなどに簡単にだまされる可能性があります。
これらの免責事項はさておき、単純なPDFファイルからテキストをすばやくダンプするのに役立ちます。
問題に対する適切な解決策が得られない場合があります。 PDF形式では、テキストをフォントを適用したASCII値としてエンコードすることも、ビットマップとしてエンコードすることもできます。 PDFを作成したツールが特殊文字をビットマップとしてエンコードすることを決定した場合、運が悪くなります(もちろん、OCRソリューションを利用したい場合を除きます)。
私はPerlユーザーではありませんが、pdftotextよりも優れたフリーテキスト抽出機能を見つけるのに苦労すると思います。
pdftotextは通常、非ASCII文字を正常に認識しますが、それらを正常に抽出している可能性はありますが、テキストファイルの表示に使用しているアプリが正しいエンコーディングを使用していませんか? Windowsのpdftoetxtが私のLinuxシステムのpdftoetxtと同じである場合、デフォルトでutf-8としてエクスポートされます。
getpdftext.pl ;があります。 CAM :: PDF の一部。
CAM :: PDF、API2のような2〜3個のPerlモジュールを試しましたが、問題は同じです。メインページを含むPDFファイルを解析しています。 CamまたはAPI2は、プレーンテキストを非常によく解析します。ただし、コードスニペットを解析することはできません[コードスニペットは通常、プレーンテキストとは異なるフォントとエンコーディングです]。
ジェームズヒーリーは正しいです。 CAM :: PDFとPDF :: API2を試した後、前者はテキストの読み取りにある程度成功しましたが、pdftotextのダウンロードは多くの実装でうまく機能しました。
Windowsの場合は、ここに移動してxpdfプリコンパイル済みバイナリをダウンロードしてください: http://www.foolabs.com/xpdf/download.html
次に、これをPerl使用システム内で実行する必要がある場合、例:system( "C:\ Utilities\xpdfbin-win-3.04\bin64\pdftotext.exe $ saveName");
ここで、$ saveNameは、PDFファイルへのフルパスです。
これうまくいけばは、Perlで開いて解析できるテキストファイルを残します。
PDF2TXT.pyこれは私が使用しているものですが、Pythonですが、問題なく動作します。
私はpdfの特殊文字に対してうまく機能しているこのモジュールを試しました。
!/usr/bin/Perl
use strict;
use warnings;
use PDF::OCR::Thorough;
my $filename = "pdf.pdf";
my $pdf = PDF::OCR::Thorough->new($filename);
my $text = $pdf->get_text();
print "$text";