Web阅读模式:确定主页内容

人类完全了解任何给定页面的主要内容是什么。无论广告多少广告,社交小部件,饼干覆盖,或其他分心;人类可以始终发现实际内容。阅读模式可能不是那么多。

本文是Web阅读模式和读取模式解析器的系列中的第二部分。

内容分析基础知识

它并不总是如此,但今天的Web开发人员可以期望他们的网站在不同标准的Web浏览器上看和行为大多是相同的。标准网络有很好的和丰富的文档,但是这不是读取模式的所有情况。这是我希望我可以编写一个整洁的读取模式解析器的简洁摘要(第一部分见图一部分)检测页面的主要内容,并提供一些有用的准则,以确保您的页面如何符合您的页面。不幸的是,除了以下算法之外,还没有简洁的摘要或准则:yabo亚博体育下载

所有不同的读取模式解析器都尝试识别HTML元素,其中包含在文档对象模型(DOM)中几乎相同深度的重要部分的文本。根据各种标准,对DOM中的每个节点进行评分和评估。通常,具有很少的文本内容或主要包括链接的节点可以完全忽略(包括插图和表格)。Parser到Parser的确切标准很大程度上变化。

确切的文本选择算法是复杂的,并且因实现而异。例如。Mozilla可读性基于每个节点中的字符总数以及完整文本中有多少个逗号(,)基于候选DOM节点。Mozilla可读性在这里涉及文本段落的平均长度以及在每种文本或每种语言中使用逗号的使用情况。我会在下一节回到这一点。Maxthon Reader和Safari Reader以相同的方式工作,但基于按下阅读模式按钮的屏幕上的内容是否可见,显着调整分数。

那么主要内容是什么?

语义HTML5标准方法来确定页面的主要内容是寻找<主要>要么<文章>元素。当谈到阅读模式时,几乎没有共识。对于阅读模式,要么需要接近相同dom级别的大量内容,要么需要一些运气。

口袋被用文章混淆了

在他们中,并经常选择文章的最大部分,并显示为整个文章;忽略文章的其他每个部分。早期版本的Microsoft Edge也这样做了,但这在更高版本中有所改善。

Safari Reader考虑任何

在主内容内(例如本页底部的源列表)是主要内容的一部分,而可读性明确隐藏页脚。Apple可读性在隐藏内联广告和“建议阅读”呼叫行动链接段落中也有好处工作。但是,它有时会隐藏是主要内容的一部分的短段。Web开发人员可以通过应用来指导这一点instapaper_hide.他们希望隐藏的元素的类名称。InstaPars和Apple可读性是支持此显式类名的唯一实现。

一些阅读模式解析器与一些视频嵌入使用。有些只会允许视频嵌入YouTube.com.其他可能只允许嵌入视频youtube-nocookie.comdailymotion.com.。其他人仍然只允许本机音频和视频元素,同时也允许其他人允许没有嵌入的内容,并且在任何地方都不允许网上的许多最大的视频托管网站。

Chrome Dom Distiller发现它认为最有可能成为文章的DOM节点,并将其复制到读取模式中,这通常会导致杂乱的页面。

每个浏览器都会在页面加载完成时分析页面内容。这就是为什么在浏览器的主工具栏中出现读取模式按钮之前可能需要几秒钟。但是,使用无限滚动或其他动态加载行为的网站可以在加载主文档后加载它们的内容。每次阅读实施都很可怕,并确定目前的屏幕上的文章;意思是,当您单击读取模式按钮时,您可能会看到意外文章而不是您正在阅读的文章。

内容分析国际化问题

阅读模式优化用于拉丁语脚本和欧洲语言,或者我们完全诚实地诚实,它专门针对英语进行优化。我不是一个国际化专家,但我已经确定了一些流行的阅读模式解析器的一些严重问题。yabo88软件下载

Mozilla可读性根据每个块中的字符总数以及总共有多少块的字符总数分别进行分数块,总共有多少逗号(,)。然而,并非每种语言和写作系统都使用相同的字符密度在句子或段落中,而不是每种语言和写作系统都使用相同的角色,以便谦逊逗号在大多数欧洲语言中服务的角色。

逗号国际化支持表
脚本 符号 unicode. 可读性
大多数欧洲人 U + 2C. 支持的
阿拉伯 U + 60C. 不支持
中文和日语 U + 3001.

Unicode包括不包含在上表中的30多个附加符号,其在风格设置和其他写入系统和语言中以逗号服务于逗号。此外,一些欧洲语言更多地依赖于en-dashes( - )或EM-Dash( - ),其中其他语言将使用逗号。

在CJK语言中,你通常会把每个字符都算作一个完整的单词,而不是一个单独的字符。Mozilla的可读性算法根本没有解决这个问题。Apple-fork和Maxthon-fork的可读性解决了这些问题,它们更多地依赖于整篇文章在屏幕上占据的视觉空间,而不是字符数。

只有Safari Reader和Microsoft Edge可靠地支持阿拉伯语等左左右(RTL)语言,并且只有这些浏览器专门为阿拉伯语脚本设置字体。只有Safari Reader和Maxthon Reader对甚至触发汉语,日语和韩语(CJK)语言的阅读模式一致而良好的支持。只有在CJK语言中使用的Vivaldi支持垂直文本方向和布局,但由于拉丁语脚本和英语面向内容选择算法,通常不会提供读取模式。

Mozilla可读性基于详细描述的选择算法确定文档标题第三部分。此算法总是源于左右(LTR)的标题,当然,在RTL语言中不太好。

陈旧的内容

当你或其他人保存一个给定的网页时,Instapaper和Pocket会用服务保存读取模式解析后的页面副本。这为这些服务节省了大量解析和存储这些文章的潜在重复工作。这些节省也带来了一些他们独有的问题。

保存的页面不一定是您想要保存的页面。可能已经过时了几年,缺乏拼写更正和原始文章的更新等更新。即使您是唯一一个为服务保存特定网页的唯一读者,那么该副本仍然可以在您读取的时间过期。说你早上救了一个突发的新闻报道,然后开始在下午晚些时候阅读它。您可以错过已添加到原始故事的任何开发,更新和更正。

既不是服务提供发布的方法,可以将更新通知文章的方法,它们不支持HTTP缓存 - 重新验证或Web上内容传递的任何其他标准控制机制。读者也没有一种方法来强制更新保存的页面,但必须使用他们最初保存的页面查找,以查看它是否已更新,因为它是首次使用该服务的服务。

Safari Reader还有一个阅读列表,还可以为稍后的离线消费存储文章,但如果它已省略以来,它也将重新加载页面,因为您保存了它以防止它们陈旧。