使用Tika进行非结构化内容的读写-2

    前面说了一个tika的大概处理流程,现在可以通过一个它自带的parserTest来看一下具体的走向。以下这段代码,读取某一个pdf文件的内容:

        File file = getResourceAsFile("/test-documents/testPDF.pdf");
        String s1 = ParseUtils.getStringContent(file, tc);//方法1

    直接使用ParseUtils.getStringContent来获取它里面的内容信息。直接进入到此方法:

        String mime = config.getMimeRepository().getMimeType(documentFile).getName();
        return getStringContent(documentFile, config, mime);//方法2

     第一句话,包含几个信息,首先从config中取得所有的mimeType注册器(1),再将待解析的文件传入以取得相应的 mimeType(2),最后取得mimeType的名称(3)。

    1:config参数是传递过来的,即在parserTest中进行了声明,见原文,是通过TikaConfig.getDefaultConfig()方法读取了默认的mimeConfig信息。在这个方法中,会返回一个默认的TikaConfig对象(即new TikaConfig())。进入构造函数:

            ParseContext context = new ParseContext();
            Iterator<Parser> iterator =
                ServiceRegistry.lookupProviders(Parser.class, loader);
            while (iterator.hasNext()) {
                Parser parser = iterator.next();
                for (MediaType type : parser.getSupportedTypes(context)) {
                    parsers.put(type, parser);
                }
            }
        mimeTypes = MimeTypesFactory.create("tika-mimetypes.xml");

 

此代码主要做两件事情,第一个是读取在services中注册的parse的所有实现类,即读取在WETA-INF/services目录下的org.apache.tika.parser.Parser文件。此文件中以列表的方法列出了parser的实现类,即服务提供者。如下所示:

parser服务提供者

    在上图中,列出了所有已经注册的Parser实现类,tika即加载这些类以用作具体的解析。

 

    第二件事即是读取所有的mimeType信息,通过读取resource下的tika-mimeTypes.xml来解析其中每个mimeType以及对于每个mimeType中它应该拥有的信息格式,即根据一定的规则定义一个mimeType与匹配这个mimeType的规则。具体的实现可参考MimeTypesReader的readMimeType(Element element)类(此处略)。

    2:第二个方法根据文件取得具体的mimeType,在这里的简单实现是根据文件的名称来取得mimeType(在实际中对于某些文件后缀名不正确的文件,应该根据文件中的数据来确定mimeType,此处简单用file.getName来进行判断)。

  

    在做完以上工作之后,进入到下个方法:

        InputStream stream = new BufferedInputStream(new FileInputStream(documentFile));
       return getStringContent(stream, config, mimeType);
 

 

再进入到以下方法:

            Parser parser = config.getParser(MediaType.parse(mimeType));
            ContentHandler handler = new BodyContentHandler();//最初的handler
            parser.parse(stream, handler, new Metadata());
            return handler.toString();

 这里最终会调用到具体处理各个文件的parser,这里处理pdf的类为pdfParser,进入到它的parse方法:

        PDDocument pdfDocument = PDDocument.load(stream);
        metadata.set(Metadata.CONTENT_TYPE, "application/pdf");
        extractMetadata(pdfDocument, metadata);
        PDF2XHTML.process(pdfDocument, handler, metadata);

    这里通过apache的pdfbox类来加载文件流,并设置相应的contentType,接下来将读取相应的元数据并保存在metaData中。最后调用pdf2xhtml的静态方法来处理这个pdf文档。

    在extractMetadata中,tika通过PDDocumentInformation类将以下信息读取到metadata中:title,author,CREATOR,KEYWORDS,producer,SUBJECT,trapped,created,CREATION_DATE,LAST_MODIFIED以及其他通过getDictionary方法中未加入的其他信息。

    PDF2XHTML类通过继承PDFTextStripper类来重写相应的方法以达到读取信息的目的,它通过调用getText(document)方法,并重写相应的扩展方法将处理的信息交由handler来处理,最终实现由handler来处理最终的信息。如下个方法所示:

    protected void writeString(String text) throws IOException {
            handler.characters(text);
    }

      这里的handler即是最开始传入的bodyContentHandler,其默认不带参数的handler即this(new WriteOutContentHandler()[A]),最终将会调用到MatchingContentHandler[B]来处理,handler[B]处理完自己需要处理的信息(即过滤其中的某些信息)之后,将其他处理部分交由handler[A]来处理,如在characters中,writeOutContentHandler中的调用代码为:

                writer.write(ch, start, length);
                writeCount += length;

 

即将其写入输出流中。

最后,调用handler的toString方法,输出相应信息,即调用writer.toString()返回输出的信息。

 

至此,程序主要调用逻辑完成。当然,在具体处理中,还会涉及到其他处理,如startElement,endElement等事件的处理,这里未主要涉及,待下来再研究。

如何在Android上使用OpenCV进行摄像头标定 如何在Android上使用OpenCV进行摄像头标定,我们这里使用官方一个例程,其实并不难,只是网上的资料少了而已。相机标定是计算机视觉工作的前提,为了确定相机矩阵和畸变参数。 阅读详情

相关推荐

从编解码芯片看Tesla T4的隐藏实力:双NVDEC如何实现70路1080P解码?

本文深入剖析了英伟达Tesla T4显卡的隐藏实力,重点解读其独特的双NVDEC硬件解码器设计如何突破性能瓶颈。通过分析Turing架构、对比HEVC/H.264解码差异,并结合驱动与SDK优化,揭示了实现高达70路1080P视频流并发解码的原理与实战配置,为云游戏、直播转码等高并发场景提供高效解决方案。

weixin_29209801的博客 485

SpringBoot整合Tika实现对文件类型校验和元数据读取

Tika是Apache下开源的文档处理工具,支持多种格式文件的内容解析,主要功能包括文档类型检测、内容提取、元数据提取、语言检测。Tika是一个具有内置解析器用于处理各种文档类型的程序框架。该框架公布了标准的API供应用程序调用并完成从文档中提取文本和元数据,内置解析器会在后台通过外部程序提供的API与之交互。这使得你的应用程序能够针对不同的文档类型使用相同的API。当程序需要从文档中提取文本时,Tika会找到相应的解释器。

weixin_42324005的博客 2584

保姆级教程:在Ubuntu 20.04上从零搞定ROS Noetic和RealSense驱动,为无人机开发铺路

本文提供了一份详细的Ubuntu 20.04环境下ROS Noetic和RealSense驱动安装指南,专为无人机开发环境搭建设计。从系统配置、ROS安装到RealSense驱动集成,涵盖所有关键步骤和常见问题解决方案,帮助开发者快速搭建自主空中机器人开发平台。

weixin_30329623的博客 65

Apache tika -- 解析多种类型(word、pdf、txt 等)文件!

apache 是个伟大的组织。 在lucene 检索 如火如荼时, apache不忘继续努力,近期提供了对各种格式文件进行解析的解决方案 -- apache旗下的tika. 虽然还没有1.0版  , 但已经很好用: /** * 解析各种类型文件 * @param 文件路径 * @return 文件内容字符串 */ public static String parse...

Open source of memory 1535

避坑指南:Qgis等时圈分析中ORS插件Key申请与参数设置的常见错误

本文详细解析了QGIS等时圈分析中ORS插件从API密钥申请到参数优化的全流程避坑指南。针对密钥激活、出行模式选择、时空参数设置等七个高频故障点,提供了实用的调试方案和优化技巧,帮助用户高效完成空间可达性分析。

weixin_42546508的博客 303

主题033:燃烧反应工程

燃烧反应工程(Combustion Reaction Engineering)是研究燃料与氧化剂发生剧烈氧化反应的科学,涉及化学反应动力学、流体力学、传热传质等多个学科。燃烧是人类利用能源的主要方式,广泛应用于发电、交通运输、工业加热等领域。燃烧反应通常通过自由基链式反应进行。链引发:RH+O2⟶R⋅+HO2⋅ RH + O_2 \longrightarrow R^\cdot + HO_2^\cdot RH+O2​⟶R⋅+HO2⋅​链传递:R⋅+O2⟶RO2⋅ R^\cdot + O_2 \longrigh

kkchenjj的博客 231

Apache Tika入门

文章目录1、基本介绍2、Tika使用2.1、解析器接口(The Parser interface)2.1.1、自定义Parser类2.2、检测器接口2.3、Tika配置 1、基本介绍 Apache Tika(文本分析工具包)能够检测并提取来自上千种不同文件类型(如PPT、XLS和PDF)的元数据和文本;所有这些文件类型都可以通过一个接口进行解析,这使得Tika在搜索引擎索引、内容分析、翻译等方面非常有用。 2、Tika使用 介绍下Tika在Maven项目中的使用,首先介绍下Tika相关的两个Maven依赖:

qgnczmnmn的博客 7007

《MPDIoU:边界框回归的高效革新与YOLOv8集成实战指南》

摘要: MPDIoU(多优先级距离IoU)通过引入中心距离、形状差异和尺度变化的三步优化策略,解决了传统IoU在目标检测中的尺度敏感、收敛低效和场景局限问题。相较于GIoU、DIoU等主流方法,MPDIoU在精度、速度和鲁棒性上实现全面提升,尤其在复杂场景和小目标检测中表现突出。通过代码集成和训练优化,MPDIoU在YOLOv8中显著提升COCO数据集AP指标,并在智能安防(密集行人检测)和工业质检(微小缺陷定位)等垂直领域验证了其应用价值。未来研究方向包括动态权重调整和多模态融合,进一步拓展边界框回归的精

m0_64661770的博客 159

Tika实现数据泄露防护、检测敏感信息

引入最新依赖。

曼陀罗的博客 1384

华为OD机试2025A卷 - BOSS的收入(Java & Python& JS & C++ & C )

华为OD机试2025A卷 - BOSS的收入(Jav一个XX产品行销总公司,只有一个boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销。规定,每个月,下级分销需要将自己的总收入(自己的+下级上交的)每满100元上交15元给自己的上级。现给出一组分销的关系,和每个分销的收入,请找出boss并计算出这个boss的收入。输入:分销关系和收入:[[分销id 上级分销id 收入], [分销id 上级分销id 收入], [分销id 上级分销id 收入]]输出:[boss的ID, 总收入]

算法大师! 1172

QML从入门到实战 - 完整学习路线

想入门 QML 开发?来 “从零开始学 QML” 专栏,海量源码 + 实战案例 + 大型项目拆解,手把手教你搞定跨平台 UI 设计,小白也能轻松掌握!

BenBierBa的博客 3481

SpringBoot + Apache tika 轻松实现各种文档内容解析

文件解析

浩浩的博客 847

北京大学MuMo多模态肿瘤分类模型复现与迁移学习

本项目复现了北京大学MuMo多模态肿瘤分类模型,并针对特定医学影像数据集进行迁移学习。MuMo模型通过整合CT、MRI、PET等多模态医学影像数据,显著提升了肿瘤分类准确性。项目内容包括环境配置(Python 3.8+、PyTorch 1.9+)、数据预处理(DICOM/NIfTI格式处理、强度归一化)、多模态数据集类实现,以及训练验证测试集划分。关键特点是采用MONAI医学影像处理库,实现三维医学影像的标准化预处理流程,并支持多种模态数据的并行加载与联合训练,为后续模型复现和迁移学习奠定基础。

max500600的博客 1241

如何使用Tika提取文件内容

如何使用Tika提取文件内容 什么是Tika? Tika全名Apache Tika,是用于文件类型检测和从各种格式的文件中提取内容的一个库。 Tika使用现有的各种文件解析器和文档类型的检测技术来检测和提取数据。 使用Tika,可以轻松提取到的不同类型的文件内容,如电子表格,文本文件,图像,PDF文件甚至多媒体输入格式,在一定程度上提取结构化文本以及元数据。 Tika提供用于解析不同文件格式的一个通用API。它采用83个现有的专业解析器库,所有这些解析器库是根据一个叫做Parser接口单一

一个骚年的博客 6411

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

apache Tika介绍及使用

1、Tika应用层架构 应用程序员可以很容易地在他们的应用程序集成Tika。Tika提供了一个命令行界面和图形用户界面,使它比较人性化。 在本章中,我们将讨论构成Tika架构的四个重要模块。下图显示了Tika的四个模块的体系结构: 语言检测机制。 MIME检测机制。 Parser接口。 Tika Facade 类. 1.1 语言检测机制 每当一个文本文件被传递到Tika,它将检...

weixin_42184707的博客 3万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Apache Tika 文件内容分析工具介绍及使用示例

是一个内容分析工具包,可以检测,并提取它们的。tika在设计上十分精巧,单一的接口使它易于使用,在等诸多方面得到了广泛使用。Apache Tika曾经是的一个子项目,现已成为Apache顶级项目。

学亮编程手记 1916

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Apache Tika GUI:tika-app安装及使用体验

Apache Tika GUI:tika-app初次使用体验 一、概述 ​ 本学期项目实训我所在的团队计划完成一个基于文本分析的基于文本分析的批量代码语法检测和实验报告查重系统。其中一个重要的步骤是对实验报告(格式为doc、docx、pdf等常见格式)中的正文和代码进行提取。在经过与指导教师的交流后,我们团队决定使用Apache Tika实现这一功能。 ​ Apache Tika是基于Java的内容检测和分析的工具包,可检测并提取来自上千种不同文件类型(如PPT,XLS和PDF)中的元数据和结构化文本。

jas0nxy的博客 4276

使用Tika进行非结构化内容的读写-1

使用Tika进行非结构化内容的读写-1 博客分类: java 数据结构lucene全文检索工作XML     前缀时间在使用Jackrabbit作非结构化内容的存取,当问到当存取一个word文档时,jackrabbit能不能对word文档里面的内容作全文检索呢。回去查了一下相关的文档,是可以的,而且用的是一个叫Tika的工具。     Tika原先是一个Lucene的子

lionzl的专栏 974

Apache Tika介绍及简单使用

Apache Tika介绍及简单使用

承缘丶 5848

java中使用tika_Tika基本使用

Tika是一个内容抽取的工具集合(a toolkit for text extracting)。它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面。其次,Tika也提供了便利的扩展API,用来丰富其对第三方文件格式的支持。Tika提供了对如下文件格式的支持:PDF - 通过PdfboxMS-* - 通过POIHTML - 使用nekohtml将不规范的html整理成为xhtml...

weixin_33631836的博客 2733

tika读取文件内容

Tika是一个内容抽取的工具集合(a toolkit for text extracting)。它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面。其次,Tika也提供了便利的扩展API,用来丰富其对第三方文件格式的支持。在当前的0.2-SNAPSHOT版本中, Tika提供了对如下文件格式的支持: PDF - 通过Pdfbox MS-* - 通过POI HTML -

xiaomin1991222的专栏 1186

Apache Tika文档内容抽取工具

官方文档 1.介绍 Tika 是一个内容抽取的工具集合 (a toolkit for text extracting) 。它集成了 POI 和 Pdfbox,并且为文本抽取工作提供了一个统一的界面。其次,Tika 也提供了便利的扩展 API,用来丰富其对第三方文件格式的支持。 2.依赖 tika-core包含Tika的核心接口和类,用于在不需要完整的parser工具集的情况下,通过下面配置添加ma...

冒烟儿的专栏 4062

ES解析word内容为空的问题和直接使用Tika解析文档的方案

在上一篇文章最后,我们虽然跑通了ES文件搜索的全部流程,但是仍然出现了1个大的问题:ES7.3实测无法索引docx和doc文档,content有值但是无法解析到附件成为可读的可搜索的内容,附件内容为空(附件中根本没有content这个字段,并非内容为空)。实际上,我加测了xlsx的表格文件,也是无法解析内容的,一部分word文件被解析为zip压缩文件,还有一部分被解析为xml文件格式,说明即便都是docx类型文件,ES的管道附件的识别也不一样,这与用户的直观感受不相符!至此,这个问题陷入了泥潭!

大数据,大模型,服务器,技术、架构,方案 1995

TIKA安装与使用

TIKA使用报告 一、TIKA简介 Apache Tika是一个用java编写的内容检测和分析框架,是Apache的Lucene项目的子项目。它能够检测很多不同文件类型的文件,并提取文件的元数据和结构化文本。它提供了一个命令行界面和一个GUI界面,还提供一个java库。可用于自然语言处理过程中文本内容的抽取,以及搜索引擎进行数据抓取后的处理步骤。 1.1语言检测机制 每当一个文本文件被传递到Ti...

qq_41469288的博客 2327

Apache Tika 实现Pdf、docx、xml等文件内容提取

什么是Apache Tika?

路漫漫其修远兮,吾将上下而求索 1万+

Tika:一个强大的Java文档内容解析工具

Tika介绍 Apache Tika是基于java的内容检测和分析的工具包,可检测并提取来自上千种不同文件类型(如PPT,XLS和PDF)中的元数据和结构化文本。 它提供了命令行界面、GUI界面和一个java库。Tika可帮助搜索引擎抓取内容后的数据处理。 内置解析器会在后台通过外部程序提供的API与之交互,并进行相应的文档内容信息和文档相关信息的解析处理,具体过程如下: Tika通过MimeT...

机器熊的技术大杂烩 8441
上一篇: 使用Tika进行非结构化内容的读写-1
下一篇: freemarker从试用到放弃
Fly_m
博客等级 码龄20年 40粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值