如何在Tika Core中整合使用Tika Parsers扩展解析能力?
问题描述
在项目中使用tika-core v1.25,依赖配置如下:
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> <version>1.25</version> <type>jar</type> </dependency>
解析文件时使用AutoDetectParser:
InputStream is = new BufferedInputStream(new FileInputStream("D:\\Files\\test.txt")); BodyContentHandler ch = new BodyContentHandler(-1); Metadata metadata = new Metadata(); ParseContext pc = new ParseContext(); AutoDetectParser parser = new AutoDetectParser(); parser.parse(is, ch, metadata, pc);
AutoDetectParser属于tika-core的org.apache.tika.parser包,但该类无法调用tika-parsers项目中的各类解析器(如AppleSingleFileParser、ClassParser、XMLParser等),不想手动判断文件类型选择对应解析器,希望通过统一封装类/抽象层管理这些解析器,询问如何配置tika-core以使用tika-parsers中的解析器。
解决方案
1. 添加tika-parsers依赖
在依赖管理中加入tika-parsers的依赖(1.x版本的artifactId为tika-parsers,与你使用的1.25版本匹配):
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parsers</artifactId> <version>1.25</version> <type>jar</type> </dependency>
2. 无需修改现有解析代码
Tika的AutoDetectParser会通过服务发现机制自动加载tika-parsers中所有注册的解析器,你原来的解析代码不需要做任何修改,运行时AutoDetectParser会自动根据文件类型匹配对应的解析器完成解析。
3. 验证解析器加载情况(可选)
如果想确认是否成功加载了tika-parsers中的解析器,可以添加一段代码查看当前可用的解析器列表:
AutoDetectParser parser = new AutoDetectParser(); ParserDecorator decorator = (ParserDecorator) parser.getWrappedParser(); CompositeParser compositeParser = (CompositeParser) decorator.getWrappedParser(); for (Parser p : compositeParser.getParsers().values()) { System.out.println("Loaded parser: " + p.getClass().getName()); }
运行这段代码后,会看到tika-parsers中的各类解析器被列出来,说明加载成功。
内容的提问来源于stack exchange,提问作者Kipoti
相关产品推荐
相关产品推荐

