【问题标题】:Changing parsers in tika-config.xml results in "Unable to load org.apache.tika.parser.DefaultParser"更改 tika-config.xml 中的解析器会导致“无法加载 org.apache.tika.parser.DefaultParser”
【发布时间】:2019-12-12 06:18:27
【问题描述】:

我正在尝试在 Nutch 中启用 Tika 的 BoilerpipeContentHandler 解析器以从网页中提取文章文本。为此,我已将 tika-config.xml 配置为排除 HTMLParser 并激活 BoilerpipeContentHandler 解析器,如下所示:

<properties>
     <service-loader initializableProblemHandler="ignore" loadErrorHandler="WARN" />
 <parsers>
    <parser class="org.apache.tika.parser.DefaultParser">
      <mime-exclude>text/html</mime-exclude>
      <parser-exclude class="org.apache.tika.parser.html.HtmlParser"/>
    </parser>

 <!-- Use a different parser for text/html -->
    <parser class="org.apache.tika.parser.html.BoilerpipeContentHandler">
      <mime>text/html</mime>
    </parser>
  </parsers>
</properties>

当我通过运行命令测试此配置时:

bin/nutch org.apache.nutch.parse.ParserChecker

输出包括:

Dec 12, 2019 5:11:40 PM org.apache.tika.config.LoadErrorHandler$2 handleLoadError
WARNING: Unable to load org.apache.tika.parser.DefaultParser
java.lang.ClassNotFoundException: org.apache.tika.parser.html.HtmlParser
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

Dec 12, 2019 5:11:40 PM org.apache.tika.config.LoadErrorHandler$2 handleLoadError
WARNING: Unable to load org.apache.tika.parser.html.BoilerpipeContentHandler
java.lang.ClassNotFoundException: org.apache.tika.parser.html.BoilerpipeContentHandler
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)

我的类路径设置正确,所以我不知道为什么找不到两个解析器类。我想知道 Nutch 或 Tika 是否使用了不同的类路径?或者我的 tika-config.xml 可能有明显问题。

非常感谢您的任何想法。

【问题讨论】:

  • “我的类路径设置正确,...”堆栈跟踪另有说明 ;) 建议:专注于让 Tika 工作 - 使用 any 数据文件或 任何配置:tika.apache.org/1.23/gettingstarted.html。然后一次改变一个变量,直到你让它完全在你的环境中工作,
  • 还:问:您是否检查了 .jar 文件以确认 org.apache.tika.parser.html.BoilerpipeContentHandler 存在?如果是这样,哪个.jar?问:你的类路径究竟是什么IS,你是如何设置它的?请用上述所有问题的答案更新您的帖子。
  • 谢谢!非常好的建议。

标签: java parsing nutch apache-tika


【解决方案1】:

我将专注于您的最终目标:将样板提取器与 Nutch 一起使用。 Nutch 已经在 Nutch 内部提供了对样板提取器的支持,无需更改 tika-config.xml

您需要在nutch-site.xml 中将tika.extractor 属性设置为boilerpipe。默认情况下,Nutch 将使用ArticleExtractor 提取器。

您可以查看https://github.com/apache/nutch/blob/master/conf/nutch-default.xml#L1645-L1677 以获得一些公开的其他配置选项。

【讨论】:

  • 啊,谢谢!我没看到。不幸的是,我已将这些设置添加到 nutch-site.xml 并确认 Tika 仍未在内容上运行 Boilerpipe。我通过将在线 Boilerpipe 演示 (boilerpipe-web.appspot.com) 的输出与使用 bin/nutch readseg -dump crawl5/segments/20191213090608/t output -nofetch -noparse -noparsetext 抓取的内容进行比较来证实了这一点。您是否有任何关于我可以从这里去哪里诊断的建议?如果有一种方法可以在 Nutch 中启用详细日志记录以查看正在发生的事情,那就太好了。
  • 您确定在plugin.includes 设置中启用了parse-tika 插件吗?否则,它将使用parse-html(即不是 Tika)。此外,由于您正在阅读该片段,因此您可能正在阅读已抓取/解析的数据(不会重新处理)。您可以使用bin/nutch parsechecker &lt;URL&gt; 仅检查解析器步骤的输出。
猜你喜欢
  • 2017-11-08
  • 1970-01-01
  • 2012-01-03
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
相关资源
最近更新 更多