无法在 TIKA 的 ParseContex 中添加 HtmlParser

Cannot to add HtmlParser in ParseContex in TIKA

提问人:Eve 提问时间:6/6/2023 更新时间:6/6/2023 访问量:31

问:

我使用 Tika FACADE:tika-core v1.25,tika-parsers v1.25。

我需要重新定义 Html 解析器以完全控制 html 文档处理过程。

为此,我创建了一个 CustomHtmlParser 类,并希望传递它进行处理,但要不要更改其他文件的处理。

现在 CustomHtmlParser 扩展了 HtmlParser,

查找文件: CustomHtmlParser: 软件包 com.mycompany.stackexp.CustomParsers;

Html解析器: 软件包 org.apache.tika.parser.html;

用于处理任何类型的代码:

    InputStream is = new BufferedInputStream(curFile.getInputStream())
    AutoDetectParser parser = AutoDetectParser();
    ParseContext pc = new ParseContext();
    Metadata metadata = Metadata();
    Tika tika = new Tika();

    String mimeType = tika.detect(is); //определяем mimeType нашего документа
    metadata.set(Metadata.CONTENT_TYPE, mimeType);//устанавливаем mimeType

    CustomBodyContentHandler ch = new CustomBodyContentHandler(-1);
    ch.setRoot(fileName); //Установить root

    //init my htmlParser
    init_customHtmlParser();

    parser.parse(is, ch, metadata, pc); 

在单词 : 不起作用的情况下,假设在 ParseContext 中保存 CustomHtmlParser 时,在处理 html 文档时,将过渡到我的 parse 方法(在 CustomHtmlParser 类中)。但实际上,有一个过渡到标准解析方法(在 HTMLParser 类中)。或者通过其他方法将处理重定向到我的类

告诉我如何制作解析器并替换已创建的解析器。或者通过其他方法将处理重定向到我的类。我的目标是:要么用 CustomHtmlParser 替换 HTMLParser 要么添加一个新类。

我尝试在 pc (ParseContext) 中添加我的解析器:

//v1
public void init_customHtmlParser(){
    //My new parser which extends HtmlParser
    CustomHtmlParser customHtmlParser = new CustomHtmlParser();
    pc.set(HtmlParser.class, customHtmlParser);
}

//v2
public void init_customHtmlParser(){
    //My CustomHtmlParser save as HtmlParser
    HtmlParser customHtmlParser = new CustomHtmlParser();
    pc.set(HtmlParser.class, customHtmlParser);
}

但是在调试器中,我看到我的类没有活动。 每次选择 HTMLParser 类时,我都会看到它,而不是我的 CustomHtmlParser 类。

为什么我决定这对我有帮助? 我使用customEmbeddedDocExtractor,并通过以下代码添加它:

if (pc.get(EmbeddedDocumentExtractor.class) == null) {
    Parser p = pc.get(Parser.class);
    if (p == null) {
        pc.set(Parser.class, parser);
    }

    this.customEmbeddedDocExtractor = new CustomParsingEmbeddedDocumentExtractor(pc);
    customEmbeddedDocExtractor.saveCustomBodyContentHandler(ch);
    customEmbeddedDocExtractor.setRoot(fileName);
    pc.set(EmbeddedDocumentExtractor.class, customEmbeddedDocExtractor);
}
  • 软件包 org.apache.tika.extractor 中的 EmbeddedDocumentExtractor;
  • customEmbeddedDocExtractor 在 com.mycompany.stackexp 包中;

Public CustomParsingEmbeddedDocumentExtractor 扩展了 ParsingEmbeddedDocumentExtractor。

使用自定义解析嵌入式文档提取器时,所有内容都会添加并按预期工作。

java html 解析 apache-tika

评论


答: 暂无答案