分享
分销 收藏 举报 申诉 / 18
播放页_导航下方通栏广告

类型HTMLParser抽取Web网页正文信息.doc

  • 上传人:二***
  • 文档编号:4764983
  • 上传时间:2024-10-12
  • 格式:DOC
  • 页数:18
  • 大小:310KB
  • 下载积分:5 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    HTMLParser 抽取 Web 网页 正文 信息
    资源描述:
    提取网页主题相关内容 一般在浏览Web上的网页时会发现两部分内容:一部分是网页的主题信息,另一部分则是与主题内容无关的导航条、广告信息、版权信息等内容,我们称之为“噪音”内容。通过提取主题信息可以减少一半浏览时间,提高用户获取信息的速度,从而增强Web的可用性。那么如何准确、有效的获取Web网页的主题信息呢?下面给出了一种解决方案。 一、 解析html HTMLParser是一个对现有的HTML进行分析的快速实时的解析器,首先从( http://HTMLP zip解压缩得htmlparser.jar,将htmlparser.jar添加到classpath中,并在程序中引入相应的HTMLParser包。类Parser是HTMLParser的入口,将HTML文本信息传给它,或者直接传递一个URL地址,如:Parser parser = new Parser(“”);初始化一个Parser实例parser后,紧接着就是对所传入的HTML内容进行解析,方法parser.extractAllNodesThatAre (XXXTag.class)将HTML内容中存在的所有的标签XXXTag给解析出来放到一个列表list中去,几乎HTML的标签都有一个对应的类,比如LinkTag、ImageTag、FormTag、TableTag等等,这些标签类都在org.htmlparser.tags包中。根据要处理不同的标签传入不同的类,这种做法可以很方便地处理其他类型的标签。返回的列表中每个元素都是传入类的一个实例,通过这个实例可以访问到当前这个标签的起始位置、结束标签的位置以及包含在标签中的文本信息,同时也可以访问其父标签以及所有的子标签等等,同时可以通过toHtml方法来对标签中包含的HTML信息进行清洗,HTMLParser会自动把一些没有关闭的标签加上,这样所生成的字符串中就包含着完整的格式控制信息,在页面上显示这样的信息也不会破坏版面布局,达到了预期的效果。 例如:有如下不规范的html文件(有未关闭标签) 通过节点的toHtml()方法补全标签 补全了没有关闭的标签 本系统采用先读取html文件并将其转换为字符串htmlString: String htmlString = readHtmlFile(file); 然后将其作为Parser对象的构造参数: Parser parser = Parser.createParser(htmlString,”gb2312”); 然后结合过滤器过滤出需要的标签节点。 二、 过滤器 一般主题信息包含在下列标签中:<table>、<tr>、<td>、<p>、<div>等。所以如何过滤出这些节点标签呢?htmlparser提供了很好的支持: NodeFilter[] filters = new NodeFilters[3]; filters[0] = new NodeClassFilter(TableTag.class); filters[1] = new NodeClassFilter(ParagraphTag.class); filters[2] = new NodeClassFilter(Div.class); NodeFilter filter = new OrFilter(filters); NodeList list = parser.extractAllNodesThatMatch(filter); OrFilter是结合几种过滤条件的‘或’过滤器。通过以上代码就可以过滤得到所有的<table>、<p>和<div>节点。 例如:下面html文件经过以上过滤器过滤后就只得到所需的节点了 Html文件经过滤器过滤 经过滤器过滤后得到的结果 三、 信息抽取、 1、<p>、<div>节点的内容相关性判定: 我们称包含文本信息的区域为内容块,本系统的核心是内容块的主题相关性判断。本系统所涉及的内容块节点为<table>、<div>、<p>。主题相关性判定(当然本系统认为<div>标签中如果还含其他标签,或者<P>标签中含有<div>,<script>或内嵌<p>标签,则认为主题不相关。)包含两部分:局部相关性判定(由局部相关度表示)和上下文相关性判定。局部相关度(LocalRel)由内容块节点中的非链接中文字符总数和链接总数决定,其计算公式为: LocalRel = wordsNum / linkNum 当LocalRel 大于等于L(其中L是局部相关度的阀值),称该块局部相关(如果linkNum为0且wordsNum大于14,认为局部相关)。上下文相关性即判定该内容块节点的前驱兄弟和后继兄弟的主题相关性。前驱兄弟和后继兄弟必须是包含有中文内容的结点。主题内容块的判定算法如图: words_min是规定内容块节点的非链接中文字符总数的最小值。一般情况下,若wordsNum<words_min,则称该节点为空或没有内容,没有内容的块节点是主题不相关的。当然,若LocalRel >= L时,且wordsNum >= words_min时,此时并不能说明该块就是主题相关的。它只能说明该块是局部相关的。原因基于如下观察: a、 一些局部相关度大的块,例如一些与主题无关的广告内容,它们可能没有链接或包含较少的链接,因此它们可能LocalRel >= L,且wordsNum >= words_min。 b、 即使wordsNum <= words_min,也不能判断它是主题无关的。因为一些小信息量的主题内容,如正文的标题或正文中的小信息 因此还要通过它前后的兄弟节点的主题相关性来判定是否主题相关。本系统对<table>节点是单独处理的,因此<p>节点和<div>节点用于以上信息抽取算法中。 2、<table>的有效性判定 HTML页面中表格是由<table>元素标识的。在很多Web站点尤其是商业站点,用<table>元素标识的除了称之为其表格的数据表格之外还包含导航栏,或其它站点的链接等其他用来进行页面布局的非数据表格,非数据表格又被称为假表格。另一种情况是并不是所有的Web页面中的数据表格都是感兴趣的,有时即便是一个领域相关的Web页面也可能包含几个内容跟研究无关的数据表格。已经知道要定位的表格信息存在于<table></table>结点之间的内容中,所以只关心table结点。通过对html文档中table结点的依次遍历滤除非数据表格。在该过程中使用的启发式规则如下: 规则1:表格大小至少是3行3列。 规则2:如果表格中包含大量的链接,则认为该表格是非数据表格。 规则3:如果表格中包含<script>、<select>、css样式标签等,则认为该表格是非数据表格。 附录资料: Ehcache缓存配置 简介 Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。 你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。以下是运行时配置的好处: ·   在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。 ·   发布时可更改Cache配置。 ·   可再安装阶段就检查出配置错误信息,而避免了运行时错误。 本文将会对ehcache.xml配置文件进行详细的阐述。在配置的时可以拷贝一个现有的ehcache.xml,如果没有请点击这里去下载。 ehcache-failsafe.xml 如果你调用了CacheManager默认构造方法去创建CacheManager的实例,此方法会到classpath中找ehcache.xml文件,否则它会到类路径下找ehcache-failsafe.xml文件。而ehcache-failsafe.xml被包含在jar包中,所有它肯定能找的到。 ehcache-failsafe.xml提供了一个非常简单的默认配置,这样可以使用户在没有创建ehcache.xml的情况下使用Ehcache。 不过这样做Ehcache会提醒用户创建一个正确的Ehcache配置。 ehcache.xml片段: <ehcache>     <diskStore path="java.io.tmpdir"/>     <defaultCache             maxElementsInMemory="10000"             eternal="false"             timeToIdleSeconds="120"             timeToLiveSeconds="120"             overflowToDisk="true"             maxElementsOnDisk="10000000"             diskPersistent="false"             diskExpiryThreadIntervalSeconds="120"             memoryStoreEvictionPolicy="LRU"             /> </ehcache> ehcache.xml和其他配置文件 在Ehcache-1.6之前的版本,只支持ASCII编码的ehcache.xml配置文件。在Ehcach-1.6之后版本中,支持UTF8编码的ehcache.xml配置文件。因为向后兼容,所有采用ASCII编码的配置文件完全没有必要转换为UTF8。 一个CacheManager必须要有一个XML配置。由于磁盘路径或是监听端口,多个CacheManager使用同一个配置文件时会出现错误。 下面是ehcache.xml具体实例以及配置指南 <ehcache xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance ·   CacheManager配置 DmulticastGroupPort=4446,这样可以配置监听端口。 ·   DiskStore配置 如果你使用的DiskStore(磁盘缓存),你必须要配置DiskStore配置项。如果不配置,Ehcache将会使用java.io.tmpdir。 diskStroe的“path”属性是用来配置磁盘缓存使用的物理路径的,Ehcache磁盘缓存使用的文件后缀名是.data和.index。 <disStore path=”java.io.tmpdir”/> ·   CacheManagerEventListener配置 我们通过CacheManagerEventListenerFactory可以实例化一个CacheManagerPeerProvider,当我们从CacheManager中added和removed Cache时,将通知CacheManagerPeerProvider,这样一来,我们就可以很方面的对CacheManager中的Cache做一些统计。 注册到CacheManager的事件监听类名有: adding a Cache和removing a Cache <cacheManagerEventListenerFacotory class=”” properties=””/> ·   CacheManagerPeerProvider配置 在集群中CacheManager配置CacheManagerPeerProviderFactory创建CacheManagerPeerProvider。具体的实例如下: <cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution. RMICacheManagerPeerProviderFactory" properties="peerDiscovery=manual, rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1| //server1:40000/sampleCache2|//server2:40000/sampleCache2" propertySeparator="," /> ·   CacheManagerPeerListener配置 CacheManagerPeerListener配置是用来监听集群中缓存消息的分发的。 <cacheManagerPeerListenerFactory     class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"     properties="hostName=fully_qualified_hostname_or_ip,                 port=40001,                socketTimeoutMillis=120000"                 propertySeparator="," /> ·   Cache配置 ·           name:Cache的唯一标识 ·           maxElementsInMemory:内存中最大缓存对象数。 ·           maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。 ·           eternal:Element是否永久有效,一但设置了,timeout将不起作用。 ·           overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中。 ·           timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。 ·           timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大。 ·           diskPersistent:是否缓存虚拟机重启期数据。(这个虚拟机是指什么虚拟机一直没看明白是什么,有高人还希望能指点一二)。 ·           diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。 ·           diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。 ·           memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。这里比较遗憾,Ehcache并没有提供一个用户定制策略的接口,仅仅支持三种指定策略,感觉做的不够理想。 ·   Cache Exception Handling配置 <cacheExceptionHandlerFactory class="com.example.ExampleExceptionHandlerFactory"                               properties="logLevel=FINE"/> 总结 这里只对通用缓存的配置做了详细的阐述,至于RMI缓存和集群缓存可以参考这里。 下面给出几个配置示例: ·   Ehcache默认Cache配置 <defaultCache         maxElementsInMemory="10000"         eternal="false"         timeToIdleSeconds="120"         timeToLiveSeconds="120"         overflowToDisk="true"         diskSpoolBufferSizeMB="30"         maxElementsOnDisk="10000000"         diskPersistent="false"         diskExpiryThreadIntervalSeconds="120"         memoryStoreEvictionPolicy="LRU"         /> ·   SampleCache1配置 简单配置,在ehcache.xml文件中有此配置,在使用Ehcache前最好将其删除掉,自己配置。 缓存名sampleCache1,内存中最多可缓存10000个Element,其中的element会在闲置5分钟或是存活10分钟之后失效。 超过10000element时,element将会输出到磁盘中,输出路径是java.io.tmpdir。 <cache name="sampleCache1"        maxElementsInMemory="10000"        maxElementsOnDisk="1000"        eternal="false"        overflowToDisk="true"        diskSpoolBufferSizeMB="20"        timeToIdleSeconds="300"        timeToLiveSeconds="600"        memoryStoreEvictionPolicy="LFU"         /> ·   SampleCache2配置 Cache名为SampleCache2,内存中最多可以缓存1000个element,超出1000不能输出到磁盘中。缓存是永久有效的。 <cache name="sampleCache2"        maxElementsInMemory="1000"        eternal="true"        overflowToDisk="false"        memoryStoreEvictionPolicy="FIFO"         /> ·   SampleCache3配置 Cache名为SampleCache3。可缓存到磁盘。磁盘缓存将会缓存虚拟机重启期的数据。磁盘缓存失效线程运行间隔时间是10分钟。 <cache name="sampleCache3"        maxElementsInMemory="500"        eternal="false"        overflowToDisk="true"        timeToIdleSeconds="300"        timeToLiveSeconds="600"        diskPersistent="true"        diskExpiryThreadIntervalSeconds="1"        memoryStoreEvictionPolicy="LFU"         /> ·   sampleDistributedCache1配置 Cache名为sampleDistributedCache1。 <cache name="sampleDistributedCache1"        maxElementsInMemory="10"        eternal="false"        timeToIdleSeconds="100"        timeToLiveSeconds="100"        overflowToDisk="false">     <cacheEventListenerFactory             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>     <bootstrapCacheLoaderFactory             class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/> </cache> ·   sampleDistributedCache2配置 <cache name="sampleDistributedCache2"        maxElementsInMemory="10"        eternal="false"        timeToIdleSeconds="100"        timeToLiveSeconds="100"        overflowToDisk="false">     <cacheEventListenerFactory             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"             properties="replicateAsynchronously=false, replicatePuts=false,                         replicateUpdates=true, replicateUpdatesViaCopy=true,                        replicateRemovals=false"/> </cache> ·   sampleDistributedCache3配置 <!-- Sample distributed cache named sampleDistributedCache3. This cache replicates using defaults except that the asynchronous replication interval is set to 200ms. --> <cache name="sampleDistributedCache3"        maxElementsInMemory="10"        eternal="false"        timeToIdleSeconds="100"        timeToLiveSeconds="100"        overflowToDisk="false">     <cacheEventListenerFactory             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"             properties="asynchronousReplicationIntervalMillis=200"/> </cache>
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:HTMLParser抽取Web网页正文信息.doc
    链接地址:https://www.zixin.com.cn/doc/4764983.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork