Apache Tika 实现Pdf、docx、xml等文件内容提取

什么是Apache Tika?

  • Apache Tika是一个用于从各种文件格式中检索文档类型和内容的库。
  • 在内部,Tika使用现有的各种文档解析器和文档类型检测技术来检测和提取数据。
  • 使用Tika,可以开发通用类型检测器和内容提取器,以在一定程度上提取结构化文本以及来自不同类型文档的元数据,例如电子表格,文本文档,图像,PDF甚至多媒体输入格式。
  • Tika提供了一个通用的API来解析不同的文件格式。 它为每种文档类型使用现有的专用解析器库。

支持得格式

文件格式

包库

蒂卡班

XML

org.apache.tika.parser.xml

XMLParser

HTML

org.apache.tika.parser.html它使用了Tagsoup Library

HtmlParser

MS-Office复合文档Ole2到2007年ooxml 2007年起

org.apache.tika.parser.microsoft

org.apache.tika.parser.microsoft.ooxml,它使用Apache Poi库

OfficeParser(OLE2)

OOXMLParser(ooxml)

OpenDocument格式openoffice

org.apache.tika.parser.odf

OpenOfficeParser

便携式文件格式(PDF)

org.apache.tika.parser.pdf和这个包使用Apache PdfBox库

PDFParser

电子出版物格式(数字图书)

org.apache.tika.parser.epub

EpubParser

富文本格式

org.apache.tika.parser.rtf

RTFParser

压缩和包装格式

org.apache.tika.parser.pkg和这个包使用Common压缩库

PackageParser和CompressorParser及其子类

文字格式

org.apache.tika.parser.txt

TXTParser

Feed和联合格式

org.apache.tika.parser.feed

FeedParser

音频格式

org.apache.tika.parser.audio和org.apache.tika.parser.mp3

AudioParser MidiParser Mp3-适用于mp3parser

Imageparsers

org.apache.tika.parser.jpeg

JpegParser-用于jpeg图像

Videoformats

org.apache.tika.parser.mp4和org.apache.tika.parser.video这个解析器在内部使用简单算法来解析flash视频格式

Mp4parser FlvParser

java类文件和jar文件

org.apache.tika.parser.asm

ClassParser CompressorParser

Mobxformat(电子邮件)

org.apache.tika.parser.mbox

MobXParser

Cad格式

org.apache.tika.parser.dwg

DWGParser

FontFormats

org.apache.tika.parser.font

TrueTypeParser

可执行程序和库

org.apache.tika.parser.executable

ExecutableParser

解析器

public interface Parser extends Serializable {
    Set<MediaType> getSupportedTypes(ParseContext var1);

    void parse(InputStream var1, ContentHandler var2, Metadata var3, ParseContext var4) throws IOException, SAXException, TikaException;
}

接口说明

参数

说明

InputStream

待解析的文档,以字节流形式传入,可以避免tika占用太多内存

ContentHandler

内容处理器,用来收集结果,Tika会将解析结果包装成XHTML SAX event进行分发,通过ContentHandler处理这些event就可以得到文本内容和其他有用的信息

Metadata

元数据,既是输入也是输出,可以将文件名或者可能的文件类型传入,tika解析时可以根据这些信息判断文件类型,再调用相应的解析器进行处理;另外,tika也会将一些额外的信息保存到Metadata中,如文件修改日期,作者,编辑工具等

ParseContext

解析上下文,用来控制解析过程,比如是否提取Office文档里面的宏等

tika的解析类的相关接口和类的UML模型

SpringBoot集成简单使用

添加依赖

        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-parsers-standard-package</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version> <!-- 请根据需要选择合适的版本 -->
        </dependency>

简单使用

public class TikiService {

    public static void main(String[] args) throws Exception {
        //创建解析器--在不确定文档类型时候可以选择使用AutoDetectParser可以自动检测一个最合适的解析器
        //如果确定可以使用确定的一个
        //PDFParser pdfParser = new PDFParser();
        //XMLParser xmlParser = new XMLParser();
        //OfficeParser officeParser = new OfficeParser();
        //........................
        Parser parser = new AutoDetectParser();
        //用于捕获文档提取的文本内容。-1 参数表示使用无限缓冲区,解析到的内容通过此hander获取
        BodyContentHandler bodyContentHandler = new BodyContentHandler(-1);
        //元数据对象,它在解析器中传递元数据属性---可以获取文档属性
        Metadata metadata = new Metadata();
        //带有上下文相关信息的ParseContext实例,用于自定义解析过程。
        ParseContext parseContext = new ParseContext();
        
        File file = new File("C:\\Users\\cc\\study\\12.docx");
        FileInputStream fileInputStream = new FileInputStream(file);
        parser.parse(fileInputStream,bodyContentHandler,metadata,parseContext);
        //获取文本
        System.out.println(bodyContentHandler.toString());
        //元数据信息
        String[] names = metadata.names();
        for (String name : names) {
            System.out.println(name);
        }
    }

}

支持解析模块

您可以使用以下Java代码使用TikaPDF文件转换为图像文件: ``` import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; 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.pdf.PDFParserConfig; import org.apache.tika.sax.BodyContentHandler; import org.apache.tika.sax.ToXMLContentHandler; import org.apache.tika.sax.ToXMLContentHandler.XHTML; import org.apache.tika.sax.XHTMLContentHandler; import org.apache.tika.sax.image.ImageContentHandler; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; public class TikaPDFtoImageConverter { public static void main(String[] args) throws Exception { File pdfFile = new File("input.pdf"); File outputFile = new File("output.png"); int pageNumber = 1; String imageFormat = "png"; convertPDFtoImage(pdfFile, outputFile, pageNumber, imageFormat); } public static void convertPDFtoImage(File pdfFile, File outputFile, int pageNumber, String imageFormat) throws Exception { InputStream inputStream = null; OutputStream outputStream = null; try { inputStream = TikaPDFtoImageConverter.class.getResourceAsStream(pdfFile.getName()); outputStream = new FileOutputStream(outputFile); AutoDetectParser parser = new AutoDetectParser(); PDFParserConfig pdfConfig = new PDFParserConfig(); pdfConfig.setExtractInlineImages(true); ParseContext parseContext = new ParseContext(); parseContext.set(PDFParserConfig.class, pdfConfig); ContentHandler contentHandler = new ImageContentHandler(outputStream); Metadata metadata = new Metadata(); parser.parse(inputStream, contentHandler, metadata, parseContext); } catch (Exception e) { e.printStackTrace(); throw e; } finally { if (inputStream != null) { try { inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } if (outputStream != null) { try { outputStream.close(); } catch (Exception e) { e.printStackTrace(); } } } } } ``` 该代码使用Tika解析器和ImageContentHandler将PDF文件转换为图像文件。您可以指定转换的页面号和图像格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值