Некоторое время я пытался найти способ разумного извлечения «релевантного» текста из URL-адреса путем удаления текста, связанного с рекламой, и всего прочего беспорядка. После нескольких месяцев исследований я отказался от этого как проблемы это не может быть точно определено. (Я пробовал разные способы, но ни один из них не был надежным)
Неделю назад я наткнулся на Readability - плагин, который конвертирует любой URL-адрес в читаемый текст. Мне это кажется довольно точным. Я предполагаю, что у них каким-то образом есть алгоритм, достаточно умный, чтобы извлечь соответствующий текст.
Кто-нибудь знает, как они это делают? Или как я мог сделать это надежно?
javascript
asp.net
extraction
user300981
источник
источник
Ответы:
Удобочитаемость в основном состоит из эвристики, которая во многих случаях «просто как-то хорошо работает».
Я написал несколько исследовательских работ по этой теме, и я хотел бы объяснить предысторию того, почему легко найти решение, которое хорошо работает, и когда становится трудно приблизиться к 100% точности.
Кажется, что в основе человеческого языка лежит лингвистический закон, который также (но не исключительно) проявляется в контенте веб-страницы, который уже довольно четко разделяет два типа текста (полнотекстовый и неполнотекстовый или, грубо говоря, " основное содержание "против" шаблона ").
Чтобы получить основное содержимое из HTML, во многих случаях достаточно оставить только текстовые элементы HTML (т. Е. Блоки текста, которые не прерываются разметкой), которые содержат более 10 слов. Похоже, что люди выбирают один из двух типов текста («короткий» и «длинный», измеряемый количеством слов, которые они произносят) для двух разных мотивов написания текста. Я бы назвал их «навигационными» и «информационными» мотивами.
Если автор хочет, чтобы вы быстро получили то, что написано, он / она использует «навигационный» текст, то есть несколько слов (например, «СТОП», «Прочтите это», «Щелкните здесь»). Это наиболее заметный тип текста в элементах навигации (меню и т. Д.).
Если автор хочет, чтобы вы глубоко поняли, что он / она имеет в виду, он / она использует много слов. Таким образом устраняется двусмысленность за счет увеличения избыточности. Статьи, похожие на контент, обычно попадают в этот класс, поскольку в нем больше, чем несколько слов.
Хотя такое разделение, кажется, работает во множестве случаев, оно становится сложным с заголовками, короткими предложениями, заявлениями об отказе от ответственности, нижними колонтитулами авторских прав и т. Д.
Существуют более сложные стратегии и функции, которые помогают отделить основной контент от шаблонного. Например, плотность ссылок (количество слов в блоке, которые связаны по сравнению с общим количеством слов в блоке), особенности предыдущих / следующих блоков, частота конкретного текста блока во «всей» сети, DOM-структура HTML-документа, визуальное изображение страницы и т. Д.
Вы можете прочитать мою последнюю статью « Обнаружение шаблонов с использованием функций мелкого текста », чтобы получить некоторое представление с теоретической точки зрения. Вы также можете посмотреть видео с моей бумажной презентации на VideoLectures.net.
«Читаемость» использует некоторые из этих функций. Если вы внимательно посмотрите журнал изменений SVN, вы увидите, что количество стратегий менялось со временем, как и качество извлечения читабельности. Например, введение плотности ссылок в декабре 2009 года очень помогло улучшить.
На мой взгляд, поэтому нет смысла говорить «Читаемость делает это так», не указывая точный номер версии.
Я опубликовал библиотеку извлечения содержимого HTML с открытым исходным кодом под названием котел , которая обеспечивает несколько различных стратегий извлечения. В зависимости от варианта использования лучше работает тот или иной экстрактор. Вы можете опробовать эти экстракторы на выбранных вами страницах с помощью сопутствующего веб-приложения котел в Google AppEngine.
Чтобы дать слово цифрам, см. Страницу « Benchmarks » в вики-странице котла, на которой сравниваются некоторые стратегии извлечения, в том числе котел, читаемость и Apple Safari.
Я должен упомянуть, что эти алгоритмы предполагают, что основной контент на самом деле является полным текстом. Бывают случаи, когда «основным контентом» является что-то еще, например изображение, таблица, видео и т. Д. В таких случаях алгоритмы не работают.
Привет,
Христианин
источник
читаемость - это букмарклет javascript. имеется в виду его клиентский код, который управляет DOM. Посмотрите на javascript, и вы сможете увидеть, что происходит.
Рабочий процесс и код удобочитаемости:
И если вы будете следовать файлам JS и CSS, которые извлекает приведенный выше код, вы получите полную картину:
http://lab.arc90.com/experiments/readability/js/readability.js (это довольно хорошо прокомментировано, интересное чтение)
http://lab.arc90.com/experiments/readability/css/readability.css
источник
Конечно, нет 100% надежного способа сделать это. Вы можете посмотреть исходный код для удобочитаемости здесь
По сути, они пытаются идентифицировать положительные и отрицательные блоки текста. Положительные идентификаторы (то есть идентификаторы div) будут выглядеть примерно так:
Отрицательными идентификаторами могут быть:
А еще у них есть маловероятные, а может быть, и кандидаты. Что они должны сделать, так это определить, что, скорее всего, будет основным содержанием сайта, см.
678
Строку в источнике удобочитаемости. Это делается путем анализа в основном длины абзацев, их идентификаторов (см. Выше), дерева DOM (т.е. если абзац является последним дочерним узлом), удаления всего ненужного, удаления форматирования и т. Д.В коде 1792 строки. Это действительно кажется нетривиальной проблемой, так что, возможно, вы сможете почерпнуть оттуда свое вдохновение.
источник
Интересный. Я разработал аналогичный PHP-скрипт. По сути, он сканирует статьи и прикрепляет части речи ко всему тексту (Brill Tagger). Затем грамматически неверные предложения мгновенно удаляются. Затем внезапные изменения местоимений или прошедшего времени указывают на то, что статья окончена или еще не началась. Выполняется поиск и устранение повторяющихся фраз, например, "Yahoo news sports finance" десять раз появляется на странице. Вы также можете получить статистику тона с помощью множества банков слов, относящихся к различным эмоциям. Внезапные изменения тона с активного / негативного / финансового на пассивный / позитивный / политический указывают на границу. На самом деле это бесконечно, как бы вы ни копали глубоко.
Основные проблемы - это ссылки, встроенные аномалии, стили сценариев и обновления.
источник