出处:http://blog.csdn.net/wxwzy738/article/details/8882391
Tika是Apache的Lucene项目下面的子项目,在lucene的应用中可以使用tika获取大批量文档中的内容来建立索引,非常方便,也很容易使用~
Tika的缺点就是都是依赖外部的jar包,导致jar包的重量太大,lucene的核心包只有1M,tika约20M,tika依赖的外部的 jar包有多样的功能,比如PDFBox和Apache POI能获取文档的字体,布置和内置图片信息,而Tika只是获取文本信息。但是这些外部的jar包又没有把获取文本信息的抽离出一个单独的jar包。
1、Tika的作用
工程结构:
2、Tika的工具类
- package org.lucene.util;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.document.Field;
- import org.apache.lucene.index.CorruptIndexException;
- import org.apache.lucene.index.IndexWriter;
- import org.apache.lucene.index.IndexWriterConfig;
- import org.apache.lucene.store.Directory;
- import org.apache.lucene.store.FSDirectory;
- import org.apache.lucene.store.LockObtainFailedException;
- import org.apache.lucene.util.Version;
- import org.apache.tika.Tika;
- import org.apache.tika.exception.TikaException;
- 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.xml.sax.ContentHandler;
- import org.xml.sax.SAXException;
- import com.chenlb.mmseg4j.analysis.MMSegAnalyzer;
- public class IndexUtil {
- /**
- * 直接读取pdf建立索引,结果是索引建立成功了,但是索引存储的数据却是乱的
- */
- public void index() {
- try {
- File f = new File("F:\\文档资料\\lucene_in_action中文版.pdf");
- Directory dir = FSDirectory.open(new File("f:/lucene"));
- IndexWriter writer = new IndexWriter(dir,new IndexWriterConfig(Version.LUCENE_35, new MMSegAnalyzer()));
- writer.deleteAll();
- Document doc = new Document();
- doc.add(new Field("content",new Tika().parse(f)));
- writer.addDocument(doc);
- writer.close();
- } catch (CorruptIndexException e) {
- e.printStackTrace();
- } catch (LockObtainFailedException e) {
- e.printStackTrace();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 根据Tika得到文档的内容,这种比下面那种获取的要简单很多,
- * 据tika的文档上说,效率没有下面的那种高,可能封装的比较多
- * @param f
- * @return
- * @throws IOException
- * @throws TikaException
- */
- 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 str;
- }
- /**
- * 根据Parser得到文档的内容
- * @param f
- * @return
- */
- 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 {
- try {
- if(is!=null) is.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return null;
- }
- }
3、测试
package org.lucene.test; import java.io.File; import java.io.IOException; import org.apache.tika.exception.TikaException; import org.junit.Test; import org.lucene.util.IndexUtil; public class TestIndex { @Test public void testIndex() { IndexUtil iu = new IndexUtil(); iu.index(); } @Test public void testTika01() { IndexUtil iu = new IndexUtil(); System.out.println(iu.fileToTxt(new File("F:\\文档资料\\lucene_in_action中文版.pdf"))); } @Test public void testToka02() throws IOException, TikaException { IndexUtil iu = new IndexUtil(); System.out.println(iu.tikaTool(new File("F:\\文档资料\\初级SQL开发指南.doc"))); } }
相关推荐
tika 工程 简便获取文本的java工具
txt、excel、word等都可转换成pdf,无转换限制,操作方便,完全开源!!!!!欢迎大家下载使用,好东西与大家分享!!!
Tika.in.Action.pdf
Apache元数据提取工具类,可以提取图片,文本,视频等元数据
解析器接口使用 /rmeta 接口提取文本和元数据 或者,您可以将 Tika 服务器 URL 与对多实例执行有用的调用一起传递 指定 XHTML 的输出格式 解包接口在一次调用中处理元数据和文本提取 在内部返回内部解包的元数据和...
NULL 博文链接:https://iamyida.iteye.com/blog/2214600
tika 1.2 内容收集,包含了poi等工具,可处理word、pdf等文档
tika最新版本,tika-app-1.0.jar,提取office和pdf文档内容
java抽取word,pdf的四种武器
使用tika0.5提取内容的基本的jar包。
Tika是Apache下开源的文档内容解析工具,支持上千种文档格式(如PPT、XLS、PDF)。Tika使用统一的方法对各种类型文件进行内容解析,封装了各种格式解析的内部实现,可用于搜索引擎索引、内容分析、转换等场景。
tika读取文件所用jar包,包含各种文件类型所用jar
pdf2html 有助于使用将 PDF 文件转换为 HTML 或文本。 该模块还有助于使用为 PDF 文件生成缩略图。 安装 通过纱线: yarn add pdf2html 通过 npm: npm install --save pdf2html 运行此模块需要 Java 运行时...
Apache Tika 利用现有的解析类库,从不同格式的文档中(例如HTML, PDF, Doc),侦测和提取出元数据和结构化内容。 功能包括: 侦测文档的类型,字符编码,语言,等其他现有文档的属性。 提取结构化的文字内容。...
Apache Tika本产品包括在以下位置开发的软件Apache软件基金会。版权所有1993-2010大学大气研究公司/ Unidata该软件包含源自UCAR / Unidata的NetCDF库的代码。Tika服务器组件使用CDDL许可的依赖项
Apache Tika 利用现有的解析类库,从不同格式的文档中(例如HTML, PDF, Doc),侦测和提取出元数据和结构化内容。 功能包括: 侦测文档的类型,字符编码,语言,等其他现有文档的属性。 提取结构化的文字内容。 该...
tika-app-1.16,java文档内容提取工具jar包,可提取office文档内容
如果您是通过交钥匙文本提取(包括最新支持,样式等),强烈建议您使用 Apache Tika,它将构建在POI之上,以提供文本和元数据提取。如果您希望有一些非常简单和独立的东西,或者您希望进行大量修改,那么POI提供的...
利用开源工具Tika解析PDF文档,HTML文档,微软形式的文档
tika-app.1.19.1.jar,轻松提取文本正文的工具。。。。