Tika基本使用
来源:互联网 发布:海岛奇兵科技升级数据 编辑:程序博客网 时间:2024/06/07 12:28
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<MediaType, Parser> parsersByType = new HashMap<MediaType, Parser>();
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);
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;}
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
- Tika基本使用
- Tika
- Tika
- lucene 与 tika 一起使用
- 使用apache.tika判断文件类型
- Lucene4.10使用教程(九):Tika
- Lucene4.10使用教程(九):Tika
- Lucene4.10使用教程(九):Tika
- Apache Tika格式转换的简单使用
- 【tika】tika介绍
- 使用Tika进行非结构化内容的读写-1
- Tika文本提取工具的使用(word、pdf、excel等)
- Tika文本提取工具的使用(word、pdf、excel等)
- 编译 Tika
- Apache Tika
- TIKA架构
- TIKA文件格式
- Apache Tika
- .net事务
- Codeforces Round #297 (Div. 2) B - Pasha and String
- ZendOpcache安装与配置
- Qt自定义控件的开发和使用
- 在Win7下安装ubuntukylin-14.04.2-desktop-amd64
- Tika基本使用
- Java内存泄露的理解与解决
- 域名同一文件路径,不同的域名指向不同的robots文件
- 第3周项目1-三角形类的构造函数(1、带参数的构造函数)
- Timeout expired. The timeout period elapsed prior to completion of the operation or the server...
- 【深入浅出IOS开发】IOS绘图基础
- mysql数据库千万级别数据的查询优化和分页测试
- Java基础-14
- Java web项目利用POI导出excel