带有python的Tika服务器为大文件返回None,但可以使用小pdf文件

问题描述

我有一些小的和大的 PDF,我试图使用 python Tika 以字符串格式解析它们。我在本地有 Tika 服务器,转换文件大小约为 200mb,但现在我有 1.3gb pdf。所以当我尝试转换它时,parser.from_file(large.pdf) 返回 None。根据我的猜测,大文件似乎存在内存问题。

所以我的基本问题是为什么大 pdf 返回 None 以及如何克服它?

部分代码片段:

import os
import sys
import glob
from tika import tika,parser
from helpers.helper import file_paths

# Set the required path(s)
paths = file_paths()
pdf_path = paths.get('PDF_FILE_PATH')
text_path = paths.get('TEXT_FILE_PATH')
abs_path = os.path.dirname(os.path.join(os.getcwd(),__file__)) + "/server"

# Update the required variables
tika.log_path = os.getenv('TIKA_LOG_PATH',abs_path)
tika.TikaJarPath = os.getenv('TIKA_PATH',abs_path)
tika.TikaFilesPath = abs_path + "/logs"

def get_pdf_string(filename):
    """
    Write string to file
    """
    raw = parser.from_file(pdf_path + filename)
    new_file = filename.split('.')[0] + '.txt'
    with open(text_path + new_file,'w') as write_encode:
        write_encode.write(raw['content'])

我也在观察此类消息,仅用于大型 pdf 转换。什么意思?

终端日志:运行python文件

[MainThread] [WARNI] Tika 服务器返回状态:500

服务器日志:

WARN /rMeta/text java.lang.OutOfMemoryError: Java 堆空间

解决方法

您可以尝试使用例如 pdfbox 将 PDF 拆分为多个页面,然后逐页发送到 tika