Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сделать парсер-генератор кода страницы 
:(
    Опции темы
JSman
Дата 26.8.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

я ПРЕДЛАГАЮ:
1 этап: разделение на логические части.
полностью убираем из страницы банеры и комментарии (по желанию пользователя).
затем убираем inline-стили, inline-script. в случае стилей - создаем классы, в случае скриптов - привязка по ID. после разделения проверяем страницу на выполнение скриптов. если без ошибок, то все ok. если все-таки скрипт привязали к иерархии, то чуть-чуть сложнее. тогда иерархию не будем трогать. 

итак, первый этап как реализуется.
с помощью JSCRIPT проходим по нодам.
1) убираем атрибуты, имеющие аналогичное значение на CSS, типа как CELLPADDING, CELLSPACING тэга TABLE.
2) создаем классы из инлайн-стилей
3) убираем инлайн-скрипты
4) закрываем незакрытые тэги.
5) приводим тэги согласно XML ( <br /> <img />), разбираемся с перекрываемостью. тем самым, избавляем страницу от ошибок.
6) убираем лишний контент: комментарии, в CSS свойства, начинающиеся на mso-... ( - от MsWord)

что имеем после 1го этапа?
3 строго отдельных части: STYLE, SCRIPT, BODY
иерархия пока не изменена.

2 этап - думаю, что лучше будет, разбирать последовательности тэгов и стилей. это и есть анализатор.

сложно, очень сложно.. 
тут в первую очередь надо определиться с самой версткой. подумаем над каждым элементом. тело документа будет состоять из 
1) блоков (DIV)  роль блоков - позиционирование (мне кажется только это, если нет поправь меня, + AJAX?)
2) таблицы
3) текстовые элементы: заголовки 6 уровней, параграфы
      в параграфы входят
  а) списки
  б) strong, i (хотя от него отказались W3C) и span (для особых стилей)
  в) анкоры и ссылки
4) инлайн-фреймы.

каждый элемент должен выполнять строго отведенную ему роль.
сначала меняем лишние тэги (например, u на span с классом), неудовлетворяющие нас.
это была подготовка.

тут нужно понять,  что нужно пользователю. варианты:
1. упростить структуру тэгов, не изменив отображение (вид) (или в допустимых рамках).
2. сделать текст читабельным, а сам дизайн - приятным на глаз
3. выделить полезное содержание

в случае 2го варианта, нужны заранее созданные стили + избавиться от горизонтальной прокрутки полностью (или учитывать исключения)

1й вариант сложноватый.
что мы имеем.. до фига тэгов с классами. цель - возможное их сокращение и приведение по правилам нашей верстки.
1) надо рассмотреть общее содержимое классов дочерних тэгов одного уровня в иерархии и объединить их. 
2) очень часто при создании в редакторах разработчики по нелепости могут выделить часть текста другим похожим шрифтом на должный. надо убирать лишние шрифты.
3) тоже самое относится к выбору цвета.

пока все было по исправлению верстки.. теперь по теме

3й вариант. добывание полезной информации.. - 
полезность -  понятие относительное!
я думаю , что лучший подход будет таков:
пользователь выделяет мышкой тот контент, который ему нужен. те, прямоугольники, которые не попали, обрабатывать/вносить в заключительную верстку не будем.
если несколько страниц с одного сайта и изначальная верстка хоть как-то соответствует шаблону, то программа может "учиться". по примеру 1-2х страниц, работать над остальной частью.


мой вывод: без воли пользователя не обойтись. пользователь должен делать ставку на полезность. нужны ли ему картинки с логотипом сайта вверху страницы или основное содержание, банеры и ActiveX и прочее
PM ICQ   Вверх
12345c
Дата 26.8.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Цитата(Sardar @  24.8.2006,  20:53 Найти цитируемый пост)
итата(12345c @  24.8.2006,  17:04 )
Вчера, например, по задаче синтеза html придумал такую вещь, как встраивание кода в шаблон, чтобы потом его исполнять в циклах по eval().
И что это получилось? Браузер сам может без всяких eval выполнить код в странице, зачем каким то путём доставать верстку со скриптами в переменную, из которой затем вырезать скрипты и выполнять как в шаблонизаторе? 

