如何使用Tika软件包(https://github.com/chrismattmann/tika-python)在python(2.7)中解析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

我试图解析一些包含工程图纸的PDF文件,以获取文件中的文本数据。我尝试将TIKA用作python的jar,并将其用于jnius包(在这里使用本教程: )但是代码抛出了一个错误

然而,使用TIKA包,我能够传递文件并解析它们,但是Python只能提取元数据,当要求解析内容时,Python返回输出“none”。它能够完美地解析.txt文件,但无法提取PDF的内容。这是密码

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并首先运行它。检查此链接:

  • 下载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)