describe until topCandidates
This commit is contained in:
parent
463f2cf798
commit
fbd91df52c
1 changed files with 52 additions and 1 deletions
|
@ -177,7 +177,58 @@ let contentScore = 1;
|
|||
|
||||
24.1. Если текущая нода -- не элемент, либо у неё нет родителя, либо её родитель -- не элемент, то пропускаем
|
||||
|
||||
24.2. // line 1240
|
||||
Теперь нам нужно записывать баллы "полезности" каждого из ancestors. Они НЕ равны contentScore элемента вне цикла пункта 24, мы их сейчас будем считать отдельно. В ридабилити баллы элемента сохраняются в поле DOM-объекта ноды .readability.contentScore (см. ниже в 24.2)
|
||||
|
||||
24.2. Если у текущего элемента есть поле .readability, то переходим сразу к 24.3, иначе элемент необходимо "проинициализировать":
|
||||
|
||||
node.readability = { contentScore: 0 };
|
||||
|
||||
Посмотрим на тег элемента и добавим к .readability.contentScore за него баллы:
|
||||
|
||||
div => +5
|
||||
pre, td, blockquote => +3
|
||||
|
||||
А за эти теги убавим баллы:
|
||||
|
||||
address, ol, ul, dl, dd, dt, li, form => -3
|
||||
h1-6, th => -5
|
||||
|
||||
Посмотрим на класс.
|
||||
Если он матчится по регулярке
|
||||
|
||||
/-ad-|hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|footer|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|widget/i
|
||||
|
||||
то -25 баллов к node.readability.contentScore.
|
||||
А если он матчится по регулярке
|
||||
|
||||
/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i
|
||||
|
||||
то +25 баллов к .readability.contentScore.
|
||||
|
||||
Аналогично делаем для айди: матч по первой регулярке отнимает 25, матч по второй прибавляет 25.
|
||||
|
||||
24.3. Теперь вспоминаем про contentScore для элемента вне цикла пункта 24, для которого мы искали предков. Баллы полезности этого элемента частично получают и его предки.
|
||||
|
||||
Если текущий ancestor (мы ещё в цикле 24, напоминаю) -- это родитель элемента вне цикла, то есть индекс в массиве ancestors у него = 0 (первый найденный предок), то делитель = 1, и к баллам полезности предка node.readability.contentScore мы прибавляем баллы полезности элемента вне цикла contentScore (делённые на 1, то есть родителю достаются все баллы).
|
||||
|
||||
Если текущий ancestor -- это родитель родителя элемента вне цикла, то есть его индекс в массиве ancestors = 1 (второй найденный предок), то делитель = 2, и к его баллам полезности .readability.contentScore мы прибавляем половину contentScore элемента вне цикла.
|
||||
|
||||
Если уровень/глубина предка >= 2, то есть он выше родителя родителя, считаем делитель так: level * 3, где level -- это индекс в массиве ancestors (от 0 до 4, так как мы брали максимум 5 предков, точнее, от 2 до 4, так как значения делителей для индексов 0 и 1 отдельно уже указаны выше), прибавляем к баллам полезности предка .readability.contentScore баллы полезности элемента вне цикла contentScore / делитель.
|
||||
|
||||
С кодом понятнее, думаю:
|
||||
|
||||
let scoreDivider;
|
||||
// level -- индекс в ancestors
|
||||
if (level === 0) {
|
||||
scoreDivider = 1;
|
||||
} else if (level === 1) {
|
||||
scoreDivider = 2;
|
||||
} else {
|
||||
scoreDivider = level * 3;
|
||||
}
|
||||
ancestor.readability.contentScore += contentScore / scoreDivider;
|
||||
|
||||
Обратите внимание, contentScore мы явно не записывали элементу вне цикла 24, а только передавали эти баллы его родителю, а также частично другим предкам.
|
||||
***
|
||||
|
||||
*** Часть 3
|
||||
|
|
Loading…
Add table
Reference in a new issue