python解析mht文件_实现MHT文件格式的解析和内容抽取
由于我们的业务系统中有大量的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文件格式的解析和内容抽取相关推荐
- java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...
网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...
- java解析xml文件的几种方式(DOM解析)
好久不用的东西,今天居然被面试官问到了.那既然这样,我们就一起回顾下java解析xml文件的几种方式吧. DOM解析 dom解析所需依赖是我们jdk自带的,所以只需要使用jdk为我们提供的接口即可上手 ...
- python读取pdf文件_深入学习python解析并读取PDF文件内容的方法
这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...
- python解析sql文件_如何从Python中解析sql文件?
是否有任何方法可以从Python中执行.SQL文件中的某些SQL命令,而不是文件中的所有SQL命令?假设我有以下.sql文件:DROP TABLE IF EXISTS `tableA`; CREATE ...
- python分析pcap文件_利用Python库Scapy解析pcap文件的方法
每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢? pip安装scapy,然后解析pcap: import scapy fro ...
- python 解析pb文件_利用Python解析json文件
写在前面 在金融风控领域,我们经常会使用到json格式的数据,例如运营商数据.第三方数据等.而这些数据往往不能直接作为结构化数据进行分析和建模.本文将介绍一种简单的.可复用性高的基于pandas的方法 ...
- python生成wps文件_使用Python操作XLS文件(wps中叫et)
一旦TE需要* *信息的列表,我导出一个txt文件与python和扔给他们,但是他们很不开心,哈哈,因为他们想要将数以百计的数据放到xls文件列表输出,工作数量太大,所以我问我出口成xls文件然后给他 ...
- python操作xls文件_【转】使用Python操作XLS文件
我在网上找了下,发现至少有两种方法,第一种是直接操作excle的com库,当然python自带的lib里面已经给我们封装好了实现,直接使用就可以 了,win32com.client,这种方法甚至可以直 ...
- python如何调用文件_如何调用另一个python文件中的代码
原博文 2017-07-10 15:56 − 无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了"hello world"),通常情况下,我们都需要在一个文件中调用另 ...
- 如何用python查看pyc文件_如何理解.pyc文件内容
.pyc文件包含一些元数据和一个^{}edcode对象:加载code对象并反汇编使用:import dis, marshal, sys # Header size changed in 3.3. It ...
最新文章
- 推荐系统笔记:无任何限制的矩阵分解
- Java常见的乱码解决方式
- network packet
- javafx有布局管理器吗_JavaFX技巧17:带有AnchorPane的动画工作台布局
- 什么是网络协议转换器?
- C#基础温习(10):C#实现托盘功能
- com scripting读书笔记
- 给linux默认mysql设置root密码
- VB6源代码收藏页面
- AFDX(ARINC664)的网络协议——IP层
- Linux下 eclipse下载
- 用后台开发的逻辑理念学习VUE
- Python判断坐标点在五环线以内
- 第14课:Spark 分布式模型训练及调优(实战)
- BZOJ1022:[SHOI2008]小约翰的游戏John(博弈论)
- My深度学习的总结记录
- Android JSONObject把URL转义了
- MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?
- 醋不只是能杀菌 食醋的25种生活妙用
- excel html 查询,html 连接 excel表格数据库数据-利用EXCEL表格为数据库制作查询网页...