Lucene4.10使用教程(九):Tika
来源:互联网 发布:淘宝外卖 系统繁忙 编辑:程序博客网 时间:2024/06/05 14:33
Tika可以用来提取office、PDF、HTML、txt等常用文件中得文本(在提取文本时,图片是无法提取的,会被丢弃),方便Lucene进行文本的生成索引和检索。
Tika的用法很简单,但是依赖包有些多,导入包后,使用方法如下:
package com.johnny.lucene05.lucene_plugin.tika;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import org.apache.commons.io.FilenameUtils;import org.apache.lucene.document.Document;import org.apache.lucene.document.DoubleField;import org.apache.lucene.document.Field;import org.apache.lucene.document.Field.Store;import org.apache.lucene.document.IntField;import org.apache.lucene.document.LongField;import org.apache.lucene.document.StringField;import org.apache.lucene.document.TextField;import org.apache.tika.Tika;import org.apache.tika.metadata.Metadata;import org.apache.tika.parser.AutoDetectParser;import org.apache.tika.parser.ParseContext;import org.apache.tika.parser.Parser;import org.apache.tika.sax.BodyContentHandler;import org.junit.Test;import org.xml.sax.ContentHandler;public class TikaTest { /**使用Tika解析文件,并将其中的文本提取出来 * * 注意:图片是无法解析的 * **/ @Test public void fileToTxt() throws Exception { //使用AutoDetectParser可以使用Tika根据实际情况自动转换需要使用的parser,不需要再手工指定 Parser tikaParser = new AutoDetectParser(); File file = new File("/Users/ChinaMWorld/Desktop/WorkSpace/Johnny/lucene/lucene/src/main/java/resources/lucene05/SDK接口项目部署文档.docx"); InputStream is = new FileInputStream(file); /*/ * 参数的含义为: * inputStream:文件输入流 * ContentHandler:所有解析出来的内容会放到它的子类BodyContentHandler中 * Metadata :Tika解析文档时会生成的一组说明数据 * ParseContext:用来存储需要填入的参数,最少需要设置tikaParser本身 * **/ ContentHandler handler = new BodyContentHandler(); Metadata metadata = new Metadata(); /**设定文档名称, * 对于deprecate属性的内容表示无法通过在metadata中设置进行修改**/ metadata.add(Metadata.RESOURCE_NAME_KEY, file.getName());//可以用来设定文档名称 ParseContext parseContext = new ParseContext(); parseContext.set(Parser.class, tikaParser); tikaParser.parse(is, handler, metadata, parseContext); System.out.println(handler.toString()); System.out.println("---------------------------"); for(String name :metadata.names()){ System.out.println(name+"-->"+metadata.get(name)); } } /** * 使用Tika的第二种方式进行解析,但是官方文档认为直接使用第二种方案效率不如上面一种效率高 * 如果在tika.parse方法中不放置metadata,那么可以自己设定的所有metadata都会生效 */ @Test public void filetoTxt2() throws Exception{ Tika tika = new Tika(); File file = new File("/Users/ChinaMWorld/Desktop/WorkSpace/Johnny/lucene/lucene/src/main/java/resources/lucene05/SDK接口项目部署文档.docx"); InputStream is = new FileInputStream(file); Metadata metadata =new Metadata(); metadata.add(Metadata.AUTHOR,"abc"); metadata.add(Metadata.RESOURCE_NAME_KEY, file.getName()); for(String name :metadata.names()){ System.out.println(name+"-->"+metadata.get(name)); } String s = tika.parseToString(is,metadata); System.out.println("---------------------------"); for(String name :metadata.names()){ System.out.println(name+"-->"+metadata.get(name)); } System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(s); } /** * 使用Tika生成索引,并查询结果, * tika生成索引参见方法:Document com.johnny.lucene05.lucene_plugin.tika.FileIndexUtils.fileToDoc(File file) throws Exception */ @Test public void testTikaToIndex(){ FileIndexUtils.index(true); FileIndexUtils fu = new FileIndexUtils(); fu.searchByTerm("content", "log4j".toLowerCase()); }}
0 0
- Lucene4.10使用教程(九):Tika
- Lucene4.10使用教程(九):Tika
- Lucene4.10使用教程(九):Tika
- Lucene4.10使用教程(一):常用概念
- Lucene4.10使用教程(一):常用概念
- Lucene4.10使用教程(一):常用概念
- Lucene4.10使用教程(三):lucene的增删改查
- Lucene4.10使用教程(四):lucene的Search
- Lucene4.10使用教程(五):lucene的分词器
- Lucene4.10使用教程(六):Lucene的过滤器
- Lucene4.10使用教程(七):Lucene的自定义评分
- Lucene4.10使用教程(八):Lucene的自定义评分(2)
- Lucene4.10使用教程(十):Lucene的关键字高亮
- Lucene4.10使用教程(十一):Lucene的近实时搜索
- Lucene4.10使用教程(三):lucene的增删改查
- Lucene4.10使用教程(四):lucene的Search
- Lucene4.10使用教程(五):lucene的分词器
- Lucene4.10使用教程(六):Lucene的过滤器
- Android开发笔记-EditText自动补全功能
- 禁止VS JIT debugger
- (16) 正则表达式 学习参考
- 移动Web开发资料大汇总
- Oracle RAC 转换为单实例
- Lucene4.10使用教程(九):Tika
- iOS WIFI 信息 获取
- Word转PDF转换器怎么转换
- js刷新页面方法大全
- Android常用工具总结
- Lucene4.10使用教程(十):Lucene的关键字高亮
- JNI调用Java方法
- annitation的属性动画Property Animation
- Java 环境变量配置