readability-lxml 源码解析(四):总结

简介: readability-lxml 源码解析(四):总结
score = (
      class_weight + name_weight + 
      children_comma_count + 1 + min(children_text_len //  , 3)
) / (1 - link_density)

(1)正文元素,就是只在正文中可能出现的元素,比如<h1>~<h6> <p> <pre> <blockquote>这三个,导航栏什么的绝对不可能有,侧栏也很少出现这些东西。

(2)正文容器,就是包含正文并且不包含正文之外元素的元素。可能是<div> <section> <article> <main>,也可能是<td> <span>什么的(不常见)。我觉得可以只在这里面选,Readability 只是做了加权,并没有对标签名称做硬性限制。

(3)元素和容器的距离,Readability 限制为 2,也就是取正文元素的父节点和祖父节点。我觉得可以制定一套规则,按照距离衰减,比如衰减指数是距离分之一。

(4)ID 和类名是重要的判断依据。这些名称分为正面和负面关键词,正面加权重,负面减权重。并且每一个关键词还分为可能和确定,不过意思正好相反。确定的关键词用于加减权重,可能的关键词用于筛选。例如,可能的正面关键词的标签会保留,而可能的负面关键词标签一定会移除。

但是,在找不到候选标签的情况下,会不移除可能负面关键词再试一次。这块就显得啰嗦和麻烦。比如给确定和可能的关键词指定不同的权重,避免移除某个关键词造成的二次返工。

(5)从公式中可以看出 Readability 还考虑了文本长度,逗号个数和链接密度,用于区分导航和正文。我觉得可以考虑一下文本密度。

(6)Readability 还考虑了候选元素的兄弟也可能是候选,即正文包含在多个<div>的情况。

相关文章
|
8天前
yolo-world 源码解析(六)(2)
yolo-world 源码解析(六)
18 0
|
8天前
yolo-world 源码解析(六)(1)
yolo-world 源码解析(六)
12 0
|
8天前
yolo-world 源码解析(五)(4)
yolo-world 源码解析(五)
19 0
|
8天前
yolo-world 源码解析(五)(1)
yolo-world 源码解析(五)
31 0
|
8天前
yolo-world 源码解析(二)(2)
yolo-world 源码解析(二)
21 0
|
8天前
Marker 源码解析(二)(3)
Marker 源码解析(二)
13 0
|
22天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
51 1
|
26天前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
41 0
|
8天前
Marker 源码解析(一)(4)
Marker 源码解析(一)
12 0

推荐镜像

更多