网站首页 > 技术文章 正文
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 | |
(含扫描版 OCR) | |
.txt, .csv | |
.html, .xml | |
.jpg, .png(EXIF) | |
.mp3, .wav | (元数据) |
.zip, .tar.gz | (递归提取) |
.epub | |
.msg(Outlook 邮件) |
七、OCR 支持(提取扫描 PDF 图片文字)
Tika 本身不直接内置 OCR 功能,但可以整合 Tesseract OCR:
步骤:
- 安装 Tesseract OCR
- 配置环境变量
- 使用 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 |
猜你喜欢
- 2025-07-28 大模型如何赋能Web渗透测试?(大模型如何赋能web渗透测试工具)
- 2025-07-28 动态切换数据库连接方案(动态切换数据库连接方案是什么)
- 2025-07-28 java -jar命令启动SpringBoot应用原理分析
- 2025-07-28 深度探索 Spring Boot3 配置管理:从基础到高级实战
- 2025-07-28 flink sql方式读取kafka实时流数据
- 2025-07-28 小程序源码交付标准详解:必备内容与注意事项
- 2025-07-28 记录程序第一天挖漏洞的过程(漏洞挖掘过程)
- 2025-07-28 springboot从入门到实战开源的全链路追踪系统介绍及实践!
- 2025-07-28 从原理到落地:MCP在Spring AI中的工程实践
- 2025-07-28 刚搭完HBase集群,Phoenix一启动,HBase就全崩了,是什么原因?
- 最近发表
- 标签列表
-
- axure 注册码 (25)
- mutex_lock (30)
- oracleclient (27)
- nfs (25)
- springbatch (28)
- oracle数据库备份 (25)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- c 数组 (33)
- pascal语言教程 (23)
- ppt 教程 (35)
- java7 (24)
- 自适应网站制作 (32)
- server服务自动停止 (25)
- 超链接去掉下划线 (34)
- 什么是堆栈 (22)
- map entry (25)
- ubuntu装qq (25)
- outputstreamwriter (26)
- fill_parent (22)
- mssqlserver jar (30)