Lucene学习之Tika提取文本信息
目前较新版的Tika(我用的是0.9)都是用Maven构建的。所以学习使用Tika最好的就是直接用Maven了,但是以我的经验,要想完整的了解Maven,并且能够编译好项目,把该依赖的包什么的全部导入,估计要花天把时间。可能有些人Maven都没听过(两个月前的我就是),那几更要花点精力了。
个人建议对Maven不熟悉的还是直接引用jar包。
首先搭建环境:
方式一:通过Maven,使用Eclipse会更方便
方式二:直接引用jar包,官网上有tika-app-0.9.jar 可以直接导入到classpath中或者导入到Eclipse工程中
然后给个例子就明白了
例子中的main函数是现实当前tika中可以解析那些格式的文件,也就是包含那些解析器parser。第二个函数给出了如何解析某种格式文件的过程。
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Iterator; import java.util.Set; import org.apache.tika.config.TikaConfig; import org.apache.tika.metadata.Metadata; import org.apache.tika.mime.MediaType; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser; import org.apache.tika.parser.pdf.PDFParser; import org.apache.tika.sax.BodyContentHandler; import org.xml.sax.ContentHandler; public class ShowParser { public static void main(String[] args) { TikaConfig config = TikaConfig.getDefaultConfig(); Set<MediaType> set= config.getParsers().keySet(); Iterator<MediaType> it = set.iterator(); System.out.println("Mime type parsers:"); while(it.hasNext()) { System.out.println(" " + it.next()); } } public static void testTiki() throws Exception { String PATH = "d:\\tempfile\\Maximum Entropy Markov Models for Information Extraction and Segmentation.pdf"; String OUTPATH = PATH + ".txt"; // Parser parser = new OOXMLParser();//解析微软格式文档 // Parser parser = new HtmlParser();//解析html文档 Parser parser = new PDFParser();//解析PDF文档 InputStream iStream = new BufferedInputStream(new FileInputStream(new File(PATH)));//定义输入流 // OutputStream oStream = new BufferedOutputStream(new FileOutputStream(new File(OUTPATH)));//定义输出流 //下面定义内容处理器 //ContentHandler iHandler = new BodyContentHandler(oStream); //ContentHandler iHandler = new BodyContentHandler(System.out); ContentHandler iHandler = new BodyContentHandler();
Metadata meta = new Metadata(); meta.add(Metadata.CONTENT_ENCODING, "utf-8"); parser.parse(iStream, iHandler, meta, new ParseContext());//解析 //输出解析结果,如果采用输出流的方式就直接在输出流中获得解析结果 System.out.println(iHandler.toString()); } }