
com.centit.search.utils.TikaTextExtractor Maven / Gradle / Ivy
package com.centit.search.utils;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* 将业务对象解析成文本
* 不支持对象循环引用,请手工将循环引用对象放入excludes属性中,否则将引虚拟机栈溢出异常
*/
@SuppressWarnings("unused")
public abstract class TikaTextExtractor {
private static Logger logger = LoggerFactory.getLogger(TikaTextExtractor.class);
public static String extractInputStreamText(InputStream inputStream) throws IOException, TikaException, SAXException {
Parser tikaParser = new AutoDetectParser();//AutoDetectParser根据不同的二进制文件的特殊格式 (比如说Magic Code),来寻找适合的Parser。
ContentHandler handler = new BodyContentHandler(500*1024*1024);
Metadata metadata = new Metadata();
ParseContext parseContext = new ParseContext();
parseContext.set(Parser.class, tikaParser);
/*/
* 参数的含义为:
* inputStream:文件输入流
* ContentHandler:所有解析出来的内容会放到它的子类BodyContentHandler中
* Metadata :Tika解析文档时会生成的一组说明数据
* ParseContext:用来存储需要填入的参数,最少需要设置tikaParser本身
* **/
tikaParser.parse(inputStream, handler, metadata, parseContext);
System.out.println(handler.toString());
System.out.println("---------------------------");
for(String name :metadata.names()){
System.out.println(name+"-->"+metadata.get(name));
}
return handler.toString();
}
public static String extractFileText(File file) throws IOException, TikaException, SAXException {
InputStream is = new FileInputStream(file);
return extractInputStreamText(is);
}
public static String extractFileText(String filePath) throws IOException, TikaException, SAXException {
File file = new File(filePath);
InputStream is = new FileInputStream(file);
return extractInputStreamText(is);
}
public static String extractUrlText(String urlPath) throws IOException, TikaException, SAXException {
URL url = new URL(urlPath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();//利用HttpURLConnection对象,我们可以从网络中获取网页数据.
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
return extractInputStreamText(is);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy