【问题标题】:How to differentiate between a scanned PDF and a regular text PDF如何区分扫描的 PDF 和常规文本 PDF
【发布时间】:2021-07-05 15:38:06
【问题描述】:

我正在处理多个 PDF 文件的 OCR 任务。其中一些是扫描的(不可搜索的),而另一些则是原生的(可搜索的)PDF。

为了收集文本数据,我执行了两个单独的代码。

扫描的pdf文件

image1 = image_read_pdf (file.list1[1], density=150)
image1 = image_ocr(image1,
                      language = "spa")

文本pdf的那个

text1 = pdf_text(file.list1[2])

由于 OCR 功能在每个存档上都需要一段时间,我希望能够在将它们转换为文本之前区分这两种 PDF。有什么方法可以识别它们吗?

我已经尝试过pdf_fonts(file.list1[1]),但我无法获得确定的结果来区分扫描的 pdf 和原生文本 pdf。

【问题讨论】:

    标签: r pdf tesseract


    【解决方案1】:

    只是一个简短的回答,因为 PDF 标准是它自己的世界!

    我在 Windows 上的批处理文件中使用了以下内容:

    @echo 关闭

    for /f "delims=" %%a in ('findstr /i /m /c:"/Type /Font" *.pdf') 做 ( 回声 %%a 转到:继续 ) :继续

    上面可以在处理之前在所有 PDF 上运行并将它们分成不同的文件夹,即用 if 语句替换 echo %%a...

    我正在处理成千上万的 PDF,并且还在寻找图像 pdf 和文本 pdf 之间的区别。我发现的“/Type /Font”作为文本类型 pdf 的一部分嵌入,但没有嵌入到图像 pdf 中。注意:我没有在同一个 pdf 中同时包含混合文本/图像,但如果是这种情况,我会说“/Type /Font”将成为 PDF 的一部分。

    人们必须详细阅读 PDF 标准,才能确定是否有绝对的方法来确定图像和文本类型 PDF 之间的区别。

    【讨论】:

    • 感谢您的反馈,但我无法在 R 中使用这些命令
    【解决方案2】:

    我一直在考虑使用生成的 tibble 大小。不知道这些字体错误以后会不会给我带来麻烦?

    原生 PDF

    > nrow(pdf_fonts(file.list1[2])) * ncol(pdf_fonts(file.list1[2]))
    PDF error: No display font for 'ArialUnicode'
    PDF error: Couldn't find a font for 'Helvetica', subst is 'Helvetica'
    PDF error: Couldn't find a font for 'Helvetica-Bold', subst is 'Helvetica'
    PDF error: No display font for 'ArialUnicode'
    PDF error: Couldn't find a font for 'Helvetica', subst is 'Helvetica'
    PDF error: Couldn't find a font for 'Helvetica-Bold', subst is 'Helvetica'
    [1] 8
    

    扫描的 PDF

    > nrow(pdf_fonts(file.list1[1])) * ncol(pdf_fonts(file.list1[1]))
    [1] 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      相关资源
      最近更新 更多