Понадобилось выполнять цикл, включающий фрагмент кода, размещённый в шаблоне. Поэтому вызываю функцию с текстом-кодом. Теперь осталось выявить закономерности в используемых шаблонах, чтобы выработать компактную функцию. Цель в том, чтобы шаблон смотрелся наглядно и естественно, примерно как математический знак суммы.
Цитата(Sardar @  24.8.2006,  20:53 Найти цитируемый пост)
Если у тебя есть справочник, то ты должен задать его структуру
Конечно, я ориентируюсь на реальные задачи. Сначала задаю структуру, потом запускаю распознаватель. По результатам джб видно, удачна структура или нет. Но в распознаватель надо включить постоянные процедуры типа игнорирования пробелов, чтобы не прописывать каждый раз их явно. Тогда распознавателем будет удобно пользоваться, и, кроме того, он будет показывать ошибки и отклонения от структуры.

Результаты первого действия  выложу в другую тему после того как напишу.

Добавлено @ 12:07 
Цитата(Sardar @  24.8.2006,  20:53 Найти цитируемый пост)
Резюмирую: какова задача? Я пока вижу три направления:
анализатор по шаблону -
это первое направление

PM WWW   Вверх
12345c
Дата 26.8.2006, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Идея баннерорезки, которую вы тут развили - она тоже парсер с правилами, алгоритм может использоваться, но это обычно делают в прокси, не на JS. 

Хотя, есть идея работать по DOM внутри сгенерированной страницы (процедура внедряется через прокси, если это в онлайне вырезают баннеры "на лету" или включается вручную строкой вызова скрипта, если идёт анализ страниц для извлекания информации по шаблону.
JSman, люди уже писали программы выбразывания мусора, сделанного в Frontpage. Если поискать по ресурсам программ, найдётся. Аналогичное должно существовать и для Word.

Но переверстать произвольный текст в правильный - сильно неопределённая задача. Нужно сначала проработат всю технику перевода (что невозможно по объёму исследования поддержки глюков разных версий бр-ров), потом расписывать строение анализатора. Упрощённая версия - ограничиваемся "каноническими" методами, которые тоже надо выделить из опыта правильной вёрстки, которые будут одинаково показываться в бр-рах. Но не исключено, что придёт новая версия и всё испортит.

Тут надо придерживаться работы по доктайпам, и, чтобы действие было признано сообществом, работа должна постоянно ссылаться на стандарты и понимать дух их развития. Если это будет, она может повлиять на выработку правильной вёрстки вообще, а так - одна из версий.

Из режимов я бы добавил к приятному на глаз ещё суперприятный на глаз smile. Дельное предложение.
Приятность надо сначала вычислить формулой, потом написать операторы  итераций, чтобы потом применить метод Рунге-Кутта smile.

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

В этом деле появилось ещё 1 направление (тоже опишу в отдельной теме) - вытащить часть вёрстки в JavaScript, чтобы брать её из кешированного скриптового файла. А то, что останется на HTML, должночитаться поисковиками и браузерами с отключённым  JS.
Цитата(JSman @  26.8.2006,  00:09 Найти цитируемый пост)
я думаю , что лучший подход будет таков:
пользователь выделяет мышкой тот контент, который ему нужен
Хороший вариант визуализации выбора контента. Правда, это уже 3-я часть программы, отдельный модуль. Изначально я предполагаю писать шаблон. Потом - подумать, как автоматизировать писание шаблона в визуальной оболочке.

PM WWW   Вверх
Sardar
Дата 26.8.2006, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(JSman @  25.8.2006,  23:09 Найти цитируемый пост)
полностью убираем из страницы банеры и комментарии (по желанию пользователя).

Как? Нука обрисуй алгоритм, по которому можно с большой долей вероятности сказать баннер перед нами или нет. Конечно большинство баннеров имеют фиксированный размер, если работать с DOM деревом, но тогда не известно как он был туда вставлен (какой скрупт). Если парсим текст сами, то как узнать что есть баннер, ведь это почти всегда замороченный JS.

Цитата(JSman @  25.8.2006,  23:09 Найти цитируемый пост)
с помощью JSCRIPT проходим по нодам.

Цитата(JSman @  25.8.2006,  23:09 Найти цитируемый пост)
4) закрываем незакрытые тэги.
5) приводим тэги согласно XML ( <br /> <img />), разбираемся с перекрываемостью. тем самым, избавляем страницу от ошибок.

В DOM дереве не существует не закрытых тегов и т.п. дерево уже разобрано, а вот при записи можно конечно привести всё к XHTML. ИМХО задача левая для JS, это не язык, на котором удобно писать анализаторы.


