在 tika-config.xml 中更改解析器会导致 "Unable to load org.apache.tika.parser.DefaultParser"
Changing parsers in tika-config.xml results in "Unable to load org.apache.tika.parser.DefaultParser"
我正在尝试在 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 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 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.
如果您有任何想法,我将不胜感激。
我将专注于您的最终目标:将样板提取器与 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 中启用 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 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 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.
如果您有任何想法,我将不胜感激。
我将专注于您的最终目标:将样板提取器与 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 以了解公开的一些其他配置选项。