1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

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

Тема в разделе "1.1.712", создана пользователем HoneyMoney, 3 дек 2016.

  1. HoneyMoney

    HoneyMoney A-Parser Enterprise License
    A-Parser Enterprise

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

    PS. Очень нужны тексты анкоров, которые находятся в тексте, и очень не нужны множества элементов меню.
     
  2. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.336
    Симпатии:
    1.791
    skip anchor text сделан не для пропуска меню, а для пропуска безанкорных ссылок
    существующим алгоритмом отделить меню от текста затруднительно
     
  3. HoneyMoney

    HoneyMoney A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 мар 2016
    Сообщения:
    17
    Симпатии:
    2
    Подскажите, пожалуйста, как тогда мне предварительно удалить из страницы все ссылки, соответствующие условие Regex ><a .+?</a><

    После этого уже HTML::TextExtractor будет парсить контент, в котором не будет вышеуказанных ссылок
     
    #3 HoneyMoney, 4 дек 2016
    Последнее редактирование: 4 дек 2016
  4. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.336
    Симпатии:
    1.791
    никак, сбор текста идет до обработки регулярок, ну и такая регулярка вырежет из текста все анкоры
     
  5. HoneyMoney

    HoneyMoney A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 мар 2016
    Сообщения:
    17
    Симпатии:
    2
    почему же все анкоры? Только те, которые окружены html-тегами.
    Например, <li><a href="#">anchor</a></li> будет удаляться, потому что есть признаки конца html-тегов > и начала html-тегов <.
    А вот в этом примере "Самый лучший <a href="https://a-parser.com">парсер</a> называется A-Parser" анкор не будет удален, потому что он окружен пробелами и текстом, то есть не html-тэгами
     
  6. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.336
    Симпатии:
    1.791
    пробелы, табы, переносы строк могут быть(и обычно есть в меню), пример разметки:
    Код:
    <li>
        <a href="#">anchor</a>
    </li>
    
    ровно как и в тексте может быть:
    Код:
    Самый лучший <b><a href="https://a-parser.com">парсер</a></b> называется A-Parser
     
  7. HoneyMoney

    HoneyMoney A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 мар 2016
    Сообщения:
    17
    Симпатии:
    2
    это уже детали, Вы правильно показали во втором примере, что теоретически теги выделения текста могут присутствовать, то есть мы понимаем, что это внутри текста.
    В первом же случае ссылку от тега списка отделяет множество пустых символов (пробелы, пустые строки, переносы) и мы понимаем, что это не внутри текста.

    З.Ы. Когда я вижу в спаршенном тексте в конце предложения Ответить Написать Автору В Избранное, то сердце кровью обливается :))
     
  8. HoneyMoney

    HoneyMoney A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 мар 2016
    Сообщения:
    17
    Симпатии:
    2
    Более того, по статистике в подавляющем числе случаев пункты меню идут списками <ul><li><a></a></li></ul>.
    Если бы можно было соблюдать такое условие <li[^>]*>[\r\n\s]*<a></a>[\r\n\s]*</li>, то исбавились бы от огромного кол-ва текстового мусора.
     
    #8 HoneyMoney, 5 дек 2016
    Последнее редактирование: 5 дек 2016
  9. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.336
    Симпатии:
    1.791
    это все какой то частный случай, я могу привести множество примеров где это не будет работать, и тогда будут уже пропускаться блоки с настоящим текстом

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

    HoneyMoney A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 мар 2016
    Сообщения:
    17
    Симпатии:
    2
    В какой версии этот пропуск блоков будет уже доступен?
     
  11. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.336
    Симпатии:
    1.791
    в той что в шапке указана, 1.1.693
     
    HoneyMoney нравится это.

Поделиться этой страницей