Цитата(JSman @  25.8.2006,  23:09 Найти цитируемый пост)
6) убираем лишний контент: комментарии, в CSS свойства, начинающиеся на mso-... ( - от MsWord)

Цитата(JSman @  25.8.2006,  23:09 Найти цитируемый пост)
2) очень часто при создании в редакторах разработчики по нелепости могут выделить часть текста другим похожим шрифтом на должный. надо убирать лишние шрифты.
3) тоже самое относится к выбору цвета.

Тебя дизайнеры расстреляют smile

Цитата(JSman @  25.8.2006,  23:09 Найти цитируемый пост)
1) блоков (DIV)  роль блоков - позиционирование (мне кажется только это, если нет поправь меня, + AJAX?)

Нет, фактически весь документ может быть отображён узлами единого типа, но с разными стилями. div это блочный элемент, т.е. имеет контейнер. Прочти CSS2 спецификацию, многое узнаешь о строении и отрисовке документов.

Цитата(JSman @  25.8.2006,  23:09 Найти цитируемый пост)
1. упростить структуру тэгов, не изменив отображение (вид) (или в допустимых рамках).
2. сделать текст читабельным, а сам дизайн - приятным на глаз
3. выделить полезное содержание

Как? Эвристика? А может нейронную сеть лет так сотню обучать, тогда может процент ошибок будеть меньше...

Цитата(JSman @  25.8.2006,  23:09 Найти цитируемый пост)
в случае 2го варианта, нужны заранее созданные стили + избавиться от горизонтальной прокрутки полностью (или учитывать исключения)

Горизонтальная прокрутка - есть результат фиксированных размеров, не влезающих в экран. "Убрать" так просто нельзя, не изменив внешнего вида (буквально страница развалиться).

Добавлено @ 20:15 
Цитата(12345c @  26.8.2006,  11:55 Найти цитируемый пост)
Но мне пока от анализатора нужно выделение информации из достаточно правильной и описанной вручную шаблонами структуры.

Вот это хорошее уточнение, значит ищем по шаблону. Наиболее просто для XML документов, это через XSLT выбрать инфу в точно известных узлах (копировать можно целые поддеревья) в новый документ. Баннеры и прочий меяющийся шум в документе не будет мешать до тех пор, пока XPath выборки указывают на требуемые ноды, т.е. структура документа в целом не меняеться.

Такой шаблон придёться делать для каждой группы документов со своей уникальной структурой. Для юзера удобной шкуркой будет выделение мышью необходимого контента, как уже говорил JSman.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
12345c
Дата 26.8.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Sardar, документы, из которых придётся что-то извлекать, обычно далеко не xml - справочники, книги, образы сайтов. С дизайном, свёрстанным вручную.

полностью убираем из страницы баннеры [/quote](Если пытаться через JS парсить реальные страницы, прежде прокси-сервером надо удалять содержимое фреймов чужих доменов, иначе не будет работать.)
[quote=Sardar, 26.8.2006,  20:06, post834438]

PM WWW   Вверх
JSman
Дата 26.8.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sardar @  26.8.2006,  20:06 Найти цитируемый пост)
 Нука обрисуй алгоритм

есть банеры 3х видов: IMG, IFRAME, ActiveXObject (Flash)

IMG делают ссылку на другой хост.
IFRAME - полностью состоит из ссылок и картинок на другой хост (Google)
Flash - вся канва перекрыта объектом button, при клике ведущий, опять же, на другой хост. доступ к объектам через свойства и тд

можно также учитывать их расположение на странице: до/после основного содержимого, отдельно сбоку странички. 

это вообще отдельная тема.


Цитата(Sardar @  26.8.2006,  20:06 Найти цитируемый пост)
В DOM дереве не существует не закрытых тегов и т.п. дерево уже разобрано

ну ты меня не понял. на этом этапе основной целью является переделка верстки. анализатор по этой части написать можно. даже на регЭксп c js


Цитата(Sardar @  26.8.2006,  20:06 Найти цитируемый пост)
Тебя дизайнеры расстреляют

ты сам знаешь, что красивые и удобные страницы пользователь не захочет править. это лишь дополнительная опция по анализу шрифта и цвета. с mso разговор КААРОТКИЙ. тут понятно.

Цитата(Sardar @  26.8.2006,  20:06 Найти цитируемый пост)
 фактически весь документ может быть отображён узлами единого типа, но с разными стилями

