我试图使用Perl从PDF文件中提取文本 . 我一直在从命令行使用 pdftotext.exe (即使用Perl system 函数)从PDF文件中提取文本,这种方法工作正常 .
pdftotext.exe
system
问题是我们在PDF文件中有像α,β和其他特殊字符的符号,这些符号没有显示在生成的txt文件中 . 在文本中随机添加的空格也很少 .
是否有更好,更可靠的方法从PDF文件中提取文本,使文本包含所有符号,如α,β等,文本将与PDF中的文本完全匹配(即没有额外的空格)?
这些模块可以实现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);
此模块尝试从PDF页面提取顺序文本 . 这不是一个强大的过程,因为PDF文本以图形方式按任意顺序排列 . 这个模块使用一些启发式方法来尝试猜测其他文本旁边的文本,但可能会被下标,非水平文本,字体更改,表单字段等愚弄 .
除了这些免责声明之外,它对于从简单的PDF文件中快速转储文本很有用 .
您可能永远无法为您的问题找到合适的解决方案 . PDF格式可以将文本编码为应用了字体的ASCII值,也可以将其编码为位图 . 如果创建PDF的工具决定将特殊字符编码为位图,那么您将失去运气(当然,除非您想进入OCR解决方案) .
我不是Perl用户,但我想你很难找到比pdftotext更好的自由文本提取器 .
pdftotext通常可以很好地识别非ASCII字符,是否可以将它们解压缩,但是您用来查看文本文件的应用程序是不是使用了正确的编码?如果windows上的pdftoetxt与我的linux系统上的pdftoetxt相同,那么它默认导出为utf-8 .
有getpdftext.pl; CAM::PDF的一部分 .
好吧,我尝试了2-3个perl模块,比如CAM :: PDF,API2,但问题仍然存在!我正在解析包含主页的pdf文件 . Cam或API2非常好地解析纯文本 . 但是,它们无法解析代码段[代码段通常采用与纯文本不同的字体和编码] .
PDF2TXT.py这是我使用的,虽然它是Python,它可以完美地工作 .
http://www.unixuser.org/~euske/python/pdfminer/index.html
詹姆斯希利是对的 . 在尝试了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中解析 .
我试过这个模块,它适用于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";
看看PDFBox . 它是一个库,但我认为它还附带了一些文本提取工具 .
9 回答
这些模块可以实现pdf中的提取文本
PDF::API2
CAM::PDF
CAM::PDF::PageText
来自CPAN
此模块尝试从PDF页面提取顺序文本 . 这不是一个强大的过程,因为PDF文本以图形方式按任意顺序排列 . 这个模块使用一些启发式方法来尝试猜测其他文本旁边的文本,但可能会被下标,非水平文本,字体更改,表单字段等愚弄 .
除了这些免责声明之外,它对于从简单的PDF文件中快速转储文本很有用 .
您可能永远无法为您的问题找到合适的解决方案 . PDF格式可以将文本编码为应用了字体的ASCII值,也可以将其编码为位图 . 如果创建PDF的工具决定将特殊字符编码为位图,那么您将失去运气(当然,除非您想进入OCR解决方案) .
我不是Perl用户,但我想你很难找到比pdftotext更好的自由文本提取器 .
pdftotext通常可以很好地识别非ASCII字符,是否可以将它们解压缩,但是您用来查看文本文件的应用程序是不是使用了正确的编码?如果windows上的pdftoetxt与我的linux系统上的pdftoetxt相同,那么它默认导出为utf-8 .
有getpdftext.pl; CAM::PDF的一部分 .
好吧,我尝试了2-3个perl模块,比如CAM :: PDF,API2,但问题仍然存在!我正在解析包含主页的pdf文件 . Cam或API2非常好地解析纯文本 . 但是,它们无法解析代码段[代码段通常采用与纯文本不同的字体和编码] .
PDF2TXT.py这是我使用的,虽然它是Python,它可以完美地工作 .
http://www.unixuser.org/~euske/python/pdfminer/index.html
詹姆斯希利是对的 . 在尝试了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中解析 .
我试过这个模块,它适用于pdf的特殊字符 .
看看PDFBox . 它是一个库,但我认为它还附带了一些文本提取工具 .