`

Tika文本提取工具的使用(word、pdf、excel等)

    博客分类:
  • Java
阅读更多

出处: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的工具类

 

  1. package org.lucene.util;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import org.apache.lucene.document.Document;  
  8. import org.apache.lucene.document.Field;  
  9. import org.apache.lucene.index.CorruptIndexException;  
  10. import org.apache.lucene.index.IndexWriter;  
  11. import org.apache.lucene.index.IndexWriterConfig;  
  12. import org.apache.lucene.store.Directory;  
  13. import org.apache.lucene.store.FSDirectory;  
  14. import org.apache.lucene.store.LockObtainFailedException;  
  15. import org.apache.lucene.util.Version;  
  16. import org.apache.tika.Tika;  
  17. import org.apache.tika.exception.TikaException;  
  18. import org.apache.tika.metadata.Metadata;  
  19. import org.apache.tika.parser.AutoDetectParser;  
  20. import org.apache.tika.parser.ParseContext;  
  21. import org.apache.tika.parser.Parser;  
  22. import org.apache.tika.sax.BodyContentHandler;  
  23. import org.xml.sax.ContentHandler;  
  24. import org.xml.sax.SAXException;  
  25. import com.chenlb.mmseg4j.analysis.MMSegAnalyzer;  
  26.   
  27. public class IndexUtil {  
  28.     /** 
  29.      * 直接读取pdf建立索引,结果是索引建立成功了,但是索引存储的数据却是乱的 
  30.      */  
  31.     public void index() {  
  32.         try {  
  33.             File f = new File("F:\\文档资料\\lucene_in_action中文版.pdf");  
  34.             Directory dir = FSDirectory.open(new File("f:/lucene"));  
  35.             IndexWriter writer = new IndexWriter(dir,new IndexWriterConfig(Version.LUCENE_35, new MMSegAnalyzer()));  
  36.             writer.deleteAll();  
  37.             Document doc = new Document();  
  38.             doc.add(new Field("content",new Tika().parse(f)));  
  39.             writer.addDocument(doc);  
  40.             writer.close();  
  41.         } catch (CorruptIndexException e) {  
  42.             e.printStackTrace();  
  43.         } catch (LockObtainFailedException e) {  
  44.             e.printStackTrace();  
  45.         } catch (FileNotFoundException e) {  
  46.             e.printStackTrace();  
  47.         } catch (IOException e) {  
  48.             e.printStackTrace();  
  49.         }  
  50.     }  
  51.       
  52.     /** 
  53.      * 根据Tika得到文档的内容,这种比下面那种获取的要简单很多, 
  54.      * 据tika的文档上说,效率没有下面的那种高,可能封装的比较多 
  55.      * @param f 
  56.      * @return 
  57.      * @throws IOException 
  58.      * @throws TikaException 
  59.      */  
  60.     public String tikaTool(File f) throws IOException, TikaException {  
  61.         Tika tika = new Tika();  
  62.         Metadata metadata = new Metadata();  
  63.         metadata.set(Metadata.AUTHOR, "空号");//重新设置文档的媒体内容  
  64.         metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());  
  65.         String str = tika.parseToString(new FileInputStream(f),metadata);  
  66.         for(String name:metadata.names()) {  
  67.             System.out.println(name+":"+metadata.get(name));  
  68.         }  
  69.         return str;  
  70.     }  
  71.       
  72.     /** 
  73.      * 根据Parser得到文档的内容 
  74.      * @param f 
  75.      * @return 
  76.      */  
  77.     public String fileToTxt(File f) {  
  78.         Parser parser = new AutoDetectParser();//自动检测文档类型,自动创建相应的解析器  
  79.         InputStream is = null;  
  80.         try {  
  81.             Metadata metadata = new Metadata();  
  82.             metadata.set(Metadata.AUTHOR, "空号");//重新设置文档的媒体内容  
  83.             metadata.set(Metadata.RESOURCE_NAME_KEY, f.getName());  
  84.             is = new FileInputStream(f);  
  85.             ContentHandler handler = new BodyContentHandler();  
  86.             ParseContext context = new ParseContext();  
  87.             context.set(Parser.class,parser);  
  88.             parser.parse(is,handler, metadata,context);  
  89.             for(String name:metadata.names()) {  
  90.                 System.out.println(name+":"+metadata.get(name));  
  91.             }  
  92.             return handler.toString();  
  93.         } catch (FileNotFoundException e) {  
  94.             e.printStackTrace();  
  95.         } catch (IOException e) {  
  96.             e.printStackTrace();  
  97.         } catch (SAXException e) {  
  98.             e.printStackTrace();  
  99.         } catch (TikaException e) {  
  100.             e.printStackTrace();  
  101.         } finally {  
  102.             try {  
  103.                 if(is!=null) is.close();  
  104.             } catch (IOException e) {  
  105.                 e.printStackTrace();  
  106.             }  
  107.         }  
  108.         return null;  
  109.     }  
  110. }  


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提取文本内容

    Tika利用Apache的MIME类型识别系统来识别文件类型,并且能够处理大量的文档格式,如PDF、Word、Excel、HTML、XML、图片等。 Tika的核心功能是内容提取,这意味着它可以从不同类型的文件中抽取纯文本,这对于搜索...

    java抽取word,pdf的四种武器

    1. Apache POI - 提取Word文档 Apache POI是一个开源项目,它允许Java开发者读写Microsoft Office格式的文件,包括Word(.doc/.docx)。POI提供了HSSF(Horrible Spreadsheet Format)用于处理Excel,而HWPF...

    tika0.5基本jar包

    2. **文本提取**:Tika可以提取嵌入在各种文档中的文本,如PDF、Word、Excel、HTML等。这对于信息检索、全文搜索和数据分析等场景非常有用。 3. **元数据提取**:除了文本内容,Tika还能提取文件的元数据,如作者、...

    tika读取文件专用包

    Apache Tika是一款强大的内容检测和元数据提取工具,主要用于从各种文件格式中抽取文本和元数据。这个"tika读取文件专用包"显然包含了Tika项目所需要的各种jar包,这些jar包支持处理多种文件类型,如PDF、DOC、XLS、...

    利用TikaAPI解析各种文档

    Tika API的设计目的是帮助用户轻松地从各种文档格式中提取文本和元数据,包括但不限于PDF、HTML、Microsoft Office系列(如Word、Excel、PowerPoint)等。 Tika API是基于Java构建的,因此它可以无缝地集成到任何...

    apache中的tika包

    1. **文件解析**:Tika能够处理多种文件格式,如PDF、Microsoft Office文档(Word、Excel、PowerPoint)、HTML、XML、图片、音频和视频等。它通过集成多种解析器库来实现这一点,如Apache POI用于处理Microsoft ...

    Python库 | tika-1.13.tar.gz

    它支持众多文件格式,包括常见的文档(如PDF、Word、Excel)、图像、音频和视频等。Tika的核心在于其解析器,它们能够将不同文件格式的内容转换成统一的API输出。 **Python库tika** 在Python中使用tika-1.13,首先...

    lucence7.7.1+tika

    它能够解析各种格式的文件,包括但不限于PDF、Word、Excel、HTML、图片等,并从中提取出文本内容和元数据。这对于构建搜索引擎来说至关重要,因为搜索引擎需要能够处理各种不同类型的文档,而Tika正好提供了这个能力...

    apache-tika-0.1-incubating-src.tar.gz_垂直搜索引擎

    1. **内容提取**:Tika能够解析多种文件类型,包括PDF、Word文档、Excel表格、图片、音频和视频等,从中提取出纯文本内容。这对于构建搜索引擎或数据分析系统非常有用,因为它们需要能够处理不同格式的数据。 2. **...

    Java抽取Word和PDF格式文件的四种武器.doc

    除了Apache POI和PDFBox,还有其他一些库,如iText(用于PDF处理)和Apache Tika(一个元数据和文本提取工具,支持多种文件格式,包括Word和PDF)。这些库提供了更高级别的抽象,使得从不同类型的文档中提取内容变得...

    Lucene---全文检索(文档pdf/txt/office/html)

    它提供了强大的文本分析和索引能力,支持多种格式的文档,如 PDF、TXT、Office 文件(Word、Excel、PowerPoint)以及 HTML 等。 ### 1. Lucene 的基本概念 - **索引(Index)**: Lucene 首先对文档内容进行分析和...

    lucene-and-tika

    例如,可以使用Tika将PDF或Word文档的内容转换为纯文本,然后用Lucene建立索引,从而实现对这些非文本文件的全文检索。 三、Lucene与Tika的协同工作 1. 结合使用:在Java项目中,可以先用Tika解析多种格式的文件,...

    Java读取文档时可能会用到的jar包

    在Java编程中,读取各种类型的文档是一项常见的任务,这些文档可能包括文本文件、XML、CSV、PDF、Excel等格式。为了实现这个功能,开发者通常需要引入特定的库或者jar包。以下是一些Java中读取文档时常用的jar包及其...

    ingest-attachment-7.6.2.zip

    Ingest Attachment插件是Elasticsearch中用于处理文档附件的重要工具,它允许用户在索引文本之前解析和提取各种文件格式(如PDF、Word文档或图片)的内容。 描述中提到的"elasticsearch预处理器 数据预处理器 我...

    ingest-attachment-7.16.2

    10. **tika-parsers-1.27.jar**:Apache Tika是一个内容分析工具,能够检测和提取多种文件格式的数据。Tika-Parsers模块包含了处理不同文件类型的具体解析器,如图像、音频、视频等,进一步增强了Elasticsearch处理...

    dataFusion:非结构化和结构化数据集之间的匹配

    提取文本和元数据,并使用从多种非结构化文档格式(PDF,Word,Excel等)执行语言检测。 处理包括嵌入式文档,在图像的情况下,涉及使用 获取文本。 执行(NER); 提供对文档中已知实体的批量搜索,报告每个匹配...

    Lucene In Action

    - **Microsoft Office 文档**:如 Word (.doc)、Excel (.xls) 等。 - **PDF 文档**:通过 PDF 解析器库来提取文本内容。 - **HTML 页面**:解析 HTML 内容并提取有用的文本。 #### 八、工具和扩展 为了更好地利用 ...

    Converters:将 DOC 或 DOCX 转换为 HTML

    Apache Tika不仅限于这两个格式,它还支持PDF、Excel、PPT等多种文件类型的解析和转换,是处理各种文档格式的强大工具。在实际应用中,可以根据需求扩展这个功能,例如添加错误处理、支持批处理转换等。

Global site tag (gtag.js) - Google Analytics