将Tika与python一起使用,runtimeError:无法启动tika服务器

时间:2018-07-25 08:28:16

标签: python parsing apache-tika

我正在尝试使用tika软件包来解析文件。 Tika已成功安装,tika-server-1.18.jar已在cmd Java -jar tika-server-1.18.jar中以Code运行

我在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 Server。

5 个答案:

答案 0 :(得分:4)

根据Apache Tika's site,tika-server.jar的所有新版本都将需要Java 8。

  

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

tika Python库的当前过时文档声称需要Java 7,但现在必须安装Java 8。这是因为如果您的临时文件中找不到tika-server.jar的当前版本,则会在运行时自动下载。

在安装Java 8之后,我的基本测试代码启动了服务器并正常运行。

答案 1 :(得分:3)

导入Tika之后,您需要初始化Java Server

import tika
tika.initVM()
from tika import parser
parsed = parser.from_file('') //file name should be here

答案 2 :(得分:1)

您尚未在行中传递参数(指定文件):

  

parsed = parser.from_file('')

提供文件以供其咀嚼,例如

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

服务器没有启动,大概没有日志警告被触发-请参见源代码the Github的第644行

然后另一个错误消息告诉您它不会播放...

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我遇到了类似的问题。尝试了这里提到的所有步骤,没有任何帮助。 我是如何解决的:

  1. 检查了 tika 和 tika-server 的日志文件。 对于 Windows,您可以在 C:/Users/your_user_name/AppData/Local/Temp/
  2. 中找到它
  3. 发现 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)
  1. 这清楚地表明另一个进程已经在同一个端口中运行。所以我只需要杀死在 port 9998 上运行的 java 进程(我认为它可能已经不存在了)
  2. 在任务管理器中终止进程后,我尝试重新运行 python 脚本,它运行正常。
  3. 要交叉检查,您还可以使用以下命令运行同一路径中的 tika-server.jar 文件 - C:/Users/your_user_name/AppData/Local/Temp/ 并检查它是否失败或正确运行:java -jar tika-server.jar

希望这对未来的人有所帮助。