[英]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 設置正確的標志,請參見此處:
雖然我之前讀過這篇文章,但直到后來和一些進一步的閱讀之后,這個問題才對我產生了影響。 TesseractOCR 本身不支持 PDF 的 OCR 轉換 - 因此,Tika 也不支持,因為 Tika 依賴 Tesseract 對 PDF 轉換的支持(而且, tika-python也不支持)
我的解決方案:
我結合subprocess 、 ImageMagick (CLI) 和Tika在 python 中協同工作,首先將 PDF 轉換為 TIFF,然后允許 Tika/Tesseract 對文件執行 OCR 轉換。
注意事項:
代碼:
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.