簡體   English   中英

Python-Tika 返回 PDF 的“無”內容,但適用於 TIFF

[英]Python-Tika returning "None" content for PDF's, but works with TIFF's

我有一個 PDF,我正試圖讓 Tika 解析它。 PDF 不是 OCR。 Tesseract 安裝在我的機器上。

我使用 ImageMagik 將 file.tiff 轉換為 file.pdf,因此我正在解析的 tiff 文件是從 PDF 直接轉換而來的。

Tika 解析 TIFF 沒有問題,但返回 PDF 的“無”內容。是什么原因造成的? 我正在使用 Tika 1.14.1、tesseract 3.03、leptonica-1.70

這是代碼...

from tika import parser

# This works
print(parser.from_file('/from/file.tiff', 'http://localhost:9998/tika'))

# This returns "None" for content
print(parser.from_file('/from/file.pdf', 'http://localhost:9998/tika'))

因此,在Chris Mattman (他很棒,非常有幫助!)的一些反饋之后,我解決了這個問題。

他的回應:

由於 Tika Python 充當 REST 服務器的瘦客戶端,您只需要確保 REST 服務器使用類路徑配置啟動,該配置為 TesseractOCR 設置正確的標志,請參見此處:

http://wiki.apache.org/tika/TikaOCR

雖然我之前讀過這篇文章,但直到后來和一些進一步的閱讀之后,這個問題才對我產生了影響。 TesseractOCR 本身不支持 PDF 的 OCR 轉換 - 因此,Tika 也不支持,因為 Tika 依賴 Tesseract 對 PDF 轉換的支持(而且, tika-python也不支持)

我的解決方案:

我結合subprocessImageMagick (CLI) 和Tika在 python 中協同工作,首先將 PDF 轉換為 TIFF,然后允許 Tika/Tesseract 對文件執行 OCR 轉換。

注意事項:

  • 對於大型 PDF,此過程非常緩慢
  • 需要:tika-python、tesseract、imagemagick

代碼:

from tika import parser
import subprocess
import os

def ConvertPDFToOCR(file):

    meta = parser.from_file(fil, 'http://localhost:9998/tika')

    # Check if parsed content is NoneType and handle accordingly.
    if "content" in meta and meta['content'] is None:

            # Run ImageMagick via subprocess (command line)
            params = ['convert', '-density', '300', u, '-depth', '8', '-strip', '-background', 'white', '-alpha', 'off', 'temp.tiff']
            subprocess.check_call(params)

            # Run Tika again on new temp.tiff file
            meta = parser.from_file('temp.tiff', 'http://localhost:9998/tika')

            # Delete the temporary file
            os.remove('temp.tiff')

    return meta['content']

您可以啟用 X-Tika-PDFextractInlineImages': 'true' 並直接從 pdf 中的圖像中提取文本。 無需轉換。 花了一段時間才弄清楚,但效果很好。

from tika import parser
headers = {
'X-Tika-PDFextractInlineImages': 'true',
}
parsed = parser.from_file("Citi.pdf",serverEndpoint='http://localhost:9998/rmeta/text',headers=headers)
print(parsed['content'])

下載 tika 服務器的最新 jar 並使用 Aswathi Mohankumar Nambiar 解決方案。 為我工作! 注意:在運行腳本之前,您必須手動啟動最新的 tika 服務器,因為 python 腳本要啟動 Tika 1.14.1 服務器

'X-Tika-PDFextractInlineImages':'true'對我來說可以從pdf中提取圖像,但是如果存在的內容不是Image而是文本,並且使用指定的標題將其忽略,該怎么辦。 任何建議都是有幫助的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM