Какова современная технология извлечения содержимого HTML?
Там много научной работы по извлечению содержимого HTML, например, Gupta и Kaiser (2005) Извлечение содержимого из доступных веб-страниц и некоторые признаки интереса здесь, например один, два и три, но я не совсем понимаю, насколько хорошо практика последних отражает идеи первого. Какова наилучшая практика?
Указатели на хорошие (в частности, с открытым исходным кодом) реализации и хорошие научные исследования реализаций были бы тем, что я ищу.
Постскриптум первый. Чтобы быть точным, вид опроса, который я буду, будет документом (опубликованным, неопубликованным, каким бы то ни было), в котором обсуждаются оба критерия из научной литературы, а также ряд существующих реализаций и анализирует, как неудачные реализации выполняются с точки зрения критериев. И, действительно, сообщение для списка рассылки будет работать и для меня.
Постскриптум второй Чтобы быть ясным, после ответа Питера Роуэлла, который я принял, мы видим, что этот вопрос приводит к двум подвопросам: (i) решена проблема очистки несоответствия HTML, для которого "Лучшее суп" является наиболее рекомендуемым решением, и (ii) нерешенной проблемой или разделением крутильных (в основном, шаблонов сайта и рекламных материалов) из мяса (содержание того, что люди, которые считают, что страница может быть интересной на самом деле найти релевантные. Чтобы решить проблему, новые ответы должны быть направлены явно на peoblem из-за мяса.
Ответы
Ответ 1
Извлечение может означать разные вещи для разных людей. Это одна вещь, чтобы иметь возможность справиться со всем извращенным HTML, и Beautiful Soup является явным победителем в этом отделе. Но BS не скажет вам, что является рывком и что такое мясо.
Все выглядит по-другому (и уродливо) при рассмотрении извлечения контента с точки зрения вычислительного лингвиста. При анализе страницы меня интересует только конкретный контент страницы, минус все навигационное/рекламное/и т.д. хлам. И вы не можете начинать делать интересные вещи - анализ совместного присутствия, обнаружение фраз, генерация векторных весовых атрибутов и т.д. - пока вы не избавитесь от трещины.
Первая работа, на которую ссылается OP, указывает на то, чего они пытались достичь - проанализировать сайт, определить общую структуру, а затем вычесть это и Voila! у вас есть только мясо, но они обнаружили, что это было труднее, чем они думали. Они приближались к проблеме из-за улучшенного угла доступности, тогда как я был ранним поиском парня, но мы оба пришли к такому же выводу:
Отделять рыло от мяса трудно. И (чтобы читать между строками вашего вопроса) даже после удаления трещины, без тщательно примененной семантической разметки чрезвычайно сложно определить "намерение автора", статьи. Получение мяса из сайта, такого как citeseer (чистое и прогнозируемое с очень высоким соотношением сигнал/шум), на 2 или 3 порядка проще, чем иметь дело со случайным веб-контентом.
Кстати, если вы имеете дело с более длинными документами, вам может быть особенно интересно работать над Marti Hearst (теперь профессор UC Berkely). Ее кандидатская диссертация и другие статьи о том, как делать подтопное открытие в больших документах, дали мне много информации о том, как делать что-то подобное в небольших документах (что, может быть труднее справиться). Но вы можете сделать это только после того, как избавитесь от трещины.
Для немногих, кому может быть интересно, вот некоторые предыстории (возможно, Off Topic, но сегодня я в таком настроении):
В 80 и 90 годах наши клиенты были в основном государственными агентствами, чьи глаза были больше, чем их бюджеты и чьи мечты заставили Диснейленд выглядеть серым. Они собирали все, что могли, и теперь искали технологию серебряной пули, которая каким-то образом (гигантская ручная волна) извлекала "смысл" документа. Правильно. Они нашли нас, потому что мы были этой странной маленькой компанией, которая делала "поиск сходства контента" в 1986 году. Мы дали им пару демоверсий (реальных, не поддельных), которые испугали их.
Одна из вещей, которые мы уже знали (и им потребовалось много времени, чтобы они нам поверили) заключалась в том, что каждая коллекция отличается и нуждается в специальном сканере для решения этих различий. Например, если все, что вы делаете, это жужжание газетных историй, жизнь довольно проста. Заголовок в основном говорит вам что-то интересное, и история написана в стиле пирамиды - первый параграф или два имеет мясо того, кто/что/где/когда, а затем следующие парамы расширяются по этому поводу. Как я уже сказал, это простой материал.
Как насчет журнальных статей? О, Боже, не заводи меня! Заголовки почти всегда бессмысленны, и структура варьируется от одного магнита до следующего, и даже от одной части магнита до следующего. Возьмите копию Wired и копию Atlantic Monthly. Посмотрите на крупную статью и попытайтесь выяснить содержательную 1 абзацную сводку того, о чем идет речь. Теперь попробуйте описать, как программа будет выполнять одно и то же. Соответствует ли тот же набор правил всем статьям? Даже статьи из того же журнала? Нет, они этого не делают.
Извините, что звучит как курятник, но эта проблема действительно тяжелая.
Как ни странно, большая причина для того, чтобы Google был настолько успешным, насколько это возможно (с точки зрения поисковой системы), заключается в том, что они добавляют много веса в слова и окружают ссылку с другого сайта. Этот текстовый текст представляет собой своего рода мини-сводку, сделанную человеком сайта/страницы, на которую она ссылается, именно то, что вы хотите, когда ищете. И он работает почти во всех стилях жанра/макета информации. Это положительно блестящее понимание, и я бы хотел, чтобы у меня было это. Но это не сделало бы моих клиентов хорошим, потому что не было ссылок с прошлых ночных московских телевизионных передач на какое-то случайное сообщение телетайпа, которое они захватили, или на какую-то неудачную версию египетской газеты OCR'd.
/мини-декламация-и-трип-вниз памяти полоса
Ответ 2
Одно слово: труба.
Для области новостей, на представительном корпусе, мы теперь находимся на уровне 98%/99% точности извлечения (средняя/средняя)
Также довольно независимый от языка (сегодня, я узнал, что он работает и для Непала).
Отказ от ответственности: я являюсь автором этой работы.
Ответ 3
Вы видели boilerpipe? Об этом говорится в аналогичном вопросе.
Ответ 4
Я столкнулся с http://www.keyvan.net/2010/08/php-readability/
В прошлом году я поместил удобочитаемость Arc90 для использования в проекте Five Filters. Его уже более года и Читаемость значительно улучшилась - благодаря Крису Дари и остальной части команда в Arc90.
Как часть обновления для полнотекстового RSS-служба Я начал портировать больше недавняя версия (1.6.2) для PHP и код теперь онлайн.
Для всех, кто не знаком, читаемость был создан для использования в качестве дополнения к браузеру (букмарклет). Одним щелчком мыши преобразует веб-страницы для удобного чтения и удаляет беспорядок. Apple, недавно включил его в Safari Считыватель.
Его также очень удобно для контента и поэтому я хотел сначала перенесите его на PHP.
Ответ 5
существует несколько доступных инструментов с открытым исходным кодом, которые выполняют аналогичные задачи извлечения статей.
https://github.com/jiminoc/goose, который был открыт с помощью Gravity.com
У него есть информация о вики, а также источник, который вы можете просмотреть. Есть десятки единичных тестов, которые показывают текст, извлеченный из различных статей.
Ответ 6
Beautiful Soup - надежный HTML-парсер, написанный на Python.
Он грациозно обрабатывает HTML с плохой разметкой, а также хорошо спроектирован как библиотека Python, поддерживает генераторы для итерации и поиска, точечные обозначения для доступа к дочерним элементам (например, доступ <foo><bar/></foo>' using
doc.foo.bar`) и бесшовный юникода.
Ответ 7
Я работал с Питером Роуэллом на протяжении многих лет в самых разнообразных проектах поиска информации, многие из которых связаны с очень сложным извлечением текста из разнообразия источников разметки.
В настоящее время я сосредоточен на извлечении знаний из источников "firehose", таких как Google, в том числе их RSS-каналов, которые вакуумируют огромное количество локальных, региональных, национальных и международных новостных статей. Во многих случаях названия богаты и значимы, но являются лишь "крючками", используемыми для привлечения трафика на веб-сайт, где фактическая статья представляет собой бессмысленный абзац. Похоже, это своего рода "спам в обратном порядке", предназначенный для повышения рейтинга трафика.
Чтобы ранжировать статьи даже с простейшей метрикой длины статьи, вы должны иметь возможность извлекать контент из разметки. Экзотическая разметка и сценарии, которые доминируют в веб-контенте, в наши дни ломают большинство пакетов синтаксического анализа с открытым исходным кодом, таких как Beautiful Soup, когда применяются к большим объемам, характерным для Google и подобных источников. Я обнаружил, что 30% или более минных статей ломают эти пакеты как правило. Это заставило нас переориентироваться на разработку очень низкоуровневых, интеллектуальных, основанных на характере парсеров, чтобы отделить исходный текст от разметки и сценариев. Чем точнее ваш анализ (т.е. Разделение содержимого), тем более интеллектуальными (и ручными) должны быть ваши инструменты. Чтобы сделать вещи еще более интересными, у вас есть движущаяся цель, поскольку веб-автор продолжает морфировать и изменять с развитием новых подходов, разметки и расширения языка. Это, как правило, способствует доставке информации, основанной на услугах, в отличие от приложений с термоусадочной пленкой.
Оглядываясь на годы, похоже, было очень мало научных статей, написанных о механике низкого уровня (т.е. о "практике первого", о которой вы говорите) о таком изъятии, возможно, потому, что это так зависит от домена и контента.
Ответ 8
Если вы хотите извлечь контент со страниц, которые сильно используют javascript, selenium remote control может выполнить эту работу. Он работает не только для тестирования. Главным недостатком этого является то, что вы в конечном итоге будете использовать гораздо больше ресурсов. В верхней части вы получите гораздо более точный фид данных с богатых страниц/приложений.