使用Python与Tika,运行时错误:无法启动Tika服务器。

29
我正在尝试使用tika包来解析文件。Tika已成功安装,通过在命令行中运行tika-server-1.18.jar的代码Java -jar tika-server-1.18.jar
我的Jupyter代码如下:
import tika 
from tika import parser
parsed = parser.from_file('')

然而,我收到以下错误:
2018-07-25 10:20:13,325 [MainThread] [WARNI] 无法看到启动日志消息;正在重试... 2018-07-25 10:20:18,329 [MainThread] [WARNI] 无法看到启动日志消息;正在重试... 2018-07-25 10:20:23,332 [MainThread] [WARNI] 无法看到启动日志消息;正在重试... 2018-07-25 10:20:28,340 [MainThread] [ERROR] 经过3次尝试后仍未收到Tika启动日志消息。 2018-07-25 10:20:28,340 [MainThread] [ERROR] 无法从startServer接收启动确认。
RuntimeError: 无法启动Tika服务器。

1
这个问题有任何更新吗?我收到了相同的错误信息。 - sAguinaga
1
我放弃使用TIKA服务器,而是使用TikaApp来解决问题。"tika_client = TikaApp(file_jar = ''(我存储了tika应用程序的位置)。它有效果。不幸的是,对于解析器我还没有找到解决方案。 - Sha Li
使用TikaApp,tika_client.extract_all_content(path_to_file)返回一个空字符串。 - ballade4op52
4
这个答案解决了我的问题。 - Modem Rakesh goud
7个回答

16
根据Apache Tika网站的说法,所有新版本的tika-server.jar将需要Java 8。
  

2018年4月24日:Apache Tika发布    Apache Tika 1.18已发布!此版本包括错误修复(例如,从PPT中提取分组形状)、安全性修复和升级依赖项。请注意:下一个版本将需要Java 8。请参阅CHANGES.txt文件以获取发布版本中的完整更改列表,并查看下载页面以了解有关如何获取Apache Tika 1.18的更多信息。

当前tika Python库的过时文档声称需要Java 7,但现在必须安装Java 8。这是因为如果在临时文件中未找到tika-server.jar的当前版本,则会在运行时自动下载该文件。
安装Java 8后,我的基本测试代码启动了服务器并且没有出现错误。

在使用Apachetika时,无需安装Java。 - Pooja Khatri
我遇到了同样的问题,我也发布了一个问题,请问您能否查看一下这个问题。似乎tika服务器没有启动,返回了404未找到错误。 - Venkatesh Dharavath

10
在您导入Tika之后,您需要初始化Java服务器。
import tika
tika.initVM()
from tika import parser
parsed = parser.from_file('') //file name should be here

我尝试了相同的方法,导入后进行了初始化。它返回了404未找到错误。请查看此链接:https://stackoverflow.com/q/66445198/8340027。 - Venkatesh Dharavath

3

下载Java。如果您已经安装了Java版本,请尝试将其更新到最新版本。适合我的版本是1.18。


1

您在代码行中没有传递参数(指定文件):

parsed = parser.from_file('')

请提供一个文件,例如:

parsed = parser.from_file('myfile.txt')

服务器未启动,据推测这会触发无日志警告 - 在Github的源代码的第644行查看。
然后另一个错误消息会告诉你它不会运行...

1

我遇到了同样的错误,并通过以下步骤解决:

  1. 检查我的tika服务器日志文件(通常位于C:/Users/your_user_name/AppData/Local/Temp/)

    2023-04-02 08:06:47,277 [Thread-1 (pr] [ERROR] Unable to run java; is it installed? 2023-04-02 08:06:47,278 [Thread-1 (pr] [ERROR] Failed to receive startup confirmation from startServer.

  2. 怀疑Java未安装。因此,请使用以下命令检查是否已安装Java:

    java -version

  3. 如果未安装,您可以在此处下载:https://www.java.com/en/download/

  4. 如果仍然出现错误,请尝试手动启动Tika服务器:

    java -jar tika-server.jar

  • 记得在jar文件所在的位置运行它。现在应该可以正常工作了。

1

我遇到了类似的问题。尝试了这里提到的所有步骤,但都没有帮助。

  1. 检查了tika和tika-server的日志文件。 对于Windows系统,您可以在C:/Users/your_user_name/AppData/Local/Temp/中找到它。
  2. 发现tika-server日志中已经提到了端口被占用的错误。

请查看下面的日志片段 -

INFO: Setting the server's publish address to be http://localhost:9998/
WARNING: FAILED SelectChannelConnector@localhost:9998: java.net.BindException: Address already in use: bind
java.net.BindException: Address already in use: bind
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Unknown Source)
        at sun.nio.ch.Net.bind(Unknown Source)
        at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
        at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
        at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:187)
        at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:316)
        at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:265)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at org.eclipse.jetty.server.Server.doStart(Server.java:293)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
        at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine.addServant(JettyHTTPServerEngine.java:417)
        at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.activate(JettyHTTPDestination.java:179)
        at org.apache.cxf.transport.AbstractObservable.setMessageObserver(AbstractObservable.java:49)
        at org.apache.cxf.binding.AbstractBindingFactory.addListener(AbstractBindingFactory.java:95)
        at org.apache.cxf.jaxrs.JAXRSBindingFactory.addListener(JAXRSBindingFactory.java:88)
        at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)
        at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:206)
        at org.apache.tika.server.TikaServerCli.main(TikaServerCli.java:213)

这明显表明另一个进程已经在相同的端口上运行。所以我只需要杀掉在9998端口上运行的Java进程(我认为可能已经失效了)。
一旦我在任务管理器中结束了该进程,我尝试重新运行Python脚本,它正常工作了。
为了交叉检查,您还可以使用以下命令运行位于相同路径下的tika-server.jar文件- C:/Users/your_user_name/AppData/Local/Temp/,并检查是否失败或正常运行:java -jar tika-server.jar 希望这对将来的某个人有所帮助。

0
如果你和我一样使用的是Ubuntu 20.01(和18.04),解决方案是安装Oracle JDK 17。请按照以下步骤操作:
sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java17-installer

在终端上输入java -version。您应该会看到以下的输出内容:
java version "17.0.1" 2021-10-19 LTS`
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)`
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)

tika 应该能够在 python 中从您的 PDF 中提取文本。

parser.from_file(<your pdf file>)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接