海量编程文章、技术教程与实战案例

网站首页 > 技术文章 正文

Apache Tika(apache tika工作流程)

yimeika 2025-07-28 22:53:02 技术文章 5 ℃

Apache Tika 是一个功能强大的 文档内容提取和元数据解析工具,能够从各种格式的文件中提取文本、元数据以及结构化信息。Tika 支持超过 1500+ 种文件格式,包括 PDF、Word (.docx)、Excel (.xlsx)、PPT、HTML、XML、TXT、EPUB、图像(EXIF)、音视频等。

一、Apache Tika 简介

主要功能:

  • 自动识别文件类型并提取文本内容
  • 提取文档元数据(如作者、创建时间、标题、关键词等)
  • 支持多种输出格式:纯文本、HTML、XHTML、JSON 等
  • 支持嵌套文档提取(如 ZIP 包中的 Word 文件)
  • 可以作为 Java 库使用,也可以通过 REST API 暴露服务

二、安装与使用方式

可以根据技术栈选择不同的方式使用 Apache Tika:

使用方式

描述

Java SDK

原生方式,在 Java/Scala 项目中使用

tika-python

Python 封装了 Tika 的 REST API 调用

Tika Server (REST API)

启动一个 HTTP 服务,其他程序调用

命令行工具

直接在终端运行 tika 命令提取内容

三、Python 中使用 Apache Tika(推荐:tika-python)

1. 安装依赖

pip install tika

该库本质上是启动了一个本地的 Tika Server(基于 Java),然后通过 HTTP 请求进行交互。

需要先安装好 Java 8 或以上版本。

2. 示例:提取文本内容

from tika import parser
# 解析本地文件
parsed = parser.from_file("example.docx")
# 输出结果是一个字典
print(parsed["metadata"]) # 元数据
print(parsed["content"]) # 提取的文本内容

3. 示例:远程 URL 内容提取

parsed = parser.from_url("https://example.com/sample.pdf")
print(parsed["content"])

4. 示例:指定输出为 HTML/XHTML 格式

# 设置 XML/HTML 输出
parsed = parser.from_file("example.docx", xmlContent=True)
print(parsed["content"]) # 得到 XHTML 结构

四、Java / Spring Boot 中使用 Apache Tika

Maven 依赖:

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers-standard-package</artifactId>
    <version>2.9.0</version>
</dependency>

示例代码:提取文本和元数据

package org.example;

import org.apache.tika.Tika;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class TikaExample {
    public static void main(String[] args) throws Exception {
        Tika tika = new Tika();
        File file = new File("example.docx");

        // 提取纯文本
        String content = tika.parseToString(file);
        System.out.println("内容:" + content);

        // 提取元数据
        Metadata metadata = new Metadata();
        try (InputStream input = new FileInputStream(file)) {
            Parser parser = tika.getParser();
            parser.parse(input, new BodyContentHandler(), metadata, new ParseContext());
        }

        System.out.println("元数据:");
        for (String name : metadata.names()) {
            System.out.println(name + ": " + metadata.get(name));
        }
    }
}

五、使用 Tika REST API 服务(推荐用于微服务架构)

1. 启动 Tika Server

wget https://dlcdn.apache.org/tika/tika-app-2.9.0.jar
java -jar tika-app-2.9.0.jar --server
默认端口:localhost:9998

2. 发送请求提取内容(curl 示例)

curl -T example.docx http://localhost:9998/tika

或获取元数据:

curl -X PUT -H "Accept: text/xml" --data-binary @example.docx http://localhost:9998/rmeta

也可以使用 Python requests 库调用:

import requests
url = 'http://localhost:9998/tika'
with open('example.docx', 'rb') as f:
res = requests.put(url, data=f)
print(res.text)

六、支持的常见文件格式一览

文件类型

支持情况

.doc, .docx

.xls, .xlsx

.ppt, .pptx

.pdf

(含扫描版 OCR)

.txt, .csv

.html, .xml

.jpg, .png(EXIF)

.mp3, .wav

(元数据)

.zip, .tar.gz

(递归提取)

.epub

.msg(Outlook 邮件)

七、OCR 支持(提取扫描 PDF 图片文字)

Tika 本身不直接内置 OCR 功能,但可以整合 Tesseract OCR:

步骤:

  1. 安装 Tesseract OCR
  2. 配置环境变量
  3. 使用 tika-parsers-extra 模块启用 OCR 支持

示例命令:

curl -T scanned.pdf http://localhost:9998/tika --header "X-Tika-OCR: true"

八、对比 python-docx

特性

python-docx

Apache Tika

仅支持 docx?

支持数百种格式

是否能提取图片/表格结构

(需要手动处理)

(结构保留更好)

是否支持 PDF、PPT、Excel?

是否支持 OCR?

(配合 Tesseract)

是否支持元数据提取?

是否适合构建文档解析平台?

是否轻量级?

(依赖较多)

九、总结

场景

推荐方案

仅处理 .docx 文件

使用 python-docx

多格式统一解析(PDF、Word、Excel、PPT、HTML、XML 等)

使用 Apache Tika

构建企业级文档处理系统

使用 Tika Server + REST API

提取扫描 PDF 文字

使用 Tika + Tesseract OCR

快速提取纯文本和元数据

使用 tika-python

最近发表
标签列表