я замечательно знаю CSS, но, опять же, я же не просто так написал типа по-незнанию.
есть тэги, играющие по нашим правилам.
вот, что я писал
Цитата(JSman @  26.8.2006,  00:09 Найти цитируемый пост)
тут в первую очередь надо определиться с самой версткой. подумаем над каждым элементом. тело документа будет состоять из 
1) блоков (DIV)  роль блоков - позиционирование (мне кажется только это, если нет поправь меня, + AJAX?)
2) таблицы
3) текстовые элементы: заголовки 6 уровней, параграфы
      в параграфы входят
  а) списки
  б) strong, i (хотя от него отказались W3C) и span (для особых стилей)
  в) анкоры и ссылки
4) инлайн-фреймы.

мы весь обрабатываемый контент подводим по нашим правилам.
типа текст - это совокупность заголовков и параграфов. а не дивов со спанами. надо его, текст, стандартизовать, то есть вставить тэги, которые бы следовало написать.

Цитата(JSman @  26.8.2006,  00:09 Найти цитируемый пост)
тут нужно понять,  что нужно пользователю. варианты:
1. упростить структуру тэгов, не изменив отображение (вид) (или в допустимых рамках).
2. сделать текст читабельным, а сам дизайн - приятным на глаз
3. выделить полезное содержание


по 3му ясно - это выделение мышкой.

2е! если пользователь не доволен полностью отображение текста на странице, ее цветовой гамме и тд и тп, то решение сходится к созданию страницы по шаблону, с заранее подготовленными стилями.
на пример текст с комиком заменить на ариал, увеличить размер шрифта, абзацы сделать, серый ткст на сером фоне сделать черным, к черту убрать этот серый фон и тд и банер этот тоже бесит ))) это уже по приколу smile 

1е - последовательность тэгов! нужно сводить до минимума положение "контейнер в контейнере" (для див актуально). сложно,конечно, но интересно. и есть другие ситуации.

Цитата(Sardar @  26.8.2006,  20:06 Найти цитируемый пост)
Горизонтальная прокрутка - есть результат фиксированных размеров, не влезающих в экран. 

да. но для боди в некоторых случаях подойдет.

12345c, я прошу тебя четко объяснить, что ты хочешь.
я пока не особо дорубаюсь, чем твоя точка зрения принципиально отличается от изложенного выше. ну торможу я! 

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



Это сообщение отредактировал(а) JSman - 26.8.2006, 23:19
PM ICQ   Вверх
JSman
Дата 26.8.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пора определять этапы, товарищи! smile 
PM ICQ   Вверх
Sardar
Дата 27.8.2006, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(JSman @  26.8.2006,  22:37 Найти цитируемый пост)
пора определять этапы, товарищи

ОК, ладно, чисто ради прикола в свободное время:
  • берём любой html парсер, их много
  • берём любой CSS парсер, их тоже не мало
  • поверх API либ третьих лиц строим свои классы для дерева с одним типом узла, но разными CSS стилями.
  • выдаём API для фильтров, что будут перебирать дерево в п.3, модифицироват его. Экспериментируем с идеями.
На всё может уйти месяц. Если запользовать что то подобное http://html.xamjwg.org/cobra.jsp то меньше, но с кодом придёться основательно разобраться. Естественно всё на Java, JS тут физически не возможен smile

На досуге покопаюсь в кобре.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
12345c
Дата 27.8.2006, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Цитата(JSman @  26.8.2006,  23:16 Найти цитируемый пост)
зачем анализатор тогда
для анализа чужих кодов, я же раза 2 об этом написал.

PM WWW   Вверх
JSman
Дата 27.8.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sardar @  27.8.2006,  01:08 Найти цитируемый пост)
JS тут физически не возможен 

или возможен )))

давайте так (Sardar12345c) , пока начнем что-нибудь, потом покажем, совместим, что возможно, подумаем. мне надо хоть в Москву приехать, а то Сочи, море, пляж, отдых в общем. с 5го числа серьезно займусь.

для меня тут и перлом пахнет, дельфи, жс. посмотрим.
PM ICQ   Вверх
Sardar
Дата 27.8.2006, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(JSman @  27.8.2006,  19:07 Найти цитируемый пост)
пока начнем что-нибудь, потом покажем,

JSman, открывай новую тему, выкладывай конкретные маленькие задачи (например парсер CSS в дерево аттрибутов). Дизайн всей этой софтины сам придумай, я лишь с кодом на конкретные задачи в свободное время помогу.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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