【问题标题】:Use tika with python, runtimeerror: unable to start tika server将 tika 与 python 一起使用,运行时错误:无法启动 tika 服务器
【发布时间】:2019-01-01 23:57:42
【问题描述】:

我正在尝试使用 tika 包来解析文件。 Tika安装成功,tika-server-1.18.jar在cmd中运行CodeJava -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 [主线程] [WARNI] 无法查看启动日志消息;重试... 2018-07-25 10:20:23,332 [MainThread] [WARNI] 无法查看启动日志 信息;重试... 2018-07-25 10:20:28,340 [主线程] [错误] 3 次尝试后未收到 Tika 启动日志消息。 2018-07-25 10:20:28,340 [MainThread] [ERROR] 无法接收启动 来自 startServer 的确认。

RuntimeError: 无法启动 Tika Server。

【问题讨论】:

  • 这个问题有什么更新吗?我收到相同的错误消息。
  • 放弃使用TIKA Server,改用TikaApp解决问题。 “tika_client = TikaApp(file_jar = ''(我存储 tika 应用程序的地方)。它有效。不幸的是,对于解析器我还没有找到解决方案。
  • 使用 TikaApp,tika_client.extract_all_content(path_to_file) 返回一个空字符串
  • 这个答案解决了我的问题。 stackoverflow.com/a/36628583/5403632

标签: python parsing apache-tika


【解决方案1】:

根据Apache Tika's site,所有新版本的 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。
  • 我遇到了同样的问题,我也发布了一个问题,请您查看this question。好像 tika 服务器没有启动,它返回 Not Found 404。
【解决方案2】:

导入 Tika 后需要初始化 Java 服务器

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

【讨论】:

  • 我也试过,导入后初始化。它返回 Not Founds 404。请检查this link
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    你没有在你的行中传递一个参数(指定一个文件):

    parsed = parser.from_file('')

    给它一个文件来咀嚼,例如,

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

    服务器没有启动并且可能触发了这个无日志警告 - 请参阅源代码中的第 644 行 the Github

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

    【讨论】:

      【解决方案5】:

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

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

      查看下面的日志 sn-p -

      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

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

      【讨论】:

        【解决方案6】:

        如果您像我一样使用 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>)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-17
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          相关资源
          最近更新 更多