简单的 tika 学习项目,主要实现了上传文档文件返回文档内容
tika-server
├── build_test
│ ├── fonts 字体文件夹
│ ├── jdk jdk 打包尝试(为了能跑 RapidOcr 的动态库,可惜都失败了,留个档)
│ │ ├── Dockerfile_jdk_centos8
│ │ └── Dockerfile_jdk_ubuntu_1804
│ ├── pythonNlp PaddleNLP 接口
│ │ ├── code
│ │ │ └── NLPTextService.py
│ │ ├── docker
│ │ │ └── docker-compose.yml
│ │ └── Dockerfile
│ └── RapidOcr 通过 Docker 打包不同环境的 RapidOcr 动态库(留个档)
│ ├── Dockerfile_ncnn
│ └── Dockerfile_onnx
├── doc 一些收集的教程
├── docker-compose.yml 启动 Docker
├── Dockerfile 打包成 Docker 镜像
├── tika-server-core 核心库
├── tika-server-launcher 启动入口
├── tika-server-ocr-boot-starter ocr 统一封装
└── tika-server-paddle-ocr 让 Tika 支持 PaddleOcr
镜像地址:nn200433/tika-server
# 下载镜像
docker pull nn200433/tika-server:latest
###############################################
# 或者在根目录下直接使用 docker-compose 启动
docker-compose up -d
# 新版使用
docker compose up -d
###############################################
# 本地测试
curl --location --request POST 'http://127.0.0.1:19390/upload' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Accept: */*' \
--header 'Host: 192.168.0.126:19390' \
--header 'Connection: keep-alive' \
--header 'Content-Type: multipart/form-data; boundary=--------------------------705711992768855419607600' \
--header 'Cookie: JSESSIONID=B5908F33E99F483510C63A7AC5566F40' \
--form 'file=@"/home/test/file1.docx"' \
--form 'file=@"/home/test/file1.pdf"'
由于依赖的 so
库,部分 Linux 无法正常运行。
Tips:目前用 onnx 在 Docker 容器中尝试成功了
这里的辅助插件为 图像处理 、 音视频处理 等第三方插件。(即需要命令行调用,Java 不好实现的)
server:
port: 9090
spring:
servlet:
multipart:
# 是否启用http上传处理
enabled: true
# 设置单个文件最大长度
max-file-size: 1024MB
# 最大请求文件的大小
max-request-size: 1024MB
paddle:
ocr:
num-thread: ${TIKA_PADDLE_NUM_THREAD:1}
gpu-index: ${TIKA_PADDLE_GPU_INDEX:-1}
padding: ${TIKA_PADDLE_PADDING:50}
max-side-len: ${TIKA_PADDLE_MAX_SIDE_LEN:0}
box-score-thresh: ${TIKA_PADDLE_BOX_SCORE_THRESH:0.5}
box-thresh: ${TIKA_PADDLE_BOX_THRESH:0.3}
un-clip-ratio: ${TIKA_PADDLE_UN_CLIP_RATIO:1.6}
do-angle: ${TIKA_PADDLE_DO_ANGLE:false}
most-angle: ${TIKA_PADDLE_MOST_ANGLE:false}
is-delete-detect-file: ${TIKA_PADDLE_DELETE_DETECT_FILE:true}
model-ver: ${TIKA_PADDLE_MODEL_VER:ONNX_PPOCR_V4}
tika:
nlp-api: http://192.168.0.126:8801
thread:
# 线程名称
name: tika
# 核心线程数
core-pool-size: 5
# 最大线程数
max-pool-size: 10
# 队列容量
queue-capacity: 20
# 线程活跃时间(秒)
keep-alive-seconds: 60
paddle:
is-debug: ${TIKA_PADDLE_IS_DEBUG:false}
debug-path: ${TIKA_PADDLE_DEBUG_PATH:}
is-skip-ocr: ${TIKA_PADDLE_IS_SKIP_OCR:false}
min-file-size-to-ocr: ${TIKA_PADDLE_MIN_FILE_SIZE_TO_OCR:0}
max-file-size-to-ocr: ${TIKA_PADDLE_MAX_FILE_SIZE_TO_OCR:1073741824}
# tools-path:
# # ocr识别插件安装路径
# tess-ocr: E:\Program Files\Tesseract-OCR
# # 图像处理插件安装路径
# image-magick: E:\Program Files\ImageMagick-7.1.1-Q16-HDRI
- jdk 1.8.0_341
- Apache Maven 3.9.4
- IntelliJ IDEA 2023.2.1
- Windows 11
项目根目录执行:
mvn clean install -Dmaven.test.skip=true
感谢以下主要项目(还有一些未列出的,也十分感谢!)及参考文章,排名不分先后。
- Hutool 是一个Java工具包,让Java语言也可以“甜甜的”。
- Apache Tika 是一个开源的 Java 库和工具,用于从各种文档类型中提取文本内容和元数据。
- docx4j 是一个开源(Apache v2)库,用于创建、编辑和保存 OpenXML "包",包括 docx、pptx 和 xslx。
- Tesseract 是一个开源的光学字符识别(OCR)引擎,由 Google 开发和维护。它的主要功能是将图像或扫描的文档中的文字内容识别为可编辑的文本。Tesseract 可以处理多种语言和文本格式,并且在 OCR 领域有着广泛的应用。
- ImageMagick 是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过 89 种基本格式的图片文件。
- RapidOCR 基于 PaddleOCR、OnnxRuntime 和 OpenVINO 的跨平台 OCR 库。
- RapidOcr-Java Java代码实现调用RapidOCR
- tika-source-code-interpretation Tika源码解读(上古版本)
- 思通数科 StoneDT/多模态NLP自然语言处理引擎 免费的自然语言处理、情感分析、实体识别、.....
- PaddleNLP PaddleNLP是一款简单易用且功能强大的自然语言处理和大语言模型(LLM)开发库。