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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mac修改redis密码[通俗易懂]

    Mac修改redis密码[通俗易懂]由于我长时间使用redis,结果今天启动redis服务,密码给活活忘记了,那么如何在Mac本地修改redis密码,操作如下Redis并没有像MySQL或者是Oracle那样的严格安全校验机制,所以修改起来非常容易,以下提供两种修改方式:停止Redis后重置密码(永久有效)若没有运行Redis,则直接修改Redis的配置文件(默认的安装位置);如果是手动编译的代码请前往相应的目录,并修改redis.conf。Macsudovim/usr/local/redis-6.0.

    2025年9月20日
    4
  • JS 幻灯片代码(含自动播放)

    JS 幻灯片代码(含自动播放)前端

    2022年7月13日
    18
  • 泰克|安捷伦|普源|PICO示波器程控软件二次开发NS-Scope

    泰克|安捷伦|普源|PICO示波器程控软件二次开发NS-Scope*主要功能:硬件连接;参数配置;运行参数;数据查询。*程控对象:示波器。*程控接口:兼容市面上所有具有GPIB、USB、RS232、LAN、RS485、TTL任意一种程控接口的示波器。*仪器兼容性:泰克Tektronix、是德科技Keysight、普源Rigol、力科、罗德与施瓦茨R&S等品牌示波器。1.软件概述>>为了解决示波器测试操作流程繁琐、参数配置复杂等问题,Namisoft开发的NS-Scope示波器自动化测试程控软件,通过对示波器的程序控制,…

    2022年10月12日
    2
  • C++11关键字constexpr看这篇就够了

    C++11关键字constexpr看这篇就够了一 在普通函数中的使用例如下面的代码 数组的大小必须是常量 在声明数组 array 时 用函数返回值 此时会报错 errorC2131 表达式的计算结果不是常数 note 对未定义的函数或为未声明为 constexpr 的函数的调用导致了故障用 constexpr 关键字可以解决这种问题 在 GetLen 函数前加 constexpr 声明 代码如下 当然 constexpr 修饰的函数也有一定的限制 函数体尽量只包含一个 return 语句 多个可能会编译出错

    2025年8月6日
    1
  • executescalar mysql_ExecuteScalar[通俗易懂]

    executescalar mysql_ExecuteScalar[通俗易懂]这两个答案和一点点思考使我想到了一个接近答案的东西。首先再澄清一下:该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQLServer2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报…

    2022年6月30日
    27
  • C++ overloading contructor[通俗易懂]

    C++ overloading contructor

    2022年1月23日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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