出处: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利用Apache的MIME类型识别系统来识别文件类型,并且能够处理大量的文档格式,如PDF、Word、Excel、HTML、XML、图片等。 Tika的核心功能是内容提取,这意味着它可以从不同类型的文件中抽取纯文本,这对于搜索...
1. Apache POI - 提取Word文档 Apache POI是一个开源项目,它允许Java开发者读写Microsoft Office格式的文件,包括Word(.doc/.docx)。POI提供了HSSF(Horrible Spreadsheet Format)用于处理Excel,而HWPF...
2. **文本提取**:Tika可以提取嵌入在各种文档中的文本,如PDF、Word、Excel、HTML等。这对于信息检索、全文搜索和数据分析等场景非常有用。 3. **元数据提取**:除了文本内容,Tika还能提取文件的元数据,如作者、...
Apache Tika是一款强大的内容检测和元数据提取工具,主要用于从各种文件格式中抽取文本和元数据。这个"tika读取文件专用包"显然包含了Tika项目所需要的各种jar包,这些jar包支持处理多种文件类型,如PDF、DOC、XLS、...
Tika API的设计目的是帮助用户轻松地从各种文档格式中提取文本和元数据,包括但不限于PDF、HTML、Microsoft Office系列(如Word、Excel、PowerPoint)等。 Tika API是基于Java构建的,因此它可以无缝地集成到任何...
1. **文件解析**:Tika能够处理多种文件格式,如PDF、Microsoft Office文档(Word、Excel、PowerPoint)、HTML、XML、图片、音频和视频等。它通过集成多种解析器库来实现这一点,如Apache POI用于处理Microsoft ...
它支持众多文件格式,包括常见的文档(如PDF、Word、Excel)、图像、音频和视频等。Tika的核心在于其解析器,它们能够将不同文件格式的内容转换成统一的API输出。 **Python库tika** 在Python中使用tika-1.13,首先...
它能够解析各种格式的文件,包括但不限于PDF、Word、Excel、HTML、图片等,并从中提取出文本内容和元数据。这对于构建搜索引擎来说至关重要,因为搜索引擎需要能够处理各种不同类型的文档,而Tika正好提供了这个能力...
1. **内容提取**:Tika能够解析多种文件类型,包括PDF、Word文档、Excel表格、图片、音频和视频等,从中提取出纯文本内容。这对于构建搜索引擎或数据分析系统非常有用,因为它们需要能够处理不同格式的数据。 2. **...
除了Apache POI和PDFBox,还有其他一些库,如iText(用于PDF处理)和Apache Tika(一个元数据和文本提取工具,支持多种文件格式,包括Word和PDF)。这些库提供了更高级别的抽象,使得从不同类型的文档中提取内容变得...
它提供了强大的文本分析和索引能力,支持多种格式的文档,如 PDF、TXT、Office 文件(Word、Excel、PowerPoint)以及 HTML 等。 ### 1. Lucene 的基本概念 - **索引(Index)**: Lucene 首先对文档内容进行分析和...
例如,可以使用Tika将PDF或Word文档的内容转换为纯文本,然后用Lucene建立索引,从而实现对这些非文本文件的全文检索。 三、Lucene与Tika的协同工作 1. 结合使用:在Java项目中,可以先用Tika解析多种格式的文件,...
在Java编程中,读取各种类型的文档是一项常见的任务,这些文档可能包括文本文件、XML、CSV、PDF、Excel等格式。为了实现这个功能,开发者通常需要引入特定的库或者jar包。以下是一些Java中读取文档时常用的jar包及其...
Ingest Attachment插件是Elasticsearch中用于处理文档附件的重要工具,它允许用户在索引文本之前解析和提取各种文件格式(如PDF、Word文档或图片)的内容。 描述中提到的"elasticsearch预处理器 数据预处理器 我...
10. **tika-parsers-1.27.jar**:Apache Tika是一个内容分析工具,能够检测和提取多种文件格式的数据。Tika-Parsers模块包含了处理不同文件类型的具体解析器,如图像、音频、视频等,进一步增强了Elasticsearch处理...
提取文本和元数据,并使用从多种非结构化文档格式(PDF,Word,Excel等)执行语言检测。 处理包括嵌入式文档,在图像的情况下,涉及使用 获取文本。 执行(NER); 提供对文档中已知实体的批量搜索,报告每个匹配...
- **Microsoft Office 文档**:如 Word (.doc)、Excel (.xls) 等。 - **PDF 文档**:通过 PDF 解析器库来提取文本内容。 - **HTML 页面**:解析 HTML 内容并提取有用的文本。 #### 八、工具和扩展 为了更好地利用 ...
Apache Tika不仅限于这两个格式,它还支持PDF、Excel、PPT等多种文件类型的解析和转换,是处理各种文档格式的强大工具。在实际应用中,可以根据需求扩展这个功能,例如添加错误处理、支持批处理转换等。