From fbd91df52c6f88f1e55a7f3152d4dc6f528d749e Mon Sep 17 00:00:00 2001 From: DarkCat09 Date: Wed, 25 Dec 2024 12:08:03 +0400 Subject: [PATCH] describe until topCandidates --- explained.ru.txt | 53 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/explained.ru.txt b/explained.ru.txt index d3699f9..2a178b1 100644 --- a/explained.ru.txt +++ b/explained.ru.txt @@ -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