标签:人工智能、AI、BP网络、html净化、分类、正文抽取
一、 简介
本文是根据alexjc的<The Easy Way to Extract Useful Text from Arbitrary HTML>一文进行实验的结果。原文见:
http://ai-depot.com/articles/the-easy-way-to-extract-useful-text-from-arbitrary-html/
——alexjc原文
http://blog.csdn.net/lanphaday/archive/2007/08/13/1741185.aspx
——恋花蝶翻译的中英对照版本
该文章主要内容是讲述如何利用正文相对于其他文本,正文文本与生成该正文所需的html字节码的比值较大的规律,利用神经网络识别出正文过滤过滤广告的效果。主要设计如下:
1. 解析HTML代码并记下处理的字节数。
2. 以行或段的形式保存解析输出的文本。
3. 统计每一行文本相应的HTML代码的字节数
4. 通过计算文本相对于字节数的比率来获取文本密度
5. 最后用神经网络来决定这一行是不是正文的一部分。
二、 设计方案
本实验相对原本alexjc设计方案有几点修改:
1. 用RPROP(弹性BP网络)代替原文的感知器;
2. 由于原文并没有把文本长度、html字节长度做归一化,所以不采用原始文本长度、html字节长度作为特征值。相对的,对归一化后的文本长度、html字节长度,以及前向后向N行等各种组合进行试验。
3. 试验文本为任意在网上选取的10个网页,见附件。
4. 原文并没有提及,如何定义一行文本是否正文,所以这里定义了几个正文类型:
a) 内容型正文,特征是有长的连续文字段,定义这些文字段为正文;
b) 论坛型,有短的不连续的文字段,定义这些文字段为正文;
c) 论坛帖子列表型(部分试验将会对这类型进行训练查看效果,对于论坛帖子列表是否属于正文这里不做讨论……),帖子标题为正文;
d) 首页型,定义为没有正文(厄,谁能说出,新浪首页哪些是正文?)
实验环境:
1. 语言:JAVA,JRE1.5
2. 操作系统:windows xp
三、 实验过程:
1. 设计实现一个三层RPROP网络(令人惊讶的是,居然在这个领域没有人写一个开源的组件,apache等的开源巨头们都对neural network不感兴趣么?)。
/*
*初始化RPROP对象
*
*本函数用于创建训练前的RPROP对象
*参数:
* int in_num 输入层个数;
* int hidden_unit_num 隐含层节点个数
* int out_num 输出层个数
*
*/
public RPROP(int in_num, int hidden_unit_num, int out_num)
/*
*初始化RPROP对象
*
*本函数用于创建训练后的RPROP对象
*参数:
* int in_num 输入层个数;
* int hidden_unit_num 隐含层节点个数
* int out_num 输出层个数
* double[][] w1 隐含层权重
* double[][] w2 输出层权重
* double[] b1 隐含层偏离值
* double[] b2 输出层偏离值
*/
public RPROP(int in_num, int hidden_unit_num, int out_num, double[][] w1, double[][] w2, double[] b1, double[] b2)
/*
*计算输出结果
*
*参数:
* double[] p 输入参数
*返回值:
* double[] 输出结果
*/
public double[] output(double[] p)
/*
*训练
*
*参数:
* double[][] p
* 训练样本集
* double[][][] t
* 期望结果集, t[i][j][0] 期望结果, t[i][j][1]误差放大系数
* double goal
* 目标误差,注意,本网络用的是“方差”作为误差判断条件
* int epochs
* 训练最大次数
*/
public void train(double[][] p, double[][][] t, double goal,int epochs)
对于这个实现,有兴趣的朋友在本文最后下载附件。
2. 选取特征值
在实验中,笔者尝试了各种特征值组合:
1) 文本密度,文本长度,html字节码长度,前后各一行的同样数值;(原文设定)
2) 文本密度,文本长度倒数(归一化),前后各两行的同样数值;
3) 文本所在的html的链接密度(全文文本长度/总链接数,用于加强判断文本类型),文本密度,文本长度/5000(归一化,大于1的当1处理,下文简称为文本长度2),前后两行相同的数值;
4) 文本所在的html的链接密度,文本密度,文本长度2,前后两行相同的数值;
5) 文本所在的html的链接密度,文本密度,文本长度2,前后一行相同的数值;
6) 文本所在的html的链接密度,文本密度,文本长度2,前一行是否正文;
并规定,网络输出结果0为非正文,1为正文。
在训练过程中,发现训练过的网络命中率大部分落在0值部分,这是由于论坛这种短文段类型的网页会导致0值过多,训练时对0值过拟合。为了避免这一点,对某一篇网页的某一行的误差乘以该网页的0值与1值数量的比值。
3. 训练集获取
见附件。这是在笔者常浏览的网页中任意抽取的10个网页。对于期望输出的定义见上文。
四、实验结果
1. 1~5的实验,任意抽取部分样本集作为训练集,对于训练集拟合的很好,但对于测试集的表现却非常糟糕(请原谅笔者并没有记录实验数据);
这部分结果表明,以文本密度作为判断是否正文的特征值是有问题的。观察样本集的数据可以发现,即使是内容型的大段文字,也有可能文本密度很低——为了让网页变得更漂亮美观,现在有很多网站都对文字内容加了大段大段修饰用html代码……
鉴于这一点,笔者最终放弃文本密度作为特征值。而考虑到广告都是带链接的文本,相对的正文连接数则比较少,所以笔者认为,用文本长度/链接数 作为特征值或许会是一个更好的选择。
2. 6的实验,表现意外的非常的好(好到差点让笔者以为终于找到完美的解决方案……)
确实,即使是在测试集部分的表现也惊人好,但实际上有一个问题:每一行的计算受上一行计算的结果影响。测试集是事先定义每一行的上一行的结果,但在实际使用时,上一行的结果是实时计算出来的,所以就会出现,在某一行出错,导致后面的结果全部出错的情况……
至此,假如仍然坚持神经网络的解决方案,或许,采用:
文本长度,文本长度链接数,上一行的结果 做特征值, 采用三个弱分类器的ada-boost组合分类或许会是一个好的选择。
除此之外,实际上对正文的定义对结果也是有很大的影响。实际上,假如能根据数据化的东西定义某一个类别,那么对于该类别的划分,或许其实已经是可预知的,不如直接设计阈值处理。
笔者的实验则到此为止,并放弃了神经网络这个解决方案——直接采用这些特征值进行阈值判断,并对一些特殊部分设定过滤规则,这似乎比神经网络的表现来的简单、有效……
如果有哪位朋友感兴趣,并用ada-boost进行实验,笔者将非常期待这位朋友来交流下心得:)
附件:
neralNetwork.rar 源代码
res.rar 训练集
关于html文本抽取部分,这里用的是HtmlParser,这里修改的代码就不贴出来了,有兴趣的朋友可以去:
http://htmlparser.sourceforge.net/
看看。
分享到:
相关推荐
全自动洗衣机PLC控制与智能交互系统:基于西门子S7-1200和TP700触摸屏程序的Z03实践(使用博途v15.1及IO表),题目二全自动洗衣机PLC控制西门子S7-1200和TP700触摸屏程序Z03,博途v15.1,带IO表 ,Z03全自动洗衣机; PLC控制; 西门子S7-1200; TP700触摸屏程序; 博途v15.1; IO表,全自动洗衣机PLC控制S7-1200与TP700触摸屏程序Z03(博途v15.1,带IO表)
617d773df6bb6cf9ae5ac5e95da7b096.part2
基于S7-200 PLC与组态王技术的分拣系统:大小球颜色、大小及材质的智能识别与控制,No.883 基于S7-200 PLC和组态王大小球颜色大小材质分拣 ,核心关键词:S7-200 PLC; 组态王; 大小球; 颜色; 大小; 材质; 分拣; 识别。,基于S7-200 PLC的组态王分拣系统:大小球颜色材质综合管理
基于距离调控的变频器加减速带参数子程序控制策略,根据距离控制变频器加减速带参数子程序。 可以根据设置的加速距离和减速距离输出变频器的输出频率。 ,核心关键词:距离控制;变频器;加减速带参数;子程序;输出频率。,基于距离控制的变频器加减速参数子程序
基于StyleGAN的草图到服装图像的生成方法.pdf
C#开发高效能3D点云可视化软件,支持CSV表格数据导入与渲染处理,使用C#语言开发的3D点云显示软件,以CSV表格格式读取 ,核心关键词:C#语言开发;3D点云显示软件;CSV表格格式读取;点云数据可视化。,C#开发的3D点云显示软件:CSV格式数据读取与展示
"基于机会约束规划理论的含可再生能源热电联供微网优化研究:考虑源荷不确定性的微网模型及其优化策略的复现与验证",考虑源荷不确定性的热电联考虑源荷不确定性的热电联供微网优化 复现《含可再生能源的热电联供型微网经济运行优化》,采用粒子群算法,采用机会约束规划理论出力源荷不确定性,采用概率方法来表达,目标函数代码完美复刻了文献中的目标函数和约束条件,约束部分采用清晰简明的等式和不等式部分,方便理解,采用罚函数的形式形成最终目标函数值。 本程序包括确定性模型和不确定性模型两部分程序代码,方便对照学习微网优化 ,核心关键词: 热电联供微网优化; 源荷不确定性; 粒子群算法; 机会约束规划理论; 概率方法; 目标函数; 约束条件; 确定性模型; 不确定性模型。,粒子群算法驱动的含源荷不确定性的热电联供微网优化程序
968a658a40c897eb4452d8718cf0f8e6.part2
B超技术:相控阵超声波的逐点与目标级聚焦策略——基于DAS算法与K-wave工具箱的应用研究,B超 算法 相控阵 超声波 逐点聚焦 目标级聚焦 DAS算法 K-wave工具箱 ,B超; 算法; 相控阵; 超声波; 逐点聚焦; 目标级聚焦; DAS算法; K-wave工具箱,"B超成像技术:相控阵超声波算法与DAS、K-wave工具箱的联合应用"
MATLAB仿真:Delta并联机器人的正逆运动学分析与Simulink及Simscape仿真研究,MATLAB仿真 delta并联机器人 simulink simscape仿真 正逆运动学 ,MATLAB仿真; delta并联机器人; Simulink; Simscape仿真; 正逆运动学,MATLAB仿真:Delta并联机器人正逆运动学分析的Simulink与Simscape应用
车辆路径智能优化算法:多维度策略与参数调整的物流配送研究,车辆路径智能算法包括如下: 1.遗传算法车辆路径优化 2.蚁群算法路径优化3.粒子群算法路径优化4.模拟 火算法路径优化 5.节约算法CW路径优化 6.人工鱼群路径优化。 节约算法车辆路径 遗传算法车辆路径,物流配送,带时间窗和载重量约束改进,vrp,cvrp ,vrptw物流配送,路径优化,车辆配送。 遗传算法路径优化,软时间窗,硬时间窗,客户满意度,物流选址,车辆路径,物流配送。 matlab完整代码,可修改坐标,需求和时间窗 和算法等相关参数。 ,核心关键词: 遗传算法车辆路径优化; 蚁群算法路径优化; 粒子群算法路径优化; 模拟退火算法路径优化; 节约算法CW路径优化; 人工鱼群路径优化; 物流配送; 车辆路径优化; 软时间窗; 硬时间窗; 客户满意度; 物流选址; MATLAB完整代码。,智能算法在车辆路径优化中的应用
matlab实现GA-BP时序预测完整程序+数据
基于特征的表面表达模型–体参数化模型转化方法.pdf
基于LSTM算法的换道轨迹预测:LC轨迹特征数据的MATLAB编码实现与解析,可用于LSTM道轨迹预测的LC轨迹特征数据 . MATLAB coding 道历史轨迹特征(i80,US101):横纵向速度,横纵向加速度,轨迹坐标,向左OR向右道标志,时间列,车辆id; ,LSTM; 轨迹特征数据; MATLAB coding; 换道历史轨迹; 横纵向速度; 横纵向加速度; 轨迹坐标; 车辆id; 车辆换道方向(向左OR向右); 时间列,LSTM换道轨迹预测:MATLAB代码与LC轨迹特征数据融合研究
基于OpenSees的梁柱节点建模与十字节点模拟分析:深入探讨JOINT2d与beamColumnJoint单元的应用,基于opensees梁柱节点建模 十字节点模拟 [1]采用JOINT2d节点单元或者element beamColumnJoint单元,采用Pinching4材料模型考虑核心区剪切行为和粘结滑移效应; 也可以使用hysteretic本构0长度单元模拟节点变形,2种代码均有。 [2]价格包括模型建模代码和1对1指导教学; [3]计算Pinching4材料的Membrane-2000小程序 梁端加载滞回代码 参考文献:基于OpenSees的装配式混凝土框架节点数值模拟方法研究-曹徐阳; ,核心关键词: OpenSees建模; 梁柱节点; JOINT2d节点单元; element beamColumnJoint单元; Pinching4材料模型; 核心区剪切行为; 粘结滑移效应; hysteretic本构0长度单元; 节点变形; 模型建模代码; 1对1指导教学; Membrane-2000小程序; 梁端加载滞回代码。,OpenSees梁柱节点建模:十字节点模拟与材料行为分析
中医院问诊系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
LabVIEW与PLC数据通信:深入解析与程序源码实例,labview和PLC数据通信 程序源码 ,Labview; PLC数据通信; 程序源码,LabView与PLC数据通信的程序源码示例
基于三菱PLC与组态王技术的自动化立体车库堆垛书架控制系统研究与应用第1100例实践,No.1100 基于三菱PLC和组态王组态自动化立体车库控制堆垛书架 ,三菱PLC; 组态王组态; 自动化立体车库; 控制; 堆垛书架,基于三菱PLC与组态王控制的立体车库堆垛书架自动化系统
2024薪酬最高的十大专业(2025.01.30)
移相全桥DSP数字控制开关电源开发板:基于TMS320F28034主控的完整设计与资料包,移相全桥DSP数字控制开关电源开发板 主控TMS320F28034,提供原理图,详细功率计算书,设计说明书,bom等资料。 ,移相全桥;DSP数字控制;TMS320F28034主控;原理图;功率计算书;设计说明书;BOM资料;开关电源开发板,高级移相全桥DSP电源开发板,TMS320F28034主控全解析