开发手册 欢迎您!
软件开发者资料库

TIKA - 内容提取

TIKA内容提取 - 从简单和简单的步骤学习TIKA,从基本到高级概念,包括概述,架构,环境,参考API,文件格式,文档类型检测,内容提取,元数据提取,语言检测,GUI,提取PDF,提取ODF,提取MS-Office文件,提取文本文档,提取HTML文档,提取XML文档,提取.class文件,提取JAR文件,提取图像文件,提取mp4文件,提取mp3文件。

Tika使用各种解析器库从给定的解析器中提取内容.它选择正确的解析器来提取给定的文档类型.

对于解析文档,通常使用Tika facade类的parseToString()方法.下面显示的是解析过程中涉及的步骤,这些步骤由Tika ParsertoString()方法提取.

解析过程

抽象解析过程 :

  • 最初当我们传递文档时对于Tika,它使用合适的类型检测机制并检测文档类型.

  • 一旦知道文档类型,它就从中选择一个合适的解析器它的解析器存储库.解析器存储库包含使用外部库的类.

  • 然后传递文档以选择将解析内容,提取文本的解析器,以及也为不可读的格式抛出异常.

使用Tika进行内容提取

以下是程序使用Tika facade class : 来从文件中提取文本;

import java.io.File;import java.io.IOException;import org.apache.tika.Tika;import org.apache.tika.exception.TikaException;import org.xml.sax.SAXException;public class TikaExtraction {   public static void main(final String[] args) throws IOException, TikaException {      //Assume sample.txt is in your current directory              File file = new File("sample.txt");            //Instantiating Tika facade class      Tika tika = new Tika();      String filecontent = tika.parseToString(file);      System.out.println("Extracted Content: " + filecontent);   } }

将上面的代码保存为TikaExtraction.java并从命令提示符运行它 :

javac TikaExtraction.java java TikaExtraction

以下是内容sample.txt.

Hi students welcome to IT屋

它给你以下输出 :

Extracted Content: Hi students welcome to IT屋

使用解析器接口进行内容提取

Tika的解析器包提供了几个接口和类,使用它们可以解析文本文档.下面给出了 org.apache.tika.parser 包的框图.

Parser接口

有几个可用的解析器类,例如pdf解析器,Mp3Passer,OfficeParser等,可以单独解析各个文档.所有这些类都实现了解析器接口.

CompositeParser

给定的图表显示了Tika的通用解析器类: CompositeParser AutoDetectParser .由于CompositeParser类遵循复合设计模式,因此您可以将一组解析器实例用作单个解析器. CompositeParser类还允许访问实现解析器接口的所有类.

AutoDetectParser

这是CompositeParser的子类,它提供自动类型检测.使用此功能,AutoDetectParser使用复合方法自动将传入的文档发送到适当的解析器类.

parse()方法

与parseToString一起使用(),您还可以使用解析器接口的parse()方法.这种方法的原型如下所示.

  parse( InputStream 流, ContentHandler 处理程序,元数据元数据, ParseContext  context)

下表列出了它接受的四个对象参数.

Sr.No.对象&描述
1

InputStream流

任何包含文件内容的Inputstream对象

2

ContentHandler处理程序

Tika将文档作为XHTML内容传递给此处理程序,然后使用SAX API处理文档.它提供了对文档中内容的有效后处理.

3

元数据元数据

元数据对象既用作源又用作文档元数据的目标.

4

ParseContext上下文

此对象用于客户端应用程序要自定义解析过程的情况.

示例

以下是显示如何使用parse()方法的示例.

步骤1 :

使用解析()解析器接口的方法,实例化为此接口提供实现的任何类.

有各自的解析器类,如PDFParser,OfficeParser,XMLParser等.您可以使用任何这些单独的文档解析器.或者,您可以使用在内部使用所有解析器类的CompositeParser或AutoDetectParser,并使用合适的解析器提取文档的内容.

Parser parser = new AutoDetectParser();   (or)Parser parser = new CompositeParser();     (or)        object of any individual parsers given in Tika Library

步骤2 :

创建一个处理程序类对象.下面给出了三个内容处理程序 :

Sr.不.Class&描述
1

BodyContentHandler

此类选取XHTML输出的正文部分,并将该内容写入输出编写器或输出流.然后它将XHTML内容重定向到另一个内容处理程序实例.

2

LinkContentHandler

此类检测并选择所有H-Ref标签XHTML文档并转发那些使用网络爬虫等工具.

3

TeeContentHandler

此类有助于使用多个工具同时.

由于我们的目标是从文档中提取文本内容,实例化BodyContentHandler,如下所示 :

BodyContentHandler handler = new BodyContentHandler();

第3步 :

创建元数据对象,如下所示 :

BodyContentHandler handler = new BodyContentHandler( );

第4步 :

创建任何输入流对象,并传递应该提取到它的文件.

FileInputstream

通过将文件路径作为参数传递来实例化文件对象,并将此对象传递给FileInputStream类构造函数.

注意 : 传递给文件对象的路径不应包含空格.

这些输入流类的问题在于它们不支持随机访问读取,这是有效处理某些文件格式所必需的.要解决此问题,Tika提供TikaInputStream.

File  file = new File(filepath)FileInputStream inputstream = new FileInputStream(file);   (or)InputStream stream = TikaInputStream.get(new File(filename));

第5步 :

创建一个解析上下文对象,如下所示 :

ParseContext context =new ParseContext();

第6步 :

实例化解析器对象,调用解析方法,并传递所需的所有对象,如下面的原型所示 :

parser.parse(inputstream, handler, metadata, context);

以下是使用解析器界面进行内容提取的程序 :

import java.io.File;import java.io.FileInputStream;import java.io.IOException;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.SAXException;public class ParserExtraction {   public static void main(final String[] args) throws IOException,SAXException, TikaException {      //Assume sample.txt is in your current directory      File file = new File("sample.txt");            //parse method parameters      Parser parser = new AutoDetectParser();      BodyContentHandler handler = new BodyContentHandler();      Metadata metadata = new Metadata();      FileInputStream inputstream = new FileInputStream(file);      ParseContext context = new ParseContext();            //parsing the file      parser.parse(inputstream, handler, metadata, context);      System.out.println("File content : " + Handler.toString());   }}

将上面的代码保存为ParserExtraction.java并从命令提示符运行它 :

 javac ParserExtraction.java  java ParserExtraction

以下是内容sample.txt

Hi students welcome to IT屋

如果你执行上述程序,它会给你以下输出 :

File content : Hi students welcome to IT屋