写点什么

[文本提取] 基于 Apache Tika 的文本内容提取

作者:alexgaoyh
  • 2023-09-21
    河南
  • 本文字数:1434 字

    阅读完需:约 5 分钟

背景

  近期再次遇到了关于知识库的需求,对照前期使用[langchain-ChatGLM 本地知识库]进行的处理,发现提取文本内容的功能在这个领域中必不可少,故对其进行了研究,通过对比,对 Apache Tika 进行知识储备。

编码

  使用 Spring Maven 与 Apache Tika 进行整合,完成对文本内容提取的功能。


  首先在 pom.xml 引入 Tika,其次在 resources 文件夹下创建 tika-config.xml 文件,并配置 PapTikaConfig.java,最后注入 Tika 并进行单元测试。


    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.apache.tika</groupId>                <artifactId>tika-bom</artifactId>                <version>2.9.0</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>
<dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-core</artifactId> </dependency> <dependency> <groupId>org.apache.tika</groupId> <artifactId>tika-parsers-standard-package</artifactId> </dependency>
复制代码


<properties>    <encodingDetectors>        <encodingDetector class="org.apache.tika.parser.html.HtmlEncodingDetector">            <params>                <param name="markLimit" type="int">64000</param>            </params>        </encodingDetector>        <encodingDetector class="org.apache.tika.parser.txt.UniversalEncodingDetector">            <params>                <param name="markLimit" type="int">64001</param>            </params>        </encodingDetector>        <encodingDetector class="org.apache.tika.parser.txt.Icu4jEncodingDetector">            <params>                <param name="markLimit" type="int">64002</param>            </params>        </encodingDetector>    </encodingDetectors></properties>
复制代码


@Configurationpublic class PapTikaConfig {    @Autowired    private ResourceLoader resourceLoader;
@Bean public Tika tika() throws TikaException, IOException, SAXException {
Resource resource = resourceLoader.getResource("classpath:tika-config.xml"); InputStream inputStream = resource.getInputStream();
TikaConfig config = new TikaConfig(inputStream); Detector detector = config.getDetector(); Parser autoDetectParser = new AutoDetectParser(config);
return new Tika(detector, autoDetectParser); }}
复制代码


    @Autowired    private Tika tika;
@Test void tika() throws Exception { String[] filePathArray = new String[]{"pap.pptx", "pap.txt", "pap.xlsx", "pap.docx", "pap.pdf"}; for(String filPath : filePathArray) { String s = tika.parseToString(new File(filPath)); } }
复制代码

总结

  在 NLP 领域,存在对大量的文本文件进行内容提取的场景,此组件能满足绝大部分场景。


  同样可以进行元数据的读取,本文不对此进行特别介绍,可自行查找资料。

参考

  1. https://gitee.com/alexgaoyh/pap4j-tika

  2. https://tika.apache.org/


发布于: 刚刚阅读数: 5
用户头像

alexgaoyh

关注

DevOps 2013-12-08 加入

https://gitee.com/alexgaoyh

评论

发布
暂无评论
[文本提取]基于Apache Tika的文本内容提取_Java_alexgaoyh_InfoQ写作社区