由于我们的业务系统中有大量的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("

int a2 = mhts.indexOf("");

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;

}

}

}

分享到:

2008-03-29 01:56

浏览 9837

论坛回复 / 浏览 (1 / 8480)

分类:非技术

评论

3 楼

xiaoll880214

2013-11-05

您好!利用你贴的decodeQuotedPrintable方法,解出来的mht文件内容还是乱码,请问你解决了么,分享下,谢谢!

2 楼

cllstudy

2013-01-25

您好,急需lucene对mht解析的parse,能发源代码给我吗?非常感谢!邮箱:cll_java@163.com.

1 楼

rainsf

2008-04-01

good job

python解析mht文件_实现MHT文件格式的解析和内容抽取相关推荐

  1. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  2. java解析xml文件的几种方式(DOM解析)

    好久不用的东西,今天居然被面试官问到了.那既然这样,我们就一起回顾下java解析xml文件的几种方式吧. DOM解析 dom解析所需依赖是我们jdk自带的,所以只需要使用jdk为我们提供的接口即可上手 ...

  3. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  4. python解析sql文件_如何从Python中解析sql文件?

    是否有任何方法可以从Python中执行.SQL文件中的某些SQL命令,而不是文件中的所有SQL命令?假设我有以下.sql文件:DROP TABLE IF EXISTS `tableA`; CREATE ...

  5. python分析pcap文件_利用Python库Scapy解析pcap文件的方法

    每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢? pip安装scapy,然后解析pcap: import scapy fro ...

  6. python 解析pb文件_利用Python解析json文件

    写在前面 在金融风控领域,我们经常会使用到json格式的数据,例如运营商数据.第三方数据等.而这些数据往往不能直接作为结构化数据进行分析和建模.本文将介绍一种简单的.可复用性高的基于pandas的方法 ...

  7. python生成wps文件_使用Python操作XLS文件(wps中叫et)

    一旦TE需要* *信息的列表,我导出一个txt文件与python和扔给他们,但是他们很不开心,哈哈,因为他们想要将数以百计的数据放到xls文件列表输出,工作数量太大,所以我问我出口成xls文件然后给他 ...

  8. python操作xls文件_【转】使用Python操作XLS文件

    我在网上找了下,发现至少有两种方法,第一种是直接操作excle的com库,当然python自带的lib里面已经给我们封装好了实现,直接使用就可以 了,win32com.client,这种方法甚至可以直 ...

  9. python如何调用文件_如何调用另一个python文件中的代码

    原博文 2017-07-10 15:56 − 无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了"hello world"),通常情况下,我们都需要在一个文件中调用另 ...

  10. 如何用python查看pyc文件_如何理解.pyc文件内容

    .pyc文件包含一些元数据和一个^{}edcode对象:加载code对象并反汇编使用:import dis, marshal, sys # Header size changed in 3.3. It ...

最新文章

  1. 推荐系统笔记:无任何限制的矩阵分解
  2. Java常见的乱码解决方式
  3. network packet
  4. javafx有布局管理器吗_JavaFX技巧17:带有AnchorPane的动画工作台布局
  5. 什么是网络协议转换器?
  6. C#基础温习(10):C#实现托盘功能
  7. com scripting读书笔记
  8. 给linux默认mysql设置root密码
  9. VB6源代码收藏页面
  10. AFDX(ARINC664)的网络协议——IP层
  11. Linux下 eclipse下载
  12. 用后台开发的逻辑理念学习VUE
  13. Python判断坐标点在五环线以内
  14. 第14课:Spark 分布式模型训练及调优(实战)
  15. BZOJ1022:[SHOI2008]小约翰的游戏John(博弈论)
  16. My深度学习的总结记录
  17. Android JSONObject把URL转义了
  18. MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?
  19. 醋不只是能杀菌 食醋的25种生活妙用
  20. excel html 查询,html 连接 excel表格数据库数据-利用EXCEL表格为数据库制作查询网页...

热门文章

  1. 解决win10开启移动热点共享手机连上后无法上网的问题
  2. 2019厦门科技中学计算机特长,注意看!2019厦门市属学校特长生录取入围名单公布!...
  3. 两总体均值之差的推断:匹配样本
  4. 计算机win7启动不起来,详解电脑启动不了怎么办
  5. 同一个局域网内如何共享文件夹(含共享打印机操作方法)
  6. Chrome 浏览器关闭第三方Cookie会导致内嵌的哔哩哔哩视频无法加载
  7. PHP生成短链接的方法
  8. 流量计算机常见故障,流量计40个常见故障、处理方法!多数人看完就收藏
  9. 安全学习木马查杀打卡第二十一天
  10. 关于网络存储技术和存储的协议