提问人:Eve 提问时间:6/6/2023 更新时间:6/6/2023 访问量:31
无法在 TIKA 的 ParseContex 中添加 HtmlParser
Cannot to add HtmlParser in ParseContex in TIKA
问:
我使用 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。
使用自定义解析嵌入式文档提取器时,所有内容都会添加并按预期工作。
答: 暂无答案
评论