Python - Tika Parser - 内容未加载

Posted

技术标签:

【中文标题】Python - Tika Parser - 内容未加载【英文标题】:Python - Tika Parser - Content Not Loading 【发布时间】:2020-09-02 20:51:00 【问题描述】:

我有一些 PDF,直到几天前我还可以使用 tika 解析它们。

我没有更改我的代码中的任何内容,但我不再能够通过运行以下代码查看相同 PDF 中的内容:

from tika import parser

raw = parser.from_file('reits.pdf', 'http://localhost:9998/tika')
print(raw['content'])

直到最近 conda install -c conda-forge tika 最新安装的 tika 都可以正常工作

问题似乎是 Java 没有激活。当我查看 metadata

时出现以下错误

'X-TIKA:EXCEPTION:runtime': 'java.lang.NullPointerException\n\tat

我不确定以下是否有帮助,但元数据也返回了:

X-Parsed-By': ['org.apache.tika.parser.DefaultParser','org.apache.tika.parser.pdf.PDFParser']

我该怎么做才能让 tika 重新开始工作?

如果这有帮助:

The full exception stack trace is included below:

org.apache.tika.exception.TikaException: Unexpected RuntimeException from org.apache.tika.parser.pdf.PDFParser@3b75f5cb
    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:293)
    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
    at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:143)
    at org.apache.tika.parser.ParserDecorator.parse(ParserDecorator.java:188)
    at org.apache.tika.parser.DigestingParser.parse(DigestingParser.java:84)
    at org.apache.tika.gui.TikaGUI.handleStream(TikaGUI.java:358)
    at org.apache.tika.gui.TikaGUI.openFile(TikaGUI.java:309)
    at org.apache.tika.gui.ParsingTransferHandler.importFiles(ParsingTransferHandler.java:94)
    at org.apache.tika.gui.ParsingTransferHandler.importData(ParsingTransferHandler.java:77)
    at javax.swing.TransferHandler.importData(TransferHandler.java:827)
    at javax.swing.TransferHandler$DropHandler.drop(TransferHandler.java:1544)
    at java.awt.dnd.DropTarget.drop(DropTarget.java:455)
    at javax.swing.TransferHandler$SwingDropTarget.drop(TransferHandler.java:1282)
    at sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(SunDropTargetContextPeer.java:538)
    at sun.lwawt.macosx.CDropTargetContextPeer.processDropMessage(CDropTargetContextPeer.java:143)
    at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetContextPeer.java:852)
    at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:776)
    at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:48)
    at java.awt.Component.dispatchEventImpl(Component.java:4744)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:4609)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4471)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:733)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.NullPointerException
    at org.apache.tika.parser.pdf.AbstractPDF2Xhtml.extractXMPXFA(AbstractPDF2XHTML.java:209)
    at org.apache.tika.parser.pdf.AbstractPDF2XHTML.endDocument(AbstractPDF2XHTML.java:678)
    at org.apache.pdfbox.text.PDFTextStripper.writeText(PDFTextStripper.java:267)
    at org.apache.tika.parser.pdf.PDF2XHTML.process(PDF2XHTML.java:96)
    at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:174)
    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:280)
... 44 more

编辑 通过关注this answer

,我能够让 Tika 工作

具体来说,我将目录更改为下载 Tika 服务器文件的位置,然后运行: java -jar tika-server-x.x.jar -h 0.0.0.0

在我的 cmd 行中运行上述内容后,服务器已启动,我的代码正常运行,我可以查看 content

如何确保 python 中的 Tika 自动打开服务器以避免这种手动解决方法?有需要设置的环境变量吗?

【问题讨论】:

您运行的是哪个版本的 Tika?如果您尝试使用独立的 Tika App 可运行 jar,那会为您提供这些文件的内容还是错误? 使用可运行的 Jar,我得到了相同的 Java 空点错误。 Tika 1.24 版 你能发布完整的错误堆栈跟踪吗? (服务器上的 python 包装器可能会隐藏它,但 Tika App jar 应该把整个事情吐出来!)。只需编辑您的问题并将堆栈跟踪放在那里 没问题!刚刚编辑了问题以包含它 @Gagravarr 在手动启动 tika 服务器后,通过使用我刚刚发布到编辑中的步骤,我能够让 Python 代码工作。你知道我怎样才能让它在 Python 中正常工作吗? IE。自动 【参考方案1】:

我遇到了同样的错误。我的解决方法是杀死在port 9998 上运行的进程,然后重新执行它。

我在我的 Google Compute Engine 实例上运行 python3 并且不得不重新启动它,然后发布,不知何故 tika 服务器变得稳定了。

以下是修复:

fuser 9998/tcp
fuser -k 9998/tcp

【讨论】:

以上是关于Python - Tika Parser - 内容未加载的主要内容,如果未能解决你的问题,请参考以下文章

如何使用java从excel表提取内容

空解析器 tika python

REPL 和 jar 中的 Tika Parser 行为不同

Tika Parser放慢了StormCrawler的速度

将 tika 与 python 一起使用,运行时错误:无法启动 tika 服务器

Python - Apache Tika 单页解析器