Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Универсальный парсер HTML (doc, pdf), data mining 
:(
    Опции темы
dereyly
Дата 15.7.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 1
Всего: 4



Какое то время занимаюсь разработкой, разнообразных парсеров, которые по html-тегам выделяют: текст сообщения, автора текста, дату написания и т.д. Можно назвать данную задачу не парсингом а простейшим data-mining'ом. Так вот вопрос какими средствами лучше решать данный вопрос, библиотеки или ссылку на описания алгоритма или идеи алгоритмов? точнее как сделать все более менее универсально.

То что уже есть: написал несколько алгоритмов которые перебирают шаблоны. Шаблон это частичное дерево переходов по html-тегам обход идет методом конечных автоматов. Работаю с новостями и новостными лентами рус и англ. 1-шаблон 1- сайт и любое изменение или неучтенный фактор ведет к ошибке.
PM MAIL   Вверх
maxdiver
Дата 17.7.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 29.1.2008
Где: Саратов

Репутация: 16
Всего: 18



А шаблоны строгие? И приходится ли учитывать всю информацию, включая всякие css-классы, или всё-таки на практике достаточно обходиться именами тегов?
PM MAIL WWW ICQ   Вверх
dereyly
Дата 18.7.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 1
Всего: 4



Цитата(maxdiver @ 17.7.2009,  22:07)
А шаблоны строгие? И приходится ли учитывать всю информацию, включая всякие css-классы, или всё-таки на практике достаточно обходиться именами тегов?

Для большинства сайтов подходит просто модель переходов по тегам, но редко нужно указывать классы. Я сделал шаблоны к 16 иностранным новостным сайтам и к 2 из них использовали css-классы. (Минус css-классов: из них сложнее получить int для последующих сравнений, а тегов мало, и мы смело их в std::map кидаем (хеш или дерево -- все равно)). Но проблема моего парсера, то что 1  шаблон -- 1 сайт. Так же я пробовал читать rss (лента.ру, риан, рбк), там проще, так-как из rss я основную инфу получаю: дату, название, категорию. После этого перехожу по линку и читаю только текст. Для данных сайтов подойдет 1 шаблон, так как текст чаще всего характеризуется линком <p> (иногда <br>) и заканчивается <div> или <table>.

Сформулировал некоторые эвристики:
1. В текстовом блоке встречаются теги <p> <br>
1а. Если теги <p> встречаются в разных местах (разделены <div> или <table>), то текст находится там где данных тегов больше.
2. Текст имеет наибольшее количество символов на одном уровне дерева.
3. Текст является блоком информации, содержащим не более k-ссылок.

Но эвристики тоже не очень спасут мир. Лучше б сравнивать похожие сайты и находить закономерности основанные на статистике. Только я недодумал какой механизм получения статистики. Первая идея была написать совпадающие теги, ведущие к заданному фрагменту. Вторая - ввести характеристики: текст в центре экрана; список тегов в фрагменте; количество ссылок в фрагменте; количество символов и т.д.

Короче, путного мало, а велосипед изобретать неохота. Тема достаточно простая, и парсеры писали тоннами, только вот методичного описания я так и не нашел.

Это сообщение отредактировал(а) dereyly - 18.7.2009, 14:14
PM MAIL   Вверх
Dims
Дата 26.7.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 1
Всего: 11



Есть понятие "грамматики". Грамматика -- это набор правил порождения одних цепочек из других. Комбинируя эти правила (произвольно) можно получить любой текст на заданном языке (грамматически-правильный, но необязательно по смыслу).

Обычно в последнее время во всех мануалах по всем языкам синтаксис указывается при помощи этих грамматик.

Вот объяснение из мануала по джаве: http://java.sun.com/docs/books/jls/third_e...l/grammars.html

Прелесть грамматик в том, что их можно выполнять в обратную сторону и тогда они будут распознавать структуру текста. Обычно такой процесс выполняется в несколько проходов, распознавая как бы несколько уровней текста. Например, лексику и синтаксис. 

Так, при распознавании HTML можно было бы сперва распознать отдельные теги, а на втором проходе объединить их в блоки.

Я видел библиотеки, которые позволяют работать с любыми грамматиками. Есть так же библиотеки, которые позволяют такие грамматики кодировать.



Это сообщение отредактировал(а) Dims - 26.7.2009, 20:14
PM MAIL   Вверх
dereyly
Дата 27.7.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 16.6.2006

Репутация: 1
Всего: 4



Цитата(Dims @ 26.7.2009,  20:13)
Есть понятие "грамматики". Грамматика -- это набор правил порождения одних цепочек из других. Комбинируя эти правила (произвольно) можно получить любой текст на заданном языке (грамматически-правильный, но необязательно по смыслу).

Обычно в последнее время во всех мануалах по всем языкам синтаксис указывается при помощи этих грамматик.

Вот объяснение из мануала по джаве: http://java.sun.com/docs/books/jls/third_e...l/grammars.html

Прелесть грамматик в том, что их можно выполнять в обратную сторону и тогда они будут распознавать структуру текста. Обычно такой процесс выполняется в несколько проходов, распознавая как бы несколько уровней текста. Например, лексику и синтаксис. 

Так, при распознавании HTML можно было бы сперва распознать отдельные теги, а на втором проходе объединить их в блоки.

Я видел библиотеки, которые позволяют работать с любыми грамматиками. Есть так же библиотеки, которые позволяют такие грамматики кодировать.

Спасибо за совет, но все же это несколько не то. Последовательность HTML-тегов не порождает однозначного варианта по расположению структурных элементов в тексте.  Тут проблема HTML языка, то что он слишком мягок и анализ на основе грамматик вряд ли даст результат, так как при анализе естественного языка. 
Но все же ваши рассуждения наталкивают на мысль о преобразование HTML в упрощенную форму, по которой легче можно судить о принадлежности заданного фрагмента струтурообразующему элементу. Так же я наткнулся в инете на правильную мысль что можно конвертить в XHTML и после этого парсить, так как чем ближе язык к XML  тем проще  smile 

PM MAIL   Вверх
Dims
Дата 27.7.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 1
Всего: 11



Мне кажется, Вы неправы. HTML прекрасно распознаётся грамматиками. Другое дело, что полное распознавание может потребовать очень сложную грамматику. 

Обращаю внимание, что понятие грамматики -- это не про русский язык. Это чисто компьютерный термин. Фактически, когда вы составляете регекспы -- вы пользуетесь понятием грамматики.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.