如何使用Tika软件包(https://github.com/chrismattmann/tika-python)在python(2.7)中解析PDF文件?
我试图解析一些包含工程图纸的PDF文件,以获取文件中的文本数据。我尝试将TIKA用作python的jar,并将其用于jnius包(在这里使用本教程: )但是代码抛出了一个错误 然而,使用TIKA包,我能够传递文件并解析它们,但是Python只能提取元数据,当要求解析内容时,Python返回输出“none”。它能够完美地解析.txt文件,但无法提取PDF的内容。这是密码如何使用Tika软件包(https://github.com/chrismattmann/tika-python)在python(2.7)中解析PDF文件?,python,parsing,pdf,apache-tika,Python,Parsing,Pdf,Apache Tika,我试图解析一些包含工程图纸的PDF文件,以获取文件中的文本数据。我尝试将TIKA用作python的jar,并将其用于jnius包(在这里使用本教程: )但是代码抛出了一个错误 然而,使用TIKA包,我能够传递文件并解析它们,但是Python只能提取元数据,当要求解析内容时,Python返回输出“none”。它能够完美地解析.txt文件,但无法提取PDF的内容。这是密码 import tika tika.initVM() from tika import parser parsed = parse
import tika
tika.initVM()
from tika import parser
parsed = parser.from_file('/path/to/file')
print parsed["metadata"]
print parsed["content"]
我是否需要额外的软件包/代码行才能提取数据?能否请您共享您正在查看的文件?最简单的方法是将它附加到我的存储库中的Github问题上,等等 也就是说,如果您试图使用OCR和Tika,则需要运行Tika OCR指南()并安装Tesseract。安装Tesseract后,您需要再次检查tika服务器的实例是否正在运行(例如,ps aux | grep tika)。如果您这样做了,就杀死它(tika python在后台运行tika REST服务器,作为其与tika的主界面;在安装Tesseract OCR后,有一个新的运行版本有助于消除任何奇怪的可能性) 安装Tesseract OCR后,在不运行tika服务器的情况下,启动python2.7解释器(或脚本),然后执行以下操作:
from tika import parser
parsed = parser.from_file('/path/to/file')
print parsed["content"] # should be the text returned from OCR
嗯!
--Chris我从未尝试过python tikq,但pyjnius对我来说很好。这是我的密码:
def parse_file(filename):
"""
Import TIKA classes and parse input filename
"""
import os
os.environ['CLASSPATH'] = "/path/to/tika-app.jar"
from jnius import autoclass
from jnius import JavaException
# Import the Java classes
Tika = autoclass('org.apache.tika.Tika')
Metadata = autoclass('org.apache.tika.metadata.Metadata')
FileInputStream = autoclass('java.io.FileInputStream')
tika = Tika()
tika.setMaxStringLength(10*1024*1024);
meta = Metadata()
# Raise an exception and continue if parsing fails
try:
text = tika.parseToString(FileInputStream(filename), meta)
return text
except (JavaException,UnicodeDecodeError), e:
print "ERROR: %s" % (e)
return None
您需要下载Tika服务器Jar并首先运行它。检查此链接:
java-jar tika-server-x.x.jar--port xxxx运行
tika.initVM()
Addtika.TikaClientOnly=True
而不是tika.initVM()
parsed=parser.from_file('/path/to/file')
更改为
parsed=parser。从_文件('/path/to/file','/path/to/server')
您将在步骤2中获得服务器路径。当tika服务器启动时,只需在此处插入即可祝你好运 Chris Mattmann给出的解决方案是正确的。不过,我想补充几点意见。使用以下代码段将读取的PDF文件写入文本文件。使用适当的编码来支持UTF-8(例如,中文/日文字符)
使用以下pip命令安装tika:
pip install tika
以下代码适用于提取数据:
import io
import os
from tika import parser
def extract_text(file):
parsed = parser.from_file(file)
parsed_text = parsed['content']
parsed_text = parsed_text.lower()
return parsed_text
file_name_with_extension = input("Enter File Name:")
text = extract_text(file_name_with_extension)
print(text)
它将只打印文件的内容。
支持的文件格式已列出。您的PDF中确实有文本吗?计算机是哑的。对于你、我和其他人来说,看起来像文本的东西可能只是计算机上的几行随机线。PDF中存在的文本已被扫描进来,而不是作为实际字符存在。本质上,这只是一个典型工程图纸上包含的标签(非常类似于此:)我需要能够提取示例图像中包含的标签数据、描述表和注释,然后您不能使用通用文本提取器;您必须在此处使用OCR(光学字符识别)。注意:我尝试传递仅包含文本的pdf,甚至转换为.pdf的.doc文件,但代码仍然返回“无”作为注释输出。所以我想知道包本身是否有问题,需要其他依赖项才能正常工作?如果安装了正确的工具,ApacheTika支持OCR'ing文本。你知道吗?这个解决方案有效。我想再给你一点提示。请使用命令pip install tika=1.19使用tika版本1.19。在使用新版本(1.22)时,我遇到了以下问题。callServer encodedData.close()中第546行的文件“C:\Python36\lib\site packages\tika\tika.py”关闭文件读取数据属性错误:“bytes”对象没有属性“close”
import io
import os
from tika import parser
def extract_text(file):
parsed = parser.from_file(file)
parsed_text = parsed['content']
parsed_text = parsed_text.lower()
return parsed_text
file_name_with_extension = input("Enter File Name:")
text = extract_text(file_name_with_extension)
print(text)