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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 利用DOSBox运行汇编超详细步骤「建议收藏」

    利用DOSBox运行汇编超详细步骤「建议收藏」最近学校要求用汇编写课设,笔试取消,无奈只有配置环境自己写课设了。起初是利用VS2017进行配置,但后面运行好像有些问题,就想到用DOSBox了。

    2022年6月15日
    30
  • numpy数据类型dtype转换

    numpy数据类型dtype转换这篇文章我们玩玩numpy的数值数据类型转换 导入numpy>>>importnumpyasnp 一、随便玩玩生成一个浮点数组>>>a=np.random.random(4)看看信息>>>aarray([0.0945377,0.52199916,0.62490646,…

    2022年5月4日
    34
  • 【OpenCV 例程200篇】02. 图像的保存(cv2.imwrite)

    【OpenCV 例程200篇】02. 图像的保存(cv2.imwrite)2.图像的保存函数cv2.imwrite()用于将图像保存到指定的文件。函数说明:retval=cv2.imwrite(filename,img[,paras])cv2.imwrite()将OpenCV图像保存到指定的文件。cv2.imwrite()基于保存文件的扩展名选择保存图像的格式。cv2.imwrite()只能保存BGR3通道图像,或8位单通道图像、或PNG/JPEG/TIFF16位无符号单通道图像。参数说明:filename:要保

    2022年6月26日
    30
  • c++与三菱plc通信_C语言编写的代码是

    c++与三菱plc通信_C语言编写的代码是FX系列作为三菱基本款的PLC,它们之间的通讯体例别离如下:CC-LINK,N:N网络连接,并联连接。1.CC-LINK连接CC-LINK连接图如下:三菱PLC通讯与编程实例!-1.jpg(21.71KB,下载次数:0)2018-6-103:01上传对应的PLC可为FX1N、FX1NC、FX2N、FX2NC、FX3U、FX3UC,因为在使用CC-LINK通讯时要扩展CC-LINK模块,…

    2022年9月10日
    0
  • Pytest(5)美化插件进度条pytest-sugar

    Pytest(5)美化插件进度条pytest-sugar前言在我们进行自动化测试的时候,用例往往是成百上千,执行的时间是几十分钟或者是小时级别。有时,我们在调试那么多用例的时候,不知道执行到什么程度了,而pytest-sugar插件能很好解决我们的痛点。

    2022年7月31日
    6
  • 使用R进行倾向得分匹配「建议收藏」

    pacman::p_load(knitr,wakefield,MatchIt,tableone,captioner)set.seed(1234)library(wakefield)df.patients<-r_data_frame(n=250,age(x=30:78,…

    2022年4月12日
    60

发表回复

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

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