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 包的框图.
有几个可用的解析器类,例如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屋