Java lucene 技术(5):索引PDF文档
通过本章的学习,你将会掌握一种对PDF文档建立索引的方式。从上一章内容,我们知道Lucene有能力对非纯文本格式的文档建立索引,这需要通过一定的解析工具将各种内容从非纯文本格式的文档中解析出来。同样,对PDF,也需要这样的工具。本章程序使用的是名为PDFBox的开源库,它的API提供了很好的对PDF文档解析的作用。
程序5.1提供了PDFBox的API使用方法。
public class SimplePdfHandler {
COSDocument cosDoc = null;
PDFParser parser = null;
public static void main(String args[]) throws FileNotFoundException, IOException{
PDFParser parser = new PDFParser(new FileInputStream(new File("D:/Words.pdf")));
parser.parse();
COSDocument cosdoc = parser.getDocument();
PDFTextStripper stripper = new PDFTextStripper();
String docText = stripper.getText(new PDDocument(cosdoc));
System.out.println("docText:"+docText);
PDDocument pdDoc = new PDDocument(cosdoc);
PDDocumentInformation docInfo = pdDoc.getDocumentInformation();
String author = docInfo.getAuthor();
String title = docInfo.getTitle();
String summary = docInfo.getSubject();
System.out.println("author: "+author);
System.out.println("title: "+title);
System.out.println("summary: "+summary);
}
}
读者只需要将PDFBox的jar包导入项目之中,就可以运行它了。既然我们已经得到了PDF文档的文本内容,标题,作者,主题,接下来,我们就可以分别对它们建立索引了。
程序5.2在5.1的基础上添加了索引功能。
public class SimplePdfHandler {
COSDocument cosDoc = null;
PDFParser parser = null;
Document doc = null;
public Document getDoc(String doctext, String author, String title, String summary){
doc = new Document();
if((doctext!=null)&&(("").equals(doctext)))
doc.add(Field.Text("body", doctext));
if ((author != null) && (!author.equals("")))
doc.add(Field.Text("author", author));
if ((title != null) && (!title.equals("")))
doc.add(Field.Text("title", title));
if ((summary != null) && (!summary.equals("")))
doc.add(Field.Text("summary", summary));
return doc;
}
public static void main(String args[]) throws FileNotFoundException, IOException{
PDFParser parser = new PDFParser(new FileInputStream(new File("D:/Words.pdf")));
parser.parse();
COSDocument cosdoc = parser.getDocument();
PDFTextStripper stripper = new PDFTextStripper();
String docText = stripper.getText(new PDDocument(cosdoc));
System.out.println("docText:"+docText);
PDDocument pdDoc = new PDDocument(cosdoc);
PDDocumentInformation docInfo = pdDoc.getDocumentInformation();
String author = docInfo.getAuthor();
String title = docInfo.getTitle();
String summary = docInfo.getSubject();
System.out.println("author: "+author);
System.out.println("title: "+title);
System.out.println("summary: "+summary);
SimplePdfHandler pdfHandler = new SimplePdfHandler();
Document doc = pdfHandler.getDoc(docText, author, title, summary);
System.out.println(doc);
}
}
程序中方法getDoc实现了建立索引文档过程,因为某些PDF文档有可能存在信息不全的情况,如没有主题信息,没有作者信息,所以,应当进行空值和NULL值的判断。好了,一个完整的索引PDF文档程序完成了。希望能对有需求的读者有所帮助。