Константин Матыцын
86 сообщений
#16 лет назад
Привет всем. Посоветуйте что и как лучше сделать, чтоб сделать парсер текста. Не гуглил. Решил обратиться сразу к Вам всем
Сергей Дейнего
116 сообщений
#16 лет назад
Что парсить собираетесь?
Константин Матыцын
86 сообщений
#16 лет назад
SergeD,
текст
Илья К.
120 сообщений
#16 лет назад
Регулярные выражения
Сергей Дейнего
116 сообщений
#16 лет назад
Я понял , что текст....

так вот все зависит от структуры текста, от правил, и т.д.
Константин Матыцын
86 сообщений
#16 лет назад
SergeD,
А можна по-подробнее ?
Денис Н.
98 сообщений
#15 лет назад
Цитата ("jamper"):
Привет всем. Посоветуйте что и как лучше сделать, чтоб сделать парсер текста. Не гуглил. Решил обратиться сразу к Вам всем


Что и как лучше сделать?) Взять и написать парсер). Обычно пишут парсеры на php, (по крайней мере моё имхо и небольшой опыт).
Всё зависит от задачи - что конкретно парсить и откуда. Используют регулярные выражения.
- тут я задавал вопрос, это самое начало парсера. Загрузить содержание странички, потом выдирать то, что тебе нужно. Успехов.
Денис Радин
53 сообщения
#15 лет назад
Текст парсят на Perl , поисковики пишут на C++ , Java , C# , на PHP делают все что попало )))
Денис Н.
98 сообщений
#15 лет назад
LP_FUNKy, в php ведь предастаточно функций для парсинга. Там нехилая часть взята из perl
Михаил Валенцев
2195 сообщений
#15 лет назад
DenTal, регулярные выражения в perl будут работать быстрее.
Денис Н.
98 сообщений
#15 лет назад
Sir_Michael, c этим спорить не буду. Да и зависит всё от конкретной задачи. Отпарсить что-то, потом сложить в mysql, потом оттуда вытащить = думаю на php будет и легче и быстрее (в написании)
Дмитрий Вашкевич
35 сообщений
#15 лет назад
Цитата:
DenTal, регулярные выражения в perl будут работать быстрее.

можете развить эту фразу? когда, в каких случаях, насколько видно будет разницу в скорости и при каких условиях?
Михаил Валенцев
2195 сообщений
#15 лет назад
Churchik, можно.
Основное требование - нормальный хостинг, не virtual, т.к. в этом случае чаще всего парсинг на php будет быстрее. Использование mod_perl.
Разница в скорости может быть в разы даже при использовании PCRE в php. В google можно найти описание методик тестирования.
Николай Соловьев
710 сообщений
#15 лет назад
Цитата ("DenTal"):
Sir_Michael, c этим спорить не буду. Да и зависит всё от конкретной задачи. Отпарсить что-то, потом сложить в mysql, потом оттуда вытащить = думаю на php будет и легче и быстрее (в написании)


Будет одинаково, если знать и Perl и php в достаточной степени.
Battle=- -=last
14 сообщений
#15 лет назад
Что значит быстрее и легче (в написании) ?
если у меня наприме родной язык перл, а не пхп, то наверное мне будет быстрее и легче сделать на перле, чем на пхп. и наоборот
Денис Н.
98 сообщений
#15 лет назад
Писал, примеряя на себя. php ближе, извините уж =)
Тимур Попов
4 сообщения
#15 лет назад
ИМХО во-первых, для начала нужно определиться ЧТО ты хочешь парсить. Бо написАть универсальный парсер всего - невозможно.
Если хочешь парсить HTML:
Тут есть много вариантов, какой текст ты хочешь парсить:
Если парсить HTML, можно идти 2-мя путями:
1. Работать с текстом. Допустим, нужно выдрать какую-то информацию из страницы.
1.1 Смотришь - ЧТО ты хочешь пропарсить и смотришь - ГДЕ это в файле находится (какие теги находятся перед нужным текстом, особенно обрати внимание на ID'шники элементов).
1.2 Делаешь набор методов, которые выдирают из страницы каждый параметр в отдельности.
1.3 Пишешь метод, который берёт все нужные параметры из страницы и делает с ними что положено.

2. Работать с деревом элементов.
2.1 Тут удобнее всего представлять HTML в виде XML, для этого сначала нужно сконвертировать HTML в XHTML.
2.2 Загрузить получившуюся XML'ку как XML-документ.
2.3 Ебашыть ноды как твоей душе угодно.

Если пишешь парсер обычных текстов.
Тут я использовал 2 метода:
1. Автоматы.
Автомат, он сложен в проектировании и продумывании, но когда ты его нарисовал, мысленно протестировал - то реализовывать автомат - сплошное удовольствие. Автомат - он почти не жрёт оперативной памяти, но очч требователен к скорокти запоминающего устройства.
Если данных много - то оптимизируй их загрузку с винта (грузи по 300 кб и парси их в оперативе).
Если не знаешь что такое автоматы - погугли постейший по запросу "Конечный автомат Милли для разбора лексем".

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

Небольшое отступление:
Разделяй и сортируй.
Если объем текста, который нужно пропарсить - огромный:
Давным-давно надо было написАть парсер, который сортирует и удаляет повторения из 15 гигабайтной текстовой базы.
Сортировать пузырьком 15 гигабайт мене никак не хотелось, рОвно как и не хотелось сортировать qsort'ом (однокуйственно - сортировал бы я так сутое двое :-) ).
Выход был таким:
Парсишь 15 гигов по 1 элементу и раскидываешь их в разные файлы (у меня их было около 500) я их раскидывал по первым двум буквам.
А потом подгружаешь каждый файл в отдельности и сортируешь его сколько влезет.
--
Вот.. Сказал почти всё, что думаю по поводу парсеров.
Если будут вопросы - пиши в личку, в АСЬку или на иМейл - постараюсь помочь.
Артём Б.
32 сообщения
#15 лет назад
TimurKA, респект за ответ
Тут М.
626 сообщений
#15 лет назад
Цитата:
Использование mod_perl

Еще FastCGI вспомните. Граббер/парсер запускается в режиме CLI (часто по cron), а никак не из под Web-сервера.
Николай М.
1895 сообщений
#15 лет назад
RegExp - Вам в помощь, портированна на очень много языков, не промахнётесь