如何从Perl中的PDF文件中提取文本?

Paw*_*Rao 18 pdf perl text extract

我试图使用Perl从PDF文件中提取文本.我一直在使用pdftotext.exe命令行(即使用Perl system函数)从PDF文件中提取文本,这种方法工作正常.

问题是我们在PDF文件中有像α,β和其他特殊字符的符号,这些符号没有显示在生成的txt文件中.在文本中随机添加的空格也很少.

是否有更好,更可靠的方法从PDF文件中提取文本,使文本包含所有符号,如α,β等,文本将与PDF中的文本完全匹配(即没有额外的空格)?

joe*_*joe 20

这些模块可以实现pdf中的提取文本

PDF :: API2

CAM :: PDF

CAM :: PDF :: PageText

来自CPAN

   my $pdf = CAM::PDF->new($filename);
   my $pageone_tree = $pdf->getPageContentTree(1);
   print CAM::PDF::PageText->render($pageone_tree);
Run Code Online (Sandbox Code Playgroud)

此模块尝试从PDF页面提取顺序文本.这不是一个强大的过程,因为PDF文本以图形方式按任意顺序排列.这个模块使用一些启发式方法来尝试猜测其他文本旁边的文本,但可能会被下标,非水平文本,字体更改,表单字段等愚弄.

除了这些免责声明之外,它对于从简单的PDF文件中快速转储文本很有用.

  • 我是CAM :: PDF作者,我同意免责声明.我突发奇想地构建了文本提取,结果比我预想的要困难得多. (7认同)

Jam*_*aly 5

我不是 Perl 用户,但我想你会很难找到比 pdftotext 更好的免费文本提取器。

pdftotext 通常可以很好地识别非 ASCII 字符,是否可以正常提取它们,但是您用来查看文本文件的应用程序未使用正确的编码?如果 windows 上的 pdftoetxt 和我的 linux 系统上的一样,那么它默认导出为 utf-8。


And*_*ett 5

您可能永远无法获得适当的解决方案。PDF格式可以将文本编码为应用了字体的ASCII值,也可以将其编码为位图。如果创建PDF的工具决定将特殊字符编码为位图,那么您将很不走运(当然,除非您想使用OCR解决方案)。

  • 比这更糟糕的是-文本不必按阅读顺序排列在页面上。不必直线布置。为Acrobat 1.0编写一个简单的find word命令花了我5个月的时间,这就是创建所有支持库并在相邻办公室设计格式的人。提取文本是该问题的一部分。 (8认同)