html格式的文件怎么提取信息,python提取html正文

  html格式的文件怎么提取信息,python提取html正文

  http://www.basesnet.com/seo/53, html文件提取文本的简单方案2012-03-07/SEO/HTML文件,提取文本,简单方案/1基于HTML文本提取的多种思路1。基于统计的中文网页文本抽取研究

  摘要:信息抽取技术是一种广泛应用于互联网的数据挖掘技术。其目的是从互联网上的海量数据中提取有意义、有价值的数据和信息,从而更好地利用互联网资源。本文采用网页特征的统计方法从中文网页中抽取文本。首先将网页表示为基于XML的DOM树,利用统计的节点信息从树中过滤掉噪声数据节点。最后,选择文本节点。与传统的基于包装器的抽取方法相比,该方法简单实用。实验结果表明,该提取方法的准确率达到90%以上,具有很好的实用价值。

  资料来源:http://blog.csdn.net/zvane/archive/2008/03/21/2201414.aspx

  第二,基于标签密度的判断

  译者指南:本文主要介绍一种广泛适用的方法,从不同类型的HTML文件中提取真正有用的文本内容。它的功能类似于CSDN最近推出的“剪影”,可以从页眉、页脚、侧边栏中去掉不相关的内容,非常实用。方法简单,有效,出乎意料。看完之后,难免大呼原来还可以这样!文字简洁易懂。虽然应用了人工神经网络等算法,但由于其良好的封装性,不要求读者了解FANN。全文用Python代码编写,可读性更好,有科普味道,值得一读。

  大家手里可能都有很多讨论不同话题的HTML文档。但你真正感兴趣的,可能就藏在广告、版面表格或者格式标记、无数链接里。更糟糕的是,您希望过滤掉菜单、页眉和页脚中的文本。如果你不想为每种类型的HTML文件编写复杂的提取程序,我这里有一个解决方案。

  本文描述了如何编写一个简单的脚本来从大量HTML代码中获取正文内容。这种方法不需要知道HTML文件的结构和使用的标签。它可以在所有带有文本内容的新闻文章和博客页面上工作.

  你想知道为什么统计学和机器学习能让你在文本挖掘中省时省力吗?

  答案极其简单:使用文本和HTML代码的密度来决定是否应该输出一行文件。这听起来有点离奇,但确实有效!)的基本处理工作如下:

  首先,解析HTML代码并记下处理的字节数。

  其次,以行或段落的形式保存解析后的输出文本。

  第三,统计每行文本对应的HTML代码的字节数。

  第四,通过计算文本与字节的比率来获得文本密度。

  最后用神经网络来决定这一行是否是文本的一部分。

  仅仅通过判断行密度是否高于一个固定的阈值(或者仅仅使用平均值),就可以得到非常好的结果。但是你也可以用机器学习(很容易实现,根本不值一提)来减少这个系统的错误。

  网址:3358 hi . Baidu . com/white CPF/blog/item/6 C4 dfde 6004755094 ee 37 c 9 . html

  3.基于数据挖掘的网页文本抽取方法研究。

  基于数据挖掘的思想,提出了一种从中文新闻网页中抽取文本内容的方法。该方法对网页的源代码进行线性化和重构,然后利用重构后的代码初步去除网页的噪声,再通过文本分类和聚类得到网页文本的上下文段落。最后,通过吸收伪噪声段落生成网页文本。该方法克服了传统网页内容抽取方法需要贡献网页结构的缺点。它简单、快速、准确。实验表明,该方法的提取准确率可以达到99%以上。

  来源:http://epub.cnki.net/grid2008/detail.aspx? filename=zgzr 200608001051 dbname=cpfd 2006

  第四,基于可视化网页分块分析技术的文本提取。

  基于视觉的文本提取和网页分块分析完全模拟IE浏览器的显示方式,对网页进行分析。系统根据人类视觉原理,将网页分析结果分块。然后根据用户的要求,提取用户所需的相关网页块的内容。

  例如,在竞争情报系统和自动新闻收集和分发系统中,文本提取。摘录:标题、文字、时间等信息。

  评论:类似于根据模板定义提取网页文本。

  继续收藏

  当然,提取文本的方法有很多,比如正则表达式,或者删除html标签等。但个人认为,总体效果并不理想。

  从任意HTML中提取有用文本的简单方法从HTML文件中提取文本的简单方案作者:alexjc原文地址:http://ai-depot.com/articles/The-Easy-Way-to-Extract-used-Text-from-arbitration-HTML/translator s guide:这篇文章主要介绍了一种广泛适用的方法,用于从不同类型的HTML文件中提取真正有用的文本内容。它的功能类似于CSDN最近推出的“剪影”,可以从页眉、页脚、侧边栏中去掉不相关的内容,非常实用。方法简单,有效,出乎意料。看完之后,难免大呼原来还可以这样!文字简洁易懂。虽然应用了人工神经网络等算法,但由于其良好的封装性,不要求读者了解FANN。全文用Python代码编写,可读性更好,有科普味道,值得一读。您终于得到了您需要的各种HTML文档。但是你感兴趣的内容隐藏在广告、布局表格或格式化标记以及其他各种链接中。更糟糕的是,菜单、页眉和页脚中有你想过滤掉的可见文本。如果不想为每种类型的HTML文件编写复杂的抓取程序,有一个解决方案。每个人可能都有很多讨论不同主题的html文档。但你真正感兴趣的,可能就藏在广告、版面表格或者格式标记、无数链接里。更糟糕的是,您希望过滤掉菜单、页眉和页脚中的文本。如果你不想为每种类型的HTML文件编写复杂的提取程序,我这里有一个解决方案。本文向您展示了如何编写一个相对简单的脚本来从大块的HTML代码中提取文本段落,而不需要知道它的结构或使用的标签。这篇文章讲述了如何编写一个简单的脚本来从大量的HTML代码中获取文本内容。这种方法不需要知道HTML文件的结构和使用的标签。它可以在所有带有文本内容的新闻文章和博客页面上工作…您想了解统计和机器学习如何节省您挖掘文本的时间和精力吗?你想知道为什么统计学和机器学习能让你在文本挖掘中省时省力吗?type=text/javascript这个概念相当简单:使用关于文本密度和HTML代码的信息来判断一行文本是否值得输出。(这不是什么新奇的想法,但是很管用!)基本流程如下:

  答案极其简单:使用文本和超文本标记语言代码的密度来决定一行文件是否应该输出。(这听起来有点离奇,但它的确有用!)基本的处理工作如下:解析超文本标记语言代码并跟踪处理的字节数。一、解析超文本标记语言代码并记下处理的字节数逐行或逐段存储文本输出。二、以行或段的形式保存解析输出的文本将每个文本行与描述它所需的超文本标记语言字节数相关联。三、统计每一行文本相应的超文本标记语言代码的字节数通过计算文本与字节的比率来计算每行的文本密度。四、通过计算文本相对于字节数的比率来获取文本密度然后通过使用神经网络来决定该行是否是内容的一部分。五、最后用神经网络来决定这一行是不是正文的一部分仅仅通过检查线条的密度是否高于固定阈值(或平均值),你就可以获得相当好的结果,但如果你使用机器学习,系统会犯更少的错误——更不用说它更容易实现了!仅仅通过判断行密度是否高于一个固定的阈值(或者就使用平均值)你就可以获得非常好的结果。但你也可以使用机器学习(这易于实现,简直不值一提)来减少这个系统出现的错误让我们从头开始…现在让我从头开始……将超文本标记语言转换为文本转换超文本标记语言为文本您需要的是文本模式浏览器的核心,它已经设置为读取带有超文本标记语言标记的文件并显示原始文本。通过重用现有代码,您将不必花费太多时间来处理无效的可扩展置标语言文档,这是很常见的——您很快就会意识到这一点。你需要一个文本模式浏览器的核心,它应该已经内建了读取超文本标记语言文件和显示原始文本功能。通过重用已有代码,你并不需要把很多时间花在处理无效的可扩展置标语言文件上举个简单的例子,我们将使用带有几个内置模块的皮索纳龙:用于解析的htmllib和用于输出格式化文本的格式化程序.这是顶级函数的样子:我们将使用计算机编程语言来完成这个例子,它的htmllib模块可用以解析超文本标记语言文件,格式化程序模块可用以输出格式化的文本。嗯,实现的顶层函数如下:defextract_text(html):#从格式化程序派生。存储段落的抽象作者writer=LineWriter()#默认格式化程序向我们的作家。formatter=抽象格式化程序(编写器)#从html库派生.解析器跟踪解析的字节parser=TrackingParser(writer,formatter)#向解析器提供原始超文本标记语言数据解析器。提要(HTML)解析器。关闭()#过滤存储的段落并输出它们回归作家。output()跟踪解析器本身覆盖用于解析开始和结束标记的回调函数,因为它们在缓冲区中被提供了当前解析索引。您通常不能访问它,除非您开始进入调用堆栈中的框架——这不是最好的方法!这个类看起来是这样的:跟踪Parser覆盖了解析标签开始和结束时调用的回调函数,用以给缓冲对象传递当前解析的索引。通常你不得不这样,除非你使用不被推荐的方法——深入调用堆栈去获取执行帧。

  这个类看起来是这样的:classTrackingParser(htmllib .HTMLParser):" "尝试保持解析位置的准确指针. def__init__(self,writer,* args):html lib。html解析器。_ _ init _ _(self,* args)self。writer=writerdefparse _ starttag(self,i): index=htmllib .HTMLParser.parse_starttag(self,I)self。作家。index=indexreturnindexdefparse _ endtag(self,I):self。作家。index=ireturnhtmlib .HTMLParser.parse_endtag(self,LineWriter类在被默认格式化程序调用时完成大部分工作。如果您有任何改进或更改,很可能会出现在这里。这是我们稍后放机器学习代码的地方。但是您可以保持实现相当简单,并且仍然可以获得好的结果。下面是最简单的代码:LinWriter的大部分工作都通过调用格式程序来完成。如果你要改进或者修改程序,大部分时候其实就是在修改它。我们将在后面讲述怎么为它加上机器学习代码。但你也可以保持它的简单实现,仍然可以得到一个好结果。具体的代码如下:class paragraph:def _ _ init _ _(self):self。text=" self。字节=0本身。密度=0.0类行写入器(格式化程序.抽象编写器):def _ _ init _ _(self,* args):self。last _ index=0自我。lines=[Paragraph()]格式化程序。抽象作家。_ _ init _ _(self)def send _ flow _ data(self,data):#算出这个文本块的长度t=len(data)#我们已经解析了更多的文本,所以递增index.self.index=t#计算自上次以来的字节数b=自我。自我索引。last _ index自我。last _ index=self。索引号在当前行累积此信息l=自我。lines[-1]l . text=data l . bytes=bdefsend _ paragraph(self,blankline):" "如有必要,创建新段落“ifself.lines[-1].text==":returnself.lines[-1].text= n *(空行1)self。第[-1]行.bytes=2 *(空行1)self。台词。追加(编写器.paragraph())def send _ literal _ data(self,data):self。send _ flow _ data(data)def send _ line _ break(self):self。发送段落(0)这段代码还不做任何输出,只是收集数据。我们现在在一个数组中有一堆段落,我们知道它们的长度,并且我们大致知道创建它们需要多少字节的HTML .让我们看看从我们的统计数据中出现了什么。这里代码还没有做输出部分,它只是聚合数据。现在我们有一系列的文字段(用数组保存),以及它们的长度和生成它们所需要的超文本标记语言的大概字节数。现在让我们来看看统计学带来了什么100 .检查数据数据分析幸运的是,数据中有一些模式。在下面的原始输出中,您会注意到对文本行进行编码所需的超文本标记语言字节数有明显的峰值,特别是在标题周围,包括侧边栏、页眉和页脚。幸运的是,数据里总是存在一些模式。从下面的原始输出你可以发现有些文本需要大量的超文本标记语言来编码,特别是标题、侧边栏、页眉和页脚虽然有些地方的超文本标记语言字节数激增,但有相当多的行仍然低于平均水平。在这些行中,文本输出相当高。计算文本对超文本标记语言字节的密度可以让我们更好地理解这种关系。虽然超文本标记语言字节数的峰值多次出现,但大部分仍然低于平均值;我们也可以看到在大部分低超文本标记语言字节数的字段中,文本输出却相当高。通过计算文本与超文本标记语言字节数的比率(即密度)可以让我们更容易明白它们之间的关系:模式在这个密度值中更明显,所以它给了我们一些具体的工作。密度值图更加清晰地表达了正文的密度更高,这是我们的工作的事实依据过滤线路过滤文本行我们现在可以过滤线的最简单的方法是通过将密度与固定阈值进行比较,例如50%或平均密度。完成编剧类:过滤文本行的最简单方法是通过与一个阈值(如50%或者平均值)比较密度值。

  下面来完成编剧类:defcompute_density(self):" "计算每条线的密度,并求平均值对于linself,total=0.0。行数:l . density=len(l . text)/float(l . bytes)total=l . density # Store以供神经网络选择使用。自我。平均值=总计/浮动(len(self。台词))defoutput(self):" " " "返回一个筛选掉无用行的字符串“自我。compute _ density()输出=StringIO .StringIO()forlinself.lines:#对照阈值检查密度。#自定义过滤器扩展到此处.如果。密度0.5:输出。write(l . text)返回输出。getvalue()这种粗略的过滤器通常可以正确处理大多数行。只要不太长,所有的页眉、页脚和侧边栏文本通常都会被去除。然而,如果有很长的版权声明、评论或者其他故事的描述,那么这些也会被输出。此外,如果文本中的内嵌图形或广告周围有短线,则不会输出。这个粗糙的过滤器能够获取大部分正确的文本行。只要页眉、页脚和侧边栏文本并不非常长,那么所有的这些都会被剔除。然而,它仍然会输出比较长的版本声明、注释和对其它故事的概述;在图片和广告周边的比较短小的文本,却被过滤掉了为了解决这个问题,我们需要一个更复杂的过滤试探法。但是,我们不会花几天时间手动解决逻辑问题,我们只会获取关于每一行的大量信息,并使用机器学习来为我们找到模式。要解决这个问题,我们需要更复杂些的启发式过滤器。为了节省手工计算需要花费的无数时间,我们将利用机器学习来处理每一文本行的信息,以找出对我们有用的模式有监督的机器学习监督式机器学习下面是一个将文本行标记为内容或不作为内容的界面示例:这是一个标识文本行是否为正文的接口界面:监督学习的思想是为算法提供学习的例子。在我们的例子中,我们给它一组由人标记的文档,因此我们知道哪一行必须输出,哪一行必须过滤掉。为此,我们将使用一个简单的神经网络,称为感知器。它接受浮点输入,通过"神经元"之间的加权连接过滤信息,并输出另一个浮点数。粗略地说,神经元和层数影响精确逼近函数的能力;我们将使用单层感知器(SLP)和多层感知器(MLP)进行原型制作。所谓的监督式学习就是为算法提供学习的例子。在这个案例中,我们给定一系列已经由人标识好的文档——我们知道哪一行必须输出或者过滤掉。我们用使用一个简单的神经网络作为感知器,它接受浮点输入并通过"神经元"间的加权连接过滤信息,然后输后另一个浮点数。大体来说,神经元数量和层数将影响获取最优解的能力。我们的原型将分别使用单层感知器(SLP)和多层感知器(MLP)模型为了让神经网络学习,我们需要收集一些数据。这就是前面的LineWriter.output()函数派上用场的地方;它为我们提供了一个中心点来同时处理所有的行,并做出输出哪些行的全局决定。从直觉开始,经过一点试验,我们发现以下数据有助于决定如何过滤一条线:我们需要找些数据来供机器学习。之前的LineWriter.output()函数正好派上用场,它使我们能够一次处理所有文本行并作出决定哪些文本行应该输出的全局结策。

  从直觉和经验中我们发现下面的几条原则可用于决定如何过滤文本行:当前线的密度。当前行的密度该行的超文本标记语言字节数。当前行的超文本标记语言字节数该行输出文本的长度。当前行的输出文本长度前一行的这三个值,前一行的这三个值…下一行也是如此。后一行的这三个值为了实现,我们将使用计算机编程语言与快速人工神经网络库范恩接口。学习代码的本质是这样的:我们可以利用范恩的计算机编程语言接口来实现,FANN是快速人工神经网络库的简称。基本的学习代码如下:frompyfannimportfann,libfann#这创建了一个新的单层感知器,有一个输出和3个输入。obj=libfann。fann _ create _ standard _ array(2,(3,1))ann=fann.fann_class(obj)#加载我们上面描述的数据。模式=范。read _ train _ from _ file( training。txt’)安。train _ on _ data(模式,1000,1,0.0)#然后用不同的数据进行测试。fordatin,datoutinvalidation不要有太多的神经元,否则你可能会对你所拥有的一组文档训练得太好(过度适应),相反,尽量拥有足够的神经元来很好地解决问题。以下是使用不同行数(1L-3L)和每行属性数(1A-3A)的结果:尝试不同的数据和不同的网络结构是比较机械的过程。不要使用太多的神经元和使用太好的文本集合来训练(过拟合),相反地应当尝试解决足够多的问题。使用不同的行数(1L-3L)和每一行不同的属性(1A-3A)得到的结果如下:有趣的是,在固定阈值下,0.5已经是一个很好的猜测了(见第一组专栏)。学习算法无法找到更好的解决方案来单独比较密度(第二列中的一个属性)。有了3个属性,下一个概览总体上做得更好,尽管它得到了更多的假阴性。使用多条线也提高了单层感知器(第四组列)的性能。最后,使用更复杂的神经网络结构总体上效果最好——在过滤线条时减少80%的错误。有趣的是作为一个猜测的固定阈值,0.5的表现非常好(看第一列)。学习算法并不能仅仅通过比较密度来找出更佳的方案(第二列)。使用三个属性,下一个概览比前两都好,但它引入了更多的假阴性。使用多行文本也增进了性能(第四列),最后使用更复杂的神经网络结构比所有的结果都要更好,在文本行过滤中减少了80%错误注意,如果你想惩罚假阳性多于假阴性,你可以调整错误的计算方式。注意:你能够调整误差计算,以给假阳性比假阴性更多的惩罚(宁缺勿滥的策略)。结论结论从任意超文本标记语言文件中提取文本不一定需要用定制代码抓取文件。你可以使用统计学来获得相当惊人的结果,而机器学习甚至可以得到更好的结果。通过调整阈值,您可以避免污染文本输出的最糟糕的误报。但实际上并没有那么糟糕;在神经网络出错的地方,即使是人类也很难将这些行归类为"内容"。从任意超文本标记语言文件中抽取正文无需编写针对文件编写特定的抽取程序,使用统计学就能获得令人惊讶的效果,而机器学习能让它做得更好。通过调整阈值,你能够避免出现鱼目混珠的情况。它的表现相当好,因为在神经网络判断错误的地方,甚至人类也难以判定它是否为正文。

  现在您所要做的就是如何处理干净的文本内容!现在需要考虑的问题是,如何处理这些“干净”的文字。垂直搜索-网页文本提取

  原文链接:一般来说,在http://www.beijing-open-party.org/,目前的文字抓取方式不外乎以下三种方式:

  通过正则表达式抓取:通过BeautifulSoup等工具。方法很简单,但是性能可能有问题。过于依赖抓取的目标网页。一旦网页格式发生变化,就需要更新抓取方式。基于懒惰的原则,如果进程序列能够自动识别变化,那就完美了。标签,本主题中描述的方法就属于这一类。基于视觉的处理,横跨贴标领域,有一些技术门槛,所以这个话题暂时不涉及。(2009年2月,在open party“Fox”活动上,中国雅虎的一位朋友分享了一个“服务器端用Firefox进行网页抓取和内容识别”的话题,其实就是基于视觉的处理的实现。)文本密度算法的实现就是上面提到的标签特征类的方法。基本公式:纯文本字符数/HTML源代码字符数。

  原始方法:

  记录HTML标签的起始位置,统计HTML源代码开头和结尾包含的字符数以及其中的文本字符数。使用Python的matplotlib图形化查看统计结果。从直方图中可以直观的发现,部分网页的文本密度明显高于其他部分。在整个过程中,你还可以使用Tidy软件包来清理HTML代码。示例中演示的新浪页面在用Tidy清理后更容易识别。

  从实际情况出发,对算法稍作调整:从之前的判断前后的文本,改为判断前后的标签。

  优点:数据的完整性更好。

  缺点:数据分布不够直观,有干扰。可以通过适当增加一些数值来实现。

  整个实现方法使用的代码量:带注释和模式过滤的原脚本大概有200行Python代码,如果是基于网上论文的原实现,大概有100行Python代码。

  参考文献中描述的人工智能文本识别方法:

  使用神经网络模型,可以使用FANN库,对应的Python包采用原来的一刀切的方式,会导致线损现象。单个行的密度会更小。神经模型的算法可以通过机器学习来实现。但需要注意的是,在实际使用中,了解所用原料与目标相似度之间的关系也很重要。学习量小,可能达不到完成任务所需的精度;但如果学习量过大,就会出现“过学习”的情况,也可能出现过匹配,导致对目标数据的变化敏感。

  用于HTML标签序列的其他智能方法:

  统计贝叶斯马尔可夫CRF然而,为了实现我们的目标,找到最佳途径是最关键的。例如,在许多应用中,看似粗糙的“一刀切”的方法也可能非常有效。

  这里介绍的自然语言识别只是一个具体的分支应用,这个大的领域还包括很多其他的内容,比如越来越火的分词技术,也是值得关注的。

  一般来说,自然语言识别技术需要根据应用领域和应用环境提供相应的解决方案。没有银弹!

  我对唱片的一知半解肯定略有偏颇。对于想了解更多这方面内容的人(如查阅上述论文等。),请访问宋博士的“提取HTML文档文本”页面及其博客访问详情。

  我也会把宋波的原文发到http://www.elias.cn/MyProject/ExtMainText的地址

  ExtMainText3354提取本页html文档的正文…(隐藏)

  1.导言2。脚本下载2.1更新记录3。使用说明。后续改进方向5。与其他实现的比较(编辑部分)1。简介这是一个用Python语言实现的函数库,可以帮助从html文档中提取文档正文,换句话说,可以过滤页面上的广告、栏目导航等非正文内容。这个函数库可以用在从其他网站抓取文章的过程中,也可以帮助搜索引擎爬虫忽略无关内容,将页面分析集中在网页中更有价值的部分。

  该函数的基本原理是“体标记密度法”。0.2版计算网页每个html标签下的“正文长度/标签下所有字符的总长度”,取文档中密度高于设定阈值的最长部分作为文档正文输出。参见:从仲裁html中提取有用文本的简单方法。

  对于不同的网站,由于其语言特点和模板设计的不同,应该规定不同的密度阈值,根据所有标签的密度分布通过实验确定。一般英文网站可以取0.5的阈值,中文网站用0.5作为阈值也能得到不错的输出结果。

  当filterMode为False时,代码只返回最长的文本,可能会过滤掉博客的评论信息(评论文本较短时);当filterMode为True时,代码会过滤掉密度低于阈值的html片段,即可以保留多段正文,所以通常可以保留博客评论。该函数的最终输出是一个包含文档文本的html片段。如果需要进一步将提取的文本内容转换成text纯文本内容,可以调用html2text。

  英文Doc,参见:En。外部文本

  (编辑版块) 2。脚本下载版本0.2a:attach:ext main text _ 0.2a . zip版本0.2: attach: extmaintext _ 0.2.zip版本0.1a:attach:ext main text _ 0.1a . zip版本0.1:attach:ext main text _ 0.1 . zip(edit secti On)2.1更新记录2010-01-26:解决html文本中有时特殊字符导致编码错误的问题。2009-12-05:改为lxml api实现,使用新的密度计算公式,增加“使用过滤模式”选项。2008-10-21:在__main__节中添加将html转换为文本的代码,直接执行ExtMainText会给出更直观的输出;发布版本0.1a 2008-10-19:完成基本功能,发布版本0.1。(编辑版块)3。当用作库函数时,请参考源代码的DocString和“if _ _ name _= _ _ main _ _ ”部分。您也可以直接运行该脚本文件:

  【获取代码】python ExtMainText.py这样输入的html文件名,脚本会用默认参数(0.5)提取这个html文件的正文内容,转换成纯文本输出。也请注意输入html文本的编码。0.2a以后的版本只接受unicode文本作为输入,需要提前完成输入文档的解码。

  (编辑版块)4。与固定阈值相比,后续改进的方向利用神经网络等智能方法可以获得更准确的输出。建议参考并也谈谈网页文本提取【第二部分】和赖永浩老师翻译的HTML文件提取文本的简单方案。

  (编辑版块)5。与其他实现的比较:网页文本提取【第二部分】和从仲裁HTML中提取有用文本的简易方法,两篇文章的非人工智能算法部分(即使用静态阈值法提取文章文本)在算法和代码实现上完全相同。虽然都是用文字密度来标识文章的文字部分,但是他们的文字密度计算方法和我的不一样。在此,我根据个人理解做一个简单的对比分析。

  当他们计算文本密度时,他们从头到尾一步一步地解析html。当他们遇到一行纯文本内容时,他们把这一行纯文本的长度作为“文本长度”,把原始html中从这一行纯文本的末尾到上一行纯文本的末尾所跨越的字符总数作为“字符长度”,把它们的比值作为文本密度的值。这种计算方法有一定的不合理性。从物理上讲,“字符长度”应该是与修饰一段纯文本相关的html代码的总长度。然而,他们的计算方法是使用纯文本前的html标签作为其修饰符。对于前后匹配的html标签,尤其是在多层表格和div标签中包含纯文本的情况下,不能保证每层标签的结束标签都会算作这个段纯文本的修饰符。反之,很可能被算作下一行纯文本对应的字节长度分量。在极端条件下,也就是分析纯文本的第一行时,算法会把前面所有的html标签都算作字节成分,也就是包括头部分,不合理的降低了density的值。虽然扫描一般html页面遇到的第一行纯文本通常是菜单或导航部分,不太可能需要作为文本提取出来,但是这种算法实现方式并不能很好地与其预期的物理意义保持一致。

  我的实现将分析每个html标签下的所有内容。例如,对于一个div标签,该算法将包含在开始标签和其对应的结束标签之间的所有纯文本内容作为“文本长度”,并将包含的所有字节内容作为“字节长度”。通过计算文本密度,我们可以确保所涉及的字节必须与相应的纯文本紧密相关。所以对于静态阈值法,估计文字提取精度可以稍微好一点。

  当然,那两篇文章的方法也有一定的优势,那就是用线条来区分明文内容,对于人工智能后续的训练和处理,更便于人们操作和理解。然而,本文提到的神经网络方法并不是唯一的选择。也许我们可以从html标签的顺序中寻找规则,而不是文本行。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: