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)


相关推荐

  • 2016年TLC闪存发展趋势 美光、东芝、Intel有何策略

    2016年TLC闪存发展趋势 美光、东芝、Intel有何策略

  • XLSTransformer导出多sheet页

    XLSTransformer导出多sheet页https://blog.csdn.net/z69183787/article/details/51407171?utm_source=app&app_version=4.17.0&code=app_1562916241&uLinkId=usr1mkqgl919blen

  • vue子组件向父组件传值的三种方式_vue父页面传值到子页面

    vue子组件向父组件传值的三种方式_vue父页面传值到子页面1.用于子组件触发事件传递给父组件子组件:rowEvent里面也可以带参数事件treeData是携带的参数rowEvent(){this.$emit(‘rowEvent’,’treeData’’);},父组件:在父组件绑定自定义事件直接可以获取到rowEvents(obj){console.log(obj)},2.用ref(常用于不触发的事件)子组件定义个…

  • JAVA的网络编程基础概念建议收藏

    网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协

    2021年12月20日
  • Android之复合按钮CompoundButton[通俗易懂]

    Android之复合按钮CompoundButton[通俗易懂]有些开发者看到这个可能会有些一头雾水,但其实CompoundButton是抽象的复合按钮,因为是抽象类,所以不能直接使用。实际开发中用的是CompoundButton类的几个派生类,主要有复选框CheckBox、单选按钮RadioButton以及开关按钮Switch,这些派生类都可以使用Compound的属性和方法。CompoundButton在布局文件中主要有如下两个属性: checked:指定按钮的勾选状态,true表示勾选,false表示未勾选。默认未勾选。 button:指定左侧

  • mybatis-log-plugin激活码(注册激活)2022.02.05

    (mybatis-log-plugin激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~CJM5ZJBPHS-eyJsaWNlbnNlSWQiOi…

发表回复

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

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