由于我们的业务系统中有大量的MHT格式的资料,需要对其建立索引,搜索很久了一直没有找到相关解析的类库,只好自己动手丰衣足食了。已实现内容的提取以及和lucene的整合,稍后会完善编码检测及其他内容的提取,做一个完整的parser出来。
- 文本内容提取: 首先提取html部分的内容,解码之后使用nekoHtml提取文本内容;
public class MhtDocHandler extends HtmDocHandler {
private DOMFragmentParser parser = new DOMFragmentParser();
public Document getDocument(InputStream is) throws DocumentHandlerException {
DocumentFragment node = new HTMLDocumentImpl().createDocumentFragment();
try {
String mhts = IOUtils.toString(is);
int a1 = mhts.indexOf("<HTML");
int a2 = mhts.indexOf("</HTML>");
String html = mhts.substring(a1, a2 + 8);
//在mht中文本按照QuotedPrintable格式编码
html = decodeQuotedPrintable(html, "UTF-8");
StringReader r = new StringReader(html);
parser.parse(new InputSource(r), node);
}
catch (Exception e) {
throw new DocumentHandlerException("Cannot parse MHT document: ", e);
}
Document doc = new Document();
StringBuffer sb = new StringBuffer();
getText(sb, node, "title");
String title = sb.toString().trim();
sb.setLength(0);
getText(sb, node, "body");
String text = sb.toString().trim();
if (!title.equals("")) {
doc.add(new Field(WikiDOC.DOC_TITLE, title,
Field.Store.YES, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
}
if (!text.equals("")) {
doc.add(new Field(WikiDOC.DOC_CONTENT, text,
Field.Store.COMPRESS, Field.Index.TOKENIZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
}
return doc;
}
public static String decodeQuotedPrintable(String str, String encoding) {
if (str == null) {
return null;
}
try {
//str = str.replaceAll("=\n", "");//??
byte[] bytes = str.getBytes("US-ASCII");
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
for (int i = 0; i < bytes.length; i++) {
int b = bytes[i];
if (b == '=') {
int u = Character.digit((char) bytes[++i], 16);
int l = Character.digit((char) bytes[++i], 16);
if (u == -1 || l == -1) {//??
continue;
}
buffer.write((char) ((u << 4) + l));
} else {
buffer.write(b);
}
}
return buffer.toString(encoding);
}
catch (Exception e) {
e.printStackTrace();
return str;
}
}
}
<!---->
分享到:
相关推荐
java对mht文件解析,并实现内容的抓取
该工具用于将较大的MHT格式的QQ记录转换成HTML文本内容和对应的图片附件,解决记录较大时无法打开的问题 将该工具与聊天记录放在同一级目录,并进入命令行调用,调用步骤如下: 第1步: QQMhtToHtml.exe getimg 会在img...
包含完整的工程,来源于其他论坛,经个人修改,直接运行即可,运行效率不是很高,基本功能可以实现
Delphi提取mht网页文件中的图片,是一个从网页文件中提取图片文件的小工具,所用到的控件在controls目录中,没有安装请自行安装解压。可批量提取出图片,提取过程中显示进度条,速度很快,不用为MHT中的图片无法保存...
java将mht转化为html程序,用于开发
保存硬盘上的Htm文件为Mht文件 保存硬盘上的Htm文件为Mht文件
使用说明: 该工具用于将较大的MHT格式的QQ记录转换成HTML文本内容和对应的图片附件,解决记录较大时无法打开的问题 将该工具与聊天记录放在同一级目录,并进入命令行调用,调用步骤如下: 第1步: QQMhtToHtml.exe 记录...
mht2html,可以将mht文件转换成html文件
我直接将全部节目封包成支持IE打开的mht格式文件,打开后即可点击节目观看,部分版本的浏览器会提示要求运行javascript,请点击运行即可!
mht文件是一种聚合网页文件,它可以包括整个网页的文字、图片及Flash等,特别好用。网页保存为html格式,要专门生成一个文件夹存放资源文件...保存为pdf文件,又容易丢失动态多媒体元素,如gif等,所以mht格式比较好。
mht大容量转换,Mht格式QQ聊天记录mht转Html格式 ,可查图片
将webbrowser(其实不用webbrowser只给一个网址也行)中的内容保存为mht(和浏览器的网页另存为功能一样)文件,同时支持页面全屏截图(就是不管页面多长多宽自动截整个页面)。 默认保存为tif格式(应CSDN一名网友...
解析网页另存为mht出现的乱码问题,比如乱码:=D4=DA=CF=DF=C1=AA=CF=B5
是一款不错的小工具。它能使你保存的mht格式的网页转换成html和file文件的格式。 谢谢支持!
Outlook Express Backup V6.5.121 汉化版(MHT文件打开支持).rar MHT文件打不开时,安装HA_OutlookExpressBackup_65_121_ViVAX.exe即可!!!!! 软件介绍: Outlook Express Backup 是专为Outlook Express所设计的...
HTML文本转换成MHT单一格式的文件,可以存储本地和网上图片
VS之mht文件显示。博客地址:http://blog.csdn.net/bingdianlanxin,有问题欢迎留言!
matlab工具箱,两本书的光盘m文件和mht文件,一个英文一个中文
真正的根据url地址生成mht文件代码,是我根据网上的例子整理而来的,已经在项目中使用,给评价吧,呵呵
精简xp的MHT格式支持组件,MHT是MIME HTML的缩写,是一种用来保存HTML文件的格式,不能打开的下载后安装下。