java中使用tika_Tika基本使用

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Tika是一个内容抽取的工具集合(a toolkit for text extracting)。它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面。其次,Tika也提供了便利的扩展API,用来丰富其对第三方文件格式的支持。

Tika提供了对如下文件格式的支持:

PDF – 通过Pdfbox

MS-* – 通过POI

HTML – 使用nekohtml将不规范的html整理成为xhtml

OpenOffice 格式 – Tika提供

Archive – zip, tar, gzip, bzip等

RTF – Tika提供

Java class – Class解析由ASM完成

Image – 只支持图像的元数据抽取

XML

Tika的API十分便捷,核心是Parser interface,其中定义了一个parse方法:

public void parse(InputStream stream, ContentHandler handler,Metadata metadata, ParseContext context)

用stream参数传递需要解析的文件流, 文本内容会被传入handler,而元数据会更新至metadata。可以使用Tika的ParserUtils工具来根据文件的mime-type来得到一个适当的Parser来进行解析工作。或者Tika还提供了一个AutoDetectParser根据不同的二进制文件的特殊格式 (比如说Magic Code),来寻找适合的Parser。

1、Parser接口

void parse(InputStream stream, ContentHandler handler,Metadata metadata, ParseContext context)throws IOException, SAXException, TikaException;

InputStream:文档输入原始 字节流。它不会在此方法中关闭InputStream。

ParserContext: 解析处理的上下文。此参数用于用户需要定制解析过程时使用。如何控制?它内部一个Map,用Map保存接口(class)与其实例的所组 成的键值对。这些接口(class)只能是在Parser中用于解析文档的所需接口才会起作用。

ContentHandler:XHTML SAX事件处理器。将输入文档的结构化信息以XHTML格式写入到此Handler。

Metadata:文档元数据。既是输入参数,也是输出参数。作输入参数时,能够有助于解析器更好地理解文档的格式。

2、选择解析器Parser

(1)确定只用一种文档格式(以Html格式为例)

Parser parser = new HtmlParser();

parser.parse(stream, handler, metadata, context);

(2)确定使用多种文档格式中的某一格式

Map parsersByType = new HashMap();

parsersByType.put(MediaType.parse(“text/html”), new HtmlParser());

parsersByType.put(MediaType.parse(“application/xml”), new XMLParser());

CompositeParser parser = new CompositeParser();    //Parser的集合

parser.setParsers(parsersByType);

parser.setFallback(new TXTParser());

Metadata metadata = new Metadata();

metadata.set(Metadata.CONTENT_TYPE, “text/html”);

parser.parse(stream, handler, metadata, context);

(3)不确定文档格式

Parser parser = new AutoDetectParser();

parser.parse(stream, handler, metadata, context);

0818b9ca8b590ca3270a3433284dd417.png

3、tika的两种使用方式

1)方式一

public String fileToTxt(File f) {

Parser parser = new AutoDetectParser();

InputStream is = null;

try {

Metadata metadata = new Metadata();

metadata.set(Metadata.AUTHOR, “波帅”); //没有作用,因为被覆盖掉了

metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());

is = new FileInputStream(f);

ContentHandler handler = new BodyContentHandler();

ParseContext context = new ParseContext();

context.set(Parser.class, parser);

parser.parse(is, handler, metadata, context);

for(String name : metadata.names()) {

System.out.println(name+”:”+metadata.get(name));

}

return handler.toString();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

} catch (TikaException e) {

e.printStackTrace();

} finally {

if(is != null) {

try {

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return null;

}

2)方式二(效率没有方式一高)

public String tikaTool(File f) throws IOException, TikaException {

Tika tika = new Tika();

Metadata metadata = new Metadata();

metadata.set(Metadata.AUTHOR, “波帅”); //没有作用,因为被覆盖掉了

metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());

String str = tika.parseToString(new FileInputStream(f), metadata);

for(String name : metadata.names()) {

System.out.println(name+”:”+metadata.get(name));

}

//return tika.parseToString(f);

return str;

}

4、使用tika创建索引

Document doc = new Document();

Metadata metadata = new Metadata();

doc.add(new Field(“content”, new Tika().parse(

new FileInputStream(file), metadata))); 参考资料:http://blog.csdn.net/gezhonglei2007/article/details/8078104

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234653.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Android Studio中layout_gravity与gravity[通俗易懂]

    Android Studio中layout_gravity与gravity[通俗易懂]AndroidStudio的视图有layout_gravity属性和gravity属性。其中gravity是“重力”的意思,在此引申为与力有关的“对齐方式”。layout_gravity是设置视图对于其parent(父视图)的对齐方式,而gravity是设置视图显示内容相对于视图本身的对齐方式。1layout_gravity在方向(orientation)是垂直(vertical)时,将其中的TextView视图的layout_gravity属性设置为“right”,如图1所示。图1.

  • SpringBoot——SpringBoot整合RabbitMQ(下)

    SpringBoot——SpringBoot整合RabbitMQ(下)SpringBoot——SpringBoot整合RabbitMQ(下)

  • BigDecimal类型 比较大小的方法[通俗易懂]

    BigDecimal类型 比较大小的方法[通俗易懂]1.转成intBigDecimalb1=newBigDecimal(“-121454125453.145”);if(b1.intValue()<0){ System.out.println(“金额为负数!”); System.out.println(b1);}2.compareTo方法结果是:-1:小于;0:等于;1:大于;BigDecimalb1=newBigDecimal(“-121454125453.145”);if(b1.compar

  • python基础(3)列表list[通俗易懂]

    python基础(3)列表list[通俗易懂]列表列表特点:是一种序列结构,与元组不同,列表具有可变性,可以追加、插入、删除、替换列表中的元素新增元素appendappend添加一个对象,可以是任意类型a=['zhangsa

  • 桶排序算法流程图_快速排序算法实例讲解

    桶排序算法流程图_快速排序算法实例讲解前言在数据结构与算法的排序中,我们很多人可能更多的熟悉冒泡排序、快速排序、归并排序。可能对堆排序、桶排序、计数排数等比较生疏,其实这个也没啥复杂的,算法的排序中,我们很多人可能更多的熟悉冒泡排序、快速排序、归并排序。可能对堆排序、桶排序、计数排数等比较生疏,其实这个也没啥复杂的,桶排序是所有排序中最简单的排序之一。没毛病老铁,就是最简单的之一。桶排序思想…

  • 把VueThink整合到已有ThinkPHP 5.0项目中

    把VueThink整合到已有ThinkPHP 5.0项目中

    2021年10月11日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号