我试图使用Perl从PDF文件中提取文本。我一直在使用pdftotext.exe从命令行(即使用Perl system函数)从PDF文件中提取文本,这种方法工作正常。问题是,我们在PDF文件中有符号,如α,β和其他特殊字符,这些字符不会显示在生成的txt文件中。此外,文本中随机添加了一些额外的空格。有没有更好、更可靠的方法从PDF文件中提取文本,使文本包含所有符号,如α、β等,并且文本与PDF中的文本完全匹配(即没有额外的空格)?
pdftotext.exe
system
fcg9iug31#
这些模块可以从pdf中提取文本PDF::API2CAM::PDFCAM::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文件中快速转储文本非常有用。
dfty9e192#
我不是Perl用户,但我想你会很难找到一个比pdftotext更好的免费文本提取器。pdftotext通常识别非ASCII字符很好,有没有可能它正在提取它们,但你用来查看文本文件的应用程序没有使用正确的编码?如果windows上的pdftotext与我Linux系统上的相同,那么它默认为utf-8导出。
xnifntxz3#
您可能永远不会得到一个合适的解决方案来解决您的问题。PDF格式可以将文本编码为ASCII值并应用字体,也可以将其编码为位图。如果创建PDF的工具决定将特殊字符编码为位图,那么您将不走运(当然,除非您想进入OCR解决方案)。
nfeuvbwi4#
有getpdftext.pl; CAM::PDF的一部分。
pjngdqdw5#
好吧,我尝试了2-3个Perl模块,如CAM::PDF,API 2,但问题仍然是一样的!我正在解析一个包含主页面的PDF文件。Cam或API 2可以很好地解析纯文本。但是,它们无法解析代码片段[代码片段通常采用与纯文本不同的字体和编码]。
ztyzrc3y6#
James Healy是正确的。在尝试了CAM::PDF和PDF::API 2之后,我已经成功地阅读了前者的文本,下载pdftotext对我的许多实现都很好。如果在Windows上,请到这里下载xpdf预编译的二进制文件:http://www.foolabs.com/xpdf/download.html然后,如果您需要在perl中运行此命令,请使用system,例如:system(“C:\Utilities\xpdfbin-win-3.04\bin64\pdftotext.exe $saveName”);其中$saveName是PDF文件的完整路径。这 * 希望 * 留给你一个文本文件,你可以在perl中打开和解析。
dm7nw8vv7#
我尝试了这个模块,它对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";
eaf3rand8#
我在不同的PDF文件上进行了实验,
PDF::API2 CAM::PDF CAM::PDF::PageText
而且它们都不可靠,我发现从PDF文件中解析文本的最好方法是使用旧poppler的pdftotext命令行实用程序。
pdftotext ~/your_pdf.pdf -
然后从Perl读取stdout并解析它。
- at the end means that pdftotext will output content of PDF file to stdout
我发现pdftotext可靠,能够阅读所有我必须测试的PDF中的文本。
7d7tgy0s9#
看看PDFBox。它是一个库,但我认为它也带有一些工具来做文本提取。
9条答案
按热度按时间fcg9iug31#
这些模块可以从pdf中提取文本
PDF::API2
CAM::PDF
CAM::PDF::PageText
关于CPAN
这个模块试图从PDF页面中提取连续的文本。这不是一个健壮的过程,因为PDF文本是以任意顺序以图形方式排列的。这个模块使用一些语法来尝试猜测什么文本紧挨着什么其他文本,但可能很容易被例如下标,非水平文本,字体,表单字段等的变化所欺骗。
抛开所有这些声明不谈,它对于从简单的PDF文件中快速转储文本非常有用。
dfty9e192#
我不是Perl用户,但我想你会很难找到一个比pdftotext更好的免费文本提取器。
pdftotext通常识别非ASCII字符很好,有没有可能它正在提取它们,但你用来查看文本文件的应用程序没有使用正确的编码?如果windows上的pdftotext与我Linux系统上的相同,那么它默认为utf-8导出。
xnifntxz3#
您可能永远不会得到一个合适的解决方案来解决您的问题。PDF格式可以将文本编码为ASCII值并应用字体,也可以将其编码为位图。如果创建PDF的工具决定将特殊字符编码为位图,那么您将不走运(当然,除非您想进入OCR解决方案)。
nfeuvbwi4#
有getpdftext.pl; CAM::PDF的一部分。
pjngdqdw5#
好吧,我尝试了2-3个Perl模块,如CAM::PDF,API 2,但问题仍然是一样的!我正在解析一个包含主页面的PDF文件。Cam或API 2可以很好地解析纯文本。但是,它们无法解析代码片段[代码片段通常采用与纯文本不同的字体和编码]。
ztyzrc3y6#
James Healy是正确的。在尝试了CAM::PDF和PDF::API 2之后,我已经成功地阅读了前者的文本,下载pdftotext对我的许多实现都很好。
如果在Windows上,请到这里下载xpdf预编译的二进制文件:http://www.foolabs.com/xpdf/download.html
然后,如果您需要在perl中运行此命令,请使用system,例如:system(“C:\Utilities\xpdfbin-win-3.04\bin64\pdftotext.exe $saveName”);
其中$saveName是PDF文件的完整路径。
这 * 希望 * 留给你一个文本文件,你可以在perl中打开和解析。
dm7nw8vv7#
我尝试了这个模块,它对pdf的特殊字符工作得很好。
eaf3rand8#
我在不同的PDF文件上进行了实验,
而且它们都不可靠,我发现从PDF文件中解析文本的最好方法是使用旧poppler的pdftotext命令行实用程序。
然后从Perl读取stdout并解析它。
我发现pdftotext可靠,能够阅读所有我必须测试的PDF中的文本。
7d7tgy0s9#
看看PDFBox。它是一个库,但我认为它也带有一些工具来做文本提取。