Улучшение [1.1.693] HTML::TextExtractor - анкорный текст

HoneyMoney

A-Parser Enterprise License
A-Parser Enterprise
На данный момент в настройках этого парсера есть опция пропуска (или обработки) анкорного текста. Насколько я вас понимаю, вы это сделали (галочка skip anchor text), чтобы не парсились элементы меню. Но с этой опцией тогда исчезают из текста красиво вписанные анкоры, которые являются неотъемлемой частью текста. Если мне нужны грамотные тексты (а яндекс их хорошо вычисляет) и отсутствие огромных списков из элементов меню, то такой опции просто нет.
Поэтому предлагаю решение:
1) опцию skip anchor text переназначить или добавить дополнительное skip menu elements
2) алгоритм определения, что это пункт меню, а не гармонично вписанный в текст анкор, прост - это анализ окружения: ссылка в пункте меню, как правило, окружена html-тэгами (признаки ><), а ссылка в тексте окружена элементами текста, а именно знаками препинания (,!., круглые скобки и т.д.), пробелами и буквами/цифрами.

PS. Очень нужны тексты анкоров, которые находятся в тексте, и очень не нужны множества элементов меню.
 
skip anchor text сделан не для пропуска меню, а для пропуска безанкорных ссылок
существующим алгоритмом отделить меню от текста затруднительно
 
Подскажите, пожалуйста, как тогда мне предварительно удалить из страницы все ссылки, соответствующие условие Regex ><a .+?</a><

После этого уже HTML::TextExtractor будет парсить контент, в котором не будет вышеуказанных ссылок
 
Последнее редактирование:
никак, сбор текста идет до обработки регулярок, ну и такая регулярка вырежет из текста все анкоры
 
почему же все анкоры? Только те, которые окружены html-тегами.
Например, <li><a href="#">anchor</a></li> будет удаляться, потому что есть признаки конца html-тегов > и начала html-тегов <.
А вот в этом примере "Самый лучший <a href="https://a-parser.com">парсер</a> называется A-Parser" анкор не будет удален, потому что он окружен пробелами и текстом, то есть не html-тэгами
 
пробелы, табы, переносы строк могут быть(и обычно есть в меню), пример разметки:
Код:
<li>
    <a href="#">anchor</a>
</li>

ровно как и в тексте может быть:
Код:
Самый лучший <b><a href="https://a-parser.com">парсер</a></b> называется A-Parser
 
это уже детали, Вы правильно показали во втором примере, что теоретически теги выделения текста могут присутствовать, то есть мы понимаем, что это внутри текста.
В первом же случае ссылку от тега списка отделяет множество пустых символов (пробелы, пустые строки, переносы) и мы понимаем, что это не внутри текста.

З.Ы. Когда я вижу в спаршенном тексте в конце предложения Ответить Написать Автору В Избранное, то сердце кровью обливается :))
 
Более того, по статистике в подавляющем числе случаев пункты меню идут списками <ul><li><a></a></li></ul>.
Если бы можно было соблюдать такое условие <li[^>]*>[\r\n\s]*<a></a>[\r\n\s]*</li>, то исбавились бы от огромного кол-ва текстового мусора.
 
Последнее редактирование:
это все какой то частный случай, я могу привести множество примеров где это не будет работать, и тогда будут уже пропускаться блоки с настоящим текстом

я добавил пропуск блоков состоящих только из анкорных текстов, но это не поможет если в меню есть хотя бы надпись "Меню:"
 
В какой версии этот пропуск блоков будет уже доступен?
 
Назад
Верх