从嵌入字体的PDF文件中提取文本

时间:2012-09-07 13:33:47

标签: linux pdf imagemagick ocr tesseract

我有一个包含一些表格数据的PDF文件。

http://dl.dropbox.com/u/44235928/sample_rotate-0.pdf

我必须从中提取表格数据。我试过以下但没有成功:

  1. 选择文本并将其粘贴到记事本/ excel-sheet。 (我得到了垃圾字符)
  2. 用作保存为Acrobat Reader的文本。它也提供垃圾字符而不是实际文本。
  3. 尝试使用ApachePDFBox命令行实用程序从PDF中提取文本。它还提供垃圾字符而不是真实文本。
  4. 最后我正在尝试OCR解决方案。我正在使用ImageMagick将pdf文件转换为.tif图像,并通过tesseract OCR处理这些图像。
  5. OCR解决方案虽然不是很准确(约80%的单词匹配)。

    我尝试更改从PDF创建的图像的密度和几何图形,以便从tesseract OCR获得更好的结果。

    convert -rotate 90 -geometry 10000 -depth 8 -density 800 sample.pdf img_800_10000.tif;
    tesseract img_800_10000.tif img_800_10000.tif nobatch letters;
    

    我不确定哪种图像(密度,几何形状,单色,锐化边界等)最适合OCR。

    请建议从PDF文件生成图像的最佳参数(密度,几何形状,深度等),以便提高测量精度。

    我也对其他(非ocr)解决方案持开放态度。

3 个答案:

答案 0 :(得分:4)

在这种情况下,我建议使用ImageMagick作为PDF - > TIFF转换。相反,使用Ghostscript。有两个原因:

  1. 直接使用Ghostscript可以让您更好地控制转换的各个参数。

  2. ImageMagick本身无法进行特定的转换 - 无论如何它会将Ghostscript称为'delegate',但不会允许您提供与您自己相同的细粒度控制Ghostscript命令会给你。

  3. 示例PDF表格中的大多数文字都非常小(我猜,只有4或5 pt高)。这使得运行成功的OCR变得相当困难,除非您大幅提高分辨率。

    Ghostscript默认使用-r72进行图像格式输出(例如TIFF)。 Tesseract在r = 300或r = 400时效果最佳 - 但仅适用于10-12 pt或更高的字体大小。因此,为了补偿小文本大小,你应该在将PDF渲染到图像时使用至少1200 DPI的分辨率制作Ghostscript。

    此外,您必须旋转图像,以便文本以正常阅读方向显示(而不是底部 - >顶部)。

    这是我先尝试的命令:

    gs                              \
      -o sample.tif                 \
      -sDEVICE=tiffg4               \
      -r1200                        \
      -dAutoRotatePages=/PageByPage \
       sample_rotate-0.pdf
    

    您可能需要使用-r1200参数的变体(更高或更低)来获得最佳效果。

答案 1 :(得分:1)

由于评论询问“如何在convert中使用Ghostscript时定义图像的几何图形?”,这是一个答案:

  1. 为Ghostscript同时创建的光栅图像定义几何(即图像尺寸)和分辨率是没有意义的。

  2. 将给定维度(如PDF)的基于 vector 的页面转换为栅格图像(例如TIFF G4格式)后,期望的分辨率(如在另一个答案中所做的那样),你已经间接地和隐含地也设置了维度:

    • 示例文件 sample_rotate-0.pdf 的原始PDF维度为1008x612分。
    • 分辨率为72 DPI(默认Ghostscript使用,如果没有直接给出,或者如果直接给出Ghostscript命令中的-r72),图像尺寸将为1008x612像素。
    • 分辨率为720 DPI(Ghostscript命令中为-r720),图像尺寸为10080x6120像素。
    • 分辨率为1440 DPI(我的其他答案的Ghostscript命令中为-r1440),图像尺寸为20160x12240像素。
    • 分辨率为1200 DPI(Ghostscript命令中为-r1200),图像尺寸为16800x10200像素。
    • 分辨率为1000 DPI(Ghostscript命令中为-r1000)时,图像尺寸为14000x8500像素。
    • 分辨率为120 DPI(Ghostscript命令中为-r120),图像尺寸为1680x1020像素。
    • 分辨率为100 DPI(Ghostscript命令中为-r100)时,图像尺寸为1400x850像素。
  3. 如果您绝对坚持在Ghostscript命令行上指定输出图像的尺寸/几何(而不是分辨率),可以通过在命令行中添加-gNNNNxMMMM -dPDFFitPage来实现。

答案 2 :(得分:0)

在那里,您可以找到文件的已解码内容:https://docs.google.com/open?id=0B1YEM-11PerqSHpnb1RQcnJ4cFk

绝对确定OCR是阅读pdf文件的最佳方式,但您可以尝试REGEX更改本机内容。这将是艰难而漫长的道路。