[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
很高兴讨论
Global site tag (gtag.js) - Google Analytics