Алгоритм обработки

Алгоритм обработки.

Для каждого подраздела обработка проходит следующим образом:

1. Получение страницы подраздела с сайта образовательной организации.

2. Выбор всех тегов с микроразметкой в единый список.

3. Формирование облегченного дерева с микроразметкой.

3.1 Алгоритм осуществляет проход по списку и для каждого помеченного тега происходит поиск родительского тега с пометкой. Если поиск успешен, то данный тег записывается как родительский. Также текущий тег добавляется в список дочерних родительского. Данный проход необходим для облегчения структуры, так как в HTML документе между родительским и дочерним тегом могут быть не помеченные теги. В результате формируется список только помеченных тегов со ссылкой на родительский тег каждого элемента (если родительского тега нет, то тег корневой).

3.2 Алгоритм проверяет наличие дополнительных страниц. Если такие страницы есть, то алгоритм также проходит по ним и добавляет найденные теги к общему списку.

4. Производится подсчет и группировка тегов по дереву с микроразметкой:

4.1 Осуществляется проход по всем элементам дерева, сформированного на предыдущем шаге. Для каждого тега производится проверка:

4.1.1 Нужен ли родительский тег для тега с данной сигнатурой. Родительских тегов может быть несколько, поэтому для поиска необходимо отступить назад по дереву родителей данного тега и записать первый подходящий по сигнатуре. Если родительских тегов для текущего тега не найдено или не предусмотрено, то тег считается корневым.

4.2 Добавление тега в список расчета:

4.2.1 Если тег корневой, то происходит поиск в списке корневых тегов такой сигнатуры. Если сигнатура найдена, то значение счетчика увеличивается на 1, если нет, то сигнатура добавляется в список и счетчику устанавливается значение 1.

4.2.2 Если тег имеет родителя, то алгоритм проходит по списку корневых тегов и осуществляет поиск сигнатуры родительского тега. Если сигнатура найдена, то далее происходит поиск данного тега в списке дочерних тегов для данного тега. Если такой тег уже есть в списке родительского, то значение счетчика увеличивается, если нет, то тег добавляется в список дочерних со значением счетчика, равным 1.

Замечание. Если в результате работы алгоритма корневой тег не найден, то данный тег будет добавлен в качестве корневого. Иерархия со вложенностью больше 1 не поддерживается в расчете.

5. Происходит дополнительная проверка и запись результатов:

5.1 Алгоритм проходит по дереву тегов, которое было подсчитано на предыдущем этапе. Проход происходит с обходом дочерних тегов, т.е. как по плоскому списку:

5.1.1 Алгоритм на основе сформированного ранее единого списка осуществляет поиск тега по сигнатуре тега и его родителя. Если ближайший родитель не является родительским тегом для конкретного тега, то осуществляется поиск родителя родителя. Если информация не найдена, алгоритм возвращает значение "не найден".

5.1.2 Если алгоритму не удалось найти родителя для тега, то осуществляется поиск тега с такой сигнатурой. Если тег не найден, то алгоритм возвращает значение "не найден".

5.1.3 Происходит подготовка тегов. В список попадают теги из единого списка в случае, если у проверяемого тега нет родителей и у тега из единого списка родителя быть не должно, а также те теги, у которых есть родитель и у тега из единого списка так же есть родитель.

5.1.4 Алгоритм осуществляет проход по найденным тегам (если теги, удовлетворяющие условиям не найдены, то алгоритм его пропускает):

5.1.4.1 Алгоритм проверяет, используется ли тег вузом. Если нет, тег пропускается.

5.1.4.2 Алгоритм проверяет, что тег относится к разделу. В противном случае, тег пропускается.

5.1.4.3 В том случае, если тег валидный и относится к разделу, тег записывается.