分类 网站 下的文章

 因为要到一家互联网公司参加自然语言处理实习生面试,对于岗位要求中提到的工作内容--"网页正文内容提取"的相关知识进行了一下突击。重点看了一下网页正文提取所涉及到的各种算法,网上的内容很多,我只是看了其中一小部分,对各类算法做了一个简单的了解,不敢说对其做一个综述,只是以一个学习者的学习习惯来记录我对网页正文提取算法的浅认识,本文并不会对算法进行详细的步骤讲解,只提思路和思想。

  为什么要进行正文提取?

  对于一个单独的网页,往往最有价值的部分是网页的正文。然而就现在的大多数的网站的网页而言,不仅仅包含正文,网页标签等,其他的如广告,网页链接,插件等占据了网页相当一部分的内容。由于现实的需要,我们往往需要对网页的内容进行分析从而提取有价值的信息。一个网页的内容基本包含在正文中,对于新闻类网页尤其。将网页正文之外其他的内容剔除从而降低分析的难度是一种基本的思路。同时正文内容提取的好坏直接影响到接下来分析工作的质量。如何使用最快捷的方法来获取网页的正文同时又保证提取的内容的准确性?人们为这个问题一直努力着!

  网页正文提取的思路及算法

  作为一个刚开始对正文提取没有什么认识的人,比如我,第一想法就是利用HTML网页的标签来判断正文的位置。因为根据网页的编辑和布局习惯,一般会将网页在正文部分放入到<p>,<table>以及<div> 中,并且应该包含<title>和<head>等标签。如果能够利用正则表达式首先找到这些标签的位置,并做相应的判断即可找到正文的内容位置。这是第一种思路,基于标签。

  1. 基于标签

  这是很容易想到的一种思路。基于HTML文件本身的某些结构特点和规范。这里也可以细分:

  • 基于标签窗的算法: 例如<p>段落标签,一般的正文内容都会嵌套其中。<title>标题标签,一般会将论文的标题嵌入,接下来的内容很大程度上应该是正文的内容了。根据写作习惯,标题下方开始写正文,上方<p>标签就应该会频繁出现,主要的思路是标签的某种组合和标签的内容对应。

  • 基于标签密度的算法:对于大多数的网页而言,正文部分的标签明显要少于非正文部分,而且正文当中的标签大部分标签应该属于修饰类标签。这就有一种基于标签统计的思路算法。从某一行开始,标签数量明显减少,到某一行又骤升,这一间隔区域很大程度上就属于网页的正文部分。

  • 基于DOM树的算法:

   什么叫DOM(Document Object Model)树:并没有看到对DOM树的定义,不过很容易理解,下图就很明白体现了一种对应关系。

   在一个网页中标签的位置下左图所示,而对应的DOM树如下又图(图片来源:http://www.w3school.com.cn/htmldom/dom_nodes.asp)所示:

     

    这种算法需要对网站HTML建立DOM树,然后对之进行遍历递归,去除相应的噪音信息之后再从剩余的节点中进行选择。由于要建立DOM树,算法的时间/空间复杂度均较高。

  基于标签的算法都潜在默认了这样的一个信息:即网站的网页生成,制作都遵循了一定的标签使用规范。不过现在的互联网网页五花八门,很难都按常理出牌,所以这在一定程度上降低了算法的准确性和通用性。

  2. 基于内容

  网页按照内容形式分类大概分为:主题型,图片型和目录型。

  对于主体型的网页,例如新闻类,博客类等,主要特点是文字内容比较多。基于这一点,另外一种正文提取思路是基于正文本身的特点。在一定程度上,正文的文字数量要比其他部分多。这在一定程度上有助于形成了区域的区分度。文字数量的骤增和骤减在一定程度上可以作为正文开始和介绍的判读点。

  这类算法在本质上没有多大的差异,只是选择度量文字密度的方式不同而已。有的是基于块,有的是基于行,有的是基于转化函数。算法都很容易理解,也相对比较容易实现。下面的几篇文章就是基于网页内容的算法。

  《基于行块分布函数的通用网页正文抽取》陈鑫

  《基于网页分块的正文信息提取方法》 黄 玲,陈 龙

  博文《我为开源作贡献,网页正文提取--HtmlArticle2》

  3. 基于视觉

  想对于前面两种思路,这类算法的思路有一种"高大上"的感觉。这里不得不提到这类算法的基础:VIPS(Vision-based Page Segementation)算法。

  VIPS算法:利用背景颜色,字体颜色和大小,边框,逻辑块和逻辑块之间的间距等视觉特征,制定相应的规则把页面分割成各个视觉块!(视觉效果真的是千变万化,如何制定规则集始终是个复杂的问题)

  VIPS算法充分利用了Web页面的布局特征。它首先从DOM 树中提取出所有合适的页面块,然后根据这些页面块检测出它们之间所有的分割条,包括水平和垂直方向;最后基于这些分割条.重新构建Web页面的语义结构。对于每一个语义块又可以使用VIPS算法继续分割为更小的语义块。该算法分为页面块提取、分隔条提取和语义块重构3部分,并且是递归调用的过程,直到条件不满足为止.

  相关文献:

  《基于视觉特征的网页正文提取方法研究》安增文,徐杰锋

  《A vision—based page segmentation algorithm》

  4. 基于数据挖掘/机器学习

  看到很多作者对这一思路的普遍评价是"杀鸡焉用牛刀"。

  基本思路是使用一定数量的网页作为训练集,通过训练得到网页正文的一些特点,然后将这些特征作为网页片段是否符合网页正文的判断依据。对于数据挖掘/机器学习算法来讲,训练样本的采集很重要,然而现实是互联网中网页形式千变万化,不太可能取太多数量作为训练样本。这样这种算法的准确性和通用性就受到了制约,同时这类算法前期工作也比较复杂。


基于网页结构的算法确实是一种有效的方式来识别并提取网页中的文章内容。下面是一个更详细的步骤描述,这些步骤描述了如何使用网页结构、文本密度和链接密度等特征来识别并提取文章内容:

  1. 加载并解析网页

    • 使用一个HTML解析库(如Python的BeautifulSoup、lxml,或者JavaScript的DOM解析器等)来加载和解析网页的HTML代码。

  2. 寻找文章主体元素

    • 检查HTML文档是否包含语义化标签,如<article><main><section><content>等。这些标签通常用于标识页面的主要内容区域。

    • 如果没有找到这些语义化标签,则可能需要通过更复杂的CSS选择器或者DOM树遍历来找到文章内容的可能位置。

  3. 计算文本密度

    • 遍历HTML文档的每个元素或区域,并计算它们的文本密度。文本密度通常可以通过元素中纯文本字符的数量与元素总字符数的比例来计算。

    • 文章内容区域的文本密度通常较高,因为它们包含大量的文本内容。

  4. 计算链接密度

    • 同样地,遍历HTML文档的每个元素或区域,并计算它们的链接密度。链接密度可以通过元素中链接(<a>标签)的数量与元素总标签数量的比例来计算。

    • 文章内容区域的链接密度通常较低,因为链接主要用于导航或引用其他资源,而不是文章的主要内容。

  5. 综合评估并提取内容

    • 结合文本密度和链接密度以及其他可能的特征(如元素的类名、ID、位置等),对页面中的不同区域进行综合评估。

    • 识别出最有可能是文章内容的区域,并提取其中的纯文本内容。

  6. 后处理

    • 对提取到的文本内容进行后处理,包括去除HTML标签、去除多余的空格和换行符、处理特殊字符等。

    • 如果需要,还可以进行进一步的文本处理,如分词、词性标注、命名实体识别等,以便于后续的分析或应用。

  7. 测试和验证

    • 使用一组具有不同结构和内容的网页来测试算法的性能和准确性。

    • 根据测试结果对算法进行调整和优化,以提高其适应性和准确性。

需要注意的是,由于网页结构的多样性和复杂性,没有一种算法能够适用于所有类型的网页。因此,在实际应用中,可能需要结合多种算法和技术来综合提取和分析网页中的文章内容。同时,由于网页内容的动态性和变化性,算法也需要具有一定的适应性和鲁棒性,以应对不断变化的网页结构和内容。


基于机器学习的算法

这类算法使用机器学习模型来识别网页中的文章内容。它们通常会训练模型来识别文章内容的语义特征,例如文本的主题、关键词和句子的结构。这类算法的优点是可以适应各种类型的网页,并且可以随着时间的推移提高准确性。

一些常用的基于机器学习的网页内容提取算法包括:

  • 基于支持向量机的算法:这类算法将网页内容表示为特征向量,然后使用支持向量机来区分文章内容和其他内容。

  • 基于条件随机场的算法:这类算法将网页内容视为序列,并使用条件随机场来预测每个词是否是文章内容的一部分。

  • 基于神经网络的算法:这类算法使用神经网络来学习网页内容的语义特征,然后进行提取。

基于自然语言处理的算法

这类算法利用自然语言处理技术来分析网页内容的文本特征,从而识别文章内容。它们通常会使用以下技术:

  • 文本相似度:计算网页内容与已知文章内容的文本相似度,以此来判断其是否属于文章内容。

  • 主题建模:使用主题建模技术来分析网页内容的主题,并识别与文章主题相关的文本。

  • 句法分析:分析网页内容的句法结构,并识别文章中常见的句法模式。

基于网页结构的算法

这类算法利用网页的结构信息来识别文章内容。它们通常会分析网页的HTML代码,并寻找以下特征:

  • 文章主体元素:例如 <article>, <main>, <content> 等元素。

  • 文本密度:文章内容的文本密度通常较高,而其他内容的文本密度较低。

  • 链接密度:文章内容中通常包含较少的链接,而其他内容中可能包含大量的链接。

混合算法

一些算法会结合多种技术来提高提取的准确性。例如,可以将机器学习算法与自然语言处理算法或网页结构算法相结合。

选择合适的算法

选择合适的算法取决于您的具体需求。如果您需要一种通用的算法,可以考虑使用基于机器学习的算法。如果您需要一种可以针对特定类型的网页进行优化的算法,可以考虑使用基于自然语言处理或网页结构的算法。

以下是一些可以帮助您选择合适的算法的因素:

  • 网页类型的多样性:如果您需要处理多种类型的网页,则需要选择一种能够适应不同类型网页的算法。

  • 提取的准确性要求:如果您需要高精度的提取结果,则需要选择一种性能更好的算法。

  • 计算资源的限制:一些算法需要大量的计算资源,因此您需要考虑您的计算能力限制。


伪静态配置主要分为两部分,nginx配置和开启地址重写功能;


nginx

将以下配置复制到nginx的server配置中;

location / {   
 if (!-e $request_filename) 
 {      rewrite ^(.*)$ /index.php$1 last;  
   }   
 }


开启伪静态

在后台配置中启用地址重写功能

开启伪静态

在Windows 10中,用户可以使用内置的"shutdown"命令来实现定时关机。只需打开命令提示符或PowerShell,输入相应的命令与定时时间,系统即会在指定时间后关机。

二,使用"shutdown"命令实现定时关机

  • 打开命令提示符:点击Windows键,输入“cmd”并选择“命令提示符”或“Windows PowerShell”。

  • 输入关机命令:在命令提示符或PowerShell窗口中,键入以下命令:shutdown -s -t 秒数,这里的“秒数”代表你想要在多久后关机,例如,如果你想在一个小时后关机,就应该输入:shutdown -s -t 3600

  • 取消关机命令:如果你改变了主意,想取消定时关机,只需输入以下命令:shutdown -a

三,其他简单的定时关机方法

使用任务计划程序:

  • 打开“任务计划程序”。

  • 创建一个新任务。

  • 在“操作”选项中选择“关机”。

  • 设置触发器为你希望关机的时间。