LINUX.ORG.RU

Протестируйте описание небольшого ЯП на понятность.


0

1

Не совсем П, но Я. Протестируйте пожалуйста небольшое описание небольшого ЯП на степень понятности принципа его работы.

http://sites.google.com/site/pavelkolodin/html-parsing-2

Дайте совет по улучшению документа - как английского, так и «педагогических» моментов. Спасибо.

может, стоит написать, на какие другие языки (или не языки) похож ЯП, как-то классифицировать его. Так сразу читатель свяжет со своим опытом (если таковой имеется).

Arkarar
()

ыыы!!! тут настолько много критики, что лень ее писать

с другой стороны, ты делаешь полезное дело, которое мне интересно; я щас в питере, так что можно было бы поговорить голосом (по телефону)

но если кратко тут написать, что тебе надо (для парсинга форумов), то это

язык, похожий на язык регулярных выражений, с некоторыми полезными фичами:

1. определенные подобразцы матчат только *скобочно-сбалансированные* выражения (т.е. «<some tag>» или «<table>...</table>» или «<tr>...а после него закрывающего tr нет, а сразу идет открывающий»)

2. в определенных подобразцах допускается произвольная перестановка частей (чтобы матчить атрибуты в любом порядке)

3. ну и ориентированность на выматчивание массивов, для чего указывать «страницу-продолжение»

для реализации этого тебе проще всего сделать препроцессинг в регулярные выражения (вероятно с нормализацией) и нормализацию текста

насчет нормализации текста — подумай о

<a alt=«>» href=foo>

<a href=foo alt='<div id=«который нужно заматчить»>text</div>' id=123>

www_linux_org_ru ★★★★★
()

Есть xpath. Твоя поделка никому, кроме тебя, не нужна.

baverman ★★★
()
Ответ на: комментарий от baverman

а то как же, слышал

1. как мне на нем заматчить (пример с ЛОРа)

<div class=«msg» id=«comment-6628679»>

по правилу <div че-то-там-неважно id=«comment-группа-из-нескольких цифр» опять-не-важно-что>

2. ну или чуть более сложный пример (тоже навеян ЛОРом)

<div че-то-там-неважно style=«не-важно-что margin-left: auto; опять-не-важно-что width: 728px» снова-не-важно-что>

и при этом не пропустить вариант, когда width: 728px и margin-left: auto идут в обратном порядке

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

поправка:

<div че-то-там-неважно style=«не-важно-что margin-left: auto; опять-не-важно-что width: 728px снова-не-важно-что» и-опять-не-важно-что>

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от baverman

еще один вариант:

<!-- ad --> <div>something</div> <!-- comment --> <div>other</div> <!-- comment --> <div>another</div>

необходимо выделить только комменты

и еще (хотя это и не стояло в явном виде) — есть ли потоковые библиотеки для xpath? для регулярных выражений есть (хотя, там, впрочем я на вскидку не вспомню, насколько далеко идет потоковость)

с другой стороны, у xpath есть и преимущества — например его вариант легко вытянуть из браузера

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

* необходимо выделить только комменты, а рекламу пропустить

(хотя, если xpath понимает комментарии как ноды, это наверно можно)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru
from lxml import etree
import StringIO

def get_root(body):
    return etree.parse(StringIO.StringIO(body), etree.HTMLParser())

bad_html1 = '''
<div id="comment-1">comment1</div>
<div id="comment-2">comment2</div>
<div id="comment-bad">comment2</div>
'''

for div in get_root(bad_html1).xpath('//div[starts-with(@id, "comment")]'):
    if div.attrib['id'].partition('-')[2].isdigit():
        print div.text


bad_html2 = '''
<div style="margin-left: auto; width: 728px">div1</div>
<div style="width: 728px; margin-left: auto;">div2</div>
'''

for div in get_root(bad_html2).xpath(
        '//div[contains(@style, "margin-left: auto") and contains(@style, "width: 728px")]'):
    print div.text

Жду решения тех же задач с помощью «специальных» инструментов, хе-хе.

baverman ★★★
()
Ответ на: комментарий от www_linux_org_ru

хотя, если xpath понимает комментарии как ноды, это наверно можно

Вот, ты уже ловишь фишку.

baverman ★★★
()
Ответ на: комментарий от www_linux_org_ru

есть ли потоковые библиотеки для xpath?

Ему нужен готовый DOM, поэтому даже не могу представить как это.

С другой стороны, какую самую большую HTML страницу ты видел? Я великолепно парсил html отчеты на 50 мегабайт. Все это вмещалось в 256мб памяти. Правда 100-мегабайтные отчеты на xml уже не очень, там SAX в зубы и вперед.

Почему появляются такие поделки как у ТС? Потому что им кажется, что задача хорошо формализуется. В реальности это совсем не так. В итоге их «языки» практически ничего не могут.

baverman ★★★
()
Ответ на: комментарий от www_linux_org_ru

ыыы!!! тут настолько много критики, что лень ее писать с другой стороны, ты делаешь полезное дело, которое мне интересно; я щас в питере, так что можно было бы поговорить голосом (по телефону) но если кратко тут написать, что тебе надо (для парсинга форумов), то это язык, похожий на язык регулярных выражений, с некоторыми полезными фичами:
1. определенные подобразцы матчат только *скобочно-сбалансированные* выражения (т.е. «<some tag>» или «<table>...</table>» или «<tr>...а после него закрывающего tr нет, а сразу идет открывающий»)
2. в определенных подобразцах допускается произвольная перестановка частей (чтобы матчить атрибуты в любом порядке)
3. ну и ориентированность на выматчивание массивов, для чего указывать «страницу-продолжение»
для реализации этого тебе проще всего сделать препроцессинг в регулярные выражения (вероятно с нормализацией) и нормализацию текста насчет нормализации текста — подумай о

<a alt=">" href=foo>
<a href=foo alt='<div id="который нужно заматчить">text</div>' id=123>

Спасибо за конструктивный отзыв! Можно по телефону: http://bit.ly/rf8YJG

На тему похожести на регулярные выражения:

A{4,5} : B{2} : I
найти от 4 до 5 тегов A подряд, либо 2 тега B подряд, либо тег I. То есть «похожесть» на регулярные выражения имеется, но regexp является «HTML-ориентированным».

1. Ну скобочность-сбалансированность сейчас делается руками :) Всмысле я могу найти пару <tag>... ... ...</tag> так:

TAG, * *, /TAG

Или найти её много раз:

(TAG, * *, /TAG) +

2. Произвольная перестановка атрибутов в теге допустима и сейчас.

A class id style, TEXT, /A

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

3. Ну это только язык описания шаблонов, а возможность задавать переходы по ссылкам уже расширяет язык, что в принципе тоже интересно. Дать возможность писать на диск, в базу, качать страницы - это интересно, это бОльшие возможности, это уже язык для прототипирования веб-ботов.

kiverattes ★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.