[lucene] lucene3.0对各种文档的解析问题
kexzcle
2010-01-14
请问哪位仁兄有对各种文档格式(如:pdf,word,txt,html,excel,ppt等)
解析创建索引的经验!。。 有实例代码更好。 我现在对PDF解析和ppt、html解析创建索引都有点问题 这里回复就行 QQ也可以 希望一起与大家探讨lucene3.0 QQ:15036273 有lucene 的群 大家给我介绍个呀 谢谢! |
|
TonyLian
2010-01-14
需要一些其他包
比如 Apache-PDFBOX ,用来从PDF中提取String public String getAllText(String fileName) { // 是否排序 boolean sort = false; // 输入文本文件名称 String text = ""; // 开始提取页数 int startPage = 1; // 结束提取页数 int endPage = Integer.MAX_VALUE; // 内存中存储的PDF Document PDDocument document = null; try { // 从文件系统装载 document = PDDocument.load(fileName); // PDFTextStripper来提取文本 PDFTextStripper stripper = new PDFTextStripper(); // 设置是否排序 stripper.setSortByPosition(sort); // 设置起始页 stripper.setStartPage(startPage); // 设置结束页 stripper.setEndPage(endPage); text = stripper.getText(document); } catch (IOException e) { } finally { if (document != null) { // 关闭PDF Document try { document.close(); } catch (IOException e) { } } } return text; } |
|
TonyLian
2010-01-14
我是做了一个“转换器”的接口(我用的是抽象类),
然后各种格式的文件分别实现(继承)这个接口(抽象类) public abstract class AbstractConverter { /** * 取得文件内容的有效文本 * 比如XML、HTML文件中的标识符就不属于有效文本 * @param fileName * @return 有效文本 */ public String getEquivalentText(String fileName){ throw new UnsupportedOperationException(String.valueOf(this)); } /** * 取得文件内容的所有文本 * @param fileName * @return 所有文本 */ public String getAllText(String fileName){ throw new UnsupportedOperationException(String.valueOf(this)); } /** * 取得文件的有效文本标题 * 缺省的方法是用文件名作Title,请具体类重载此方法 * @param fileName * @return 标题 */ public String getTitle(String fileName){ // 缺省,先用文件名作Title int startPoint = fileName.lastIndexOf(File.separator) + 1; int endPoint = fileName.lastIndexOf("."); if (startPoint < 0){ startPoint = 0; } if (endPoint < 0){ return fileName.substring(startPoint); }else{ return fileName.substring(startPoint, endPoint); } } } 主程序里: // 转换为TXT AbstractConverter converter = cFactory.getConverter(upFile.getFileType()); String fullPath = SystemProperties.getUploadFilePath() + File.separator + upload.getServerPath() + upload.getFileNameServer(); |
|
TonyLian
2010-01-14
其中,工厂方法用于得到一个具体的“转换器”
public class ConverterFactory { public AbstractConverter getConverter(String fileType){ if (Constants.FIEL_TYPE_TXT.equals(fileType)){ return new TextConverter(); }else if(Constants.FIEL_TYPE_DOC.equals(fileType)){ return new WordConverter(); }else if(Constants.FIEL_TYPE_XLS.equals(fileType)){ return new ExcelConverter(); }else if(Constants.FIEL_TYPE_PPT.equals(fileType)){ return new PptConverter(); }else if(Constants.FIEL_TYPE_CSV.equals(fileType)){ return new CsvConverter(); }else if(Constants.FIEL_TYPE_PDF.equals(fileType)){ return new PdfConverter(); }else if(Constants.FIEL_TYPE_HTML.equals(fileType)){ return new HtmlConverter(); }else if(Constants.FIEL_TYPE_HTM.equals(fileType)){ return new HtmlConverter(); }else if(Constants.FIEL_TYPE_XML.equals(fileType)){ return new XmlConverter(); }else{ throw new IllegalArgumentException("Not support file type."); } } } |
|
TonyLian
2010-01-14
这里直接贴代码,都没有缩进了,你自己粘出去,Format吧
|
|
kexzcle
2010-01-14
TonyLian 写道 这里直接贴代码,都没有缩进了,你自己粘出去,Format吧
谢谢 才看到帖子。 我先去研究下! 哈!有问题的话还地麻烦您啊! |
|
kexzcle
2010-01-14
TonyLian 写道 这里直接贴代码,都没有缩进了,你自己粘出去,Format吧
你的QQ是多少呀, 现在想和你交流下 方便吗!!! |
|
TonyLian
2010-01-14
没QQ,MSN行吗?
|
|
kexzcle
2010-01-14
TonyLian 写道 没QQ,MSN行吗?
行啊,你现在给我电话 我都非常高兴 立马打过去了!。。哈哈! |
|
TonyLian
2010-01-14
很高兴讨论
|