На данный момент в настройках этого парсера есть опция пропуска (или обработки) анкорного текста. Насколько я вас понимаю, вы это сделали (галочка 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>, то исбавились бы от огромного кол-ва текстового мусора.
это все какой то частный случай, я могу привести множество примеров где это не будет работать, и тогда будут уже пропускаться блоки с настоящим текстом я добавил пропуск блоков состоящих только из анкорных текстов, но это не поможет если в меню есть хотя бы надпись "Меню:"