Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.131.178] |
|
Сообщ.
#1
,
|
|
|
Иногда возникает потребность в обработке больших объемов текстовой информации.
Например, нужно найти на диске С:\ все html файлы, и извлечь из них e-mail адреса, упорядочить их по домену, удалить дубли, сформировать из них таблицу и т.п. Обычно, для таких целей используют язык C++ и регулярные выражения, или различные интерпретаторы Perl. Это довольно неудобно, писать для каждой небольшой задачи программу на C++, а интерпретаторы работают медленно. Синтаксис и логика работы регулярных выражений, наверное, создана пришельцами с альфа-центавра, обычный пользователь не в силах постичь ее, и даже не представляет, какая мощь скрыта за этой абракадаброй. У меня возникла идея, создать диалект SQL для текстовой информации, чтобы, к примеру, вместо шаблона e-mail "([a-z._-]+)(@[a-z._-г]+)" можно было вводить простую команду FIND EMAIL, а это команда уже “компилируется” в регулярные выражения. При этом достигается простота запроса и мощь регулярных выражений, а сам скриптовый движок написать на оптимизированном ассемблере. Назвать его можно RE-SQL, REGULAR EXPRESSION SQL и оформить в виде DLL. Как мне кажется, RE-SQL сильно бы упростил импорт информации в базы данных. Отпадает необходимость в синтаксическом анализе информации, это бремя возьмет на себя RE-SQL, или сложная обработка текстовой информации. К примеру, нужно проверить 1000 текстовых файлов, с описанием экзаменационных билетов по высшей математике, чтобы во всех формулах текста каждой открытой скобке, соответствовала закрытая скобка, на любом уровне вложенности. Простой алгоритм с подсчетом открытых и закрытых скобок тут не прокатит, например он пропустит такую ошибку: “НОД( x, y = НОД( y, x MOD y )) если y не равно 0.” Здесь нужен синтаксический анализатор со стеком, писать который не каждый захочет. В 2003 году, мне случайно удалось увидеть, как один из сотрудников кафедры использовал самописную прогу на Visual Basic для решения этой задачи. За 40 секунд работы, она вывалила десяток формул с синтаксическими ошибками, хотя текст до этого был проверен несколько раз двумя сотрудниками. В качестве скрипт движка, там использовался язык Lua + база шаблонов регулярных выражений. К сожалению, я потерял связь с тем человеком, и его программы у меня не сохранилось. Вот такая идея, которую мне хочется реализовать. Мощная консоль для обработки текстовой информации, с простым скрипт языком наподобие SQL. Если есть идеи, поделитесь. |
Сообщ.
#2
,
|
|
|
Alex221
Ты предлагаешь взять стандартные регулярные выражения и определить для них удобочитаемые имена, т.е. сделать переходник к тому же Perl? Вроде нет. Насколько я понял, ты хочешь реализовать свои алгоритмы поиска? Только я тогда не понял на чем ты будешь основываться. Есть готовые решения вроде lexx/yacc для обработки примера со скобками, регулярные выражения в Perl, для C++ тоже есть поддержка рег. выражений, вроде в boost, есть awk и другие оптимизированные под текст средства. Ты уверен в том, что твой вариант будет правильнее и быстрее работать? Идея адаптера (допустим, интерпретатор со своими командами, или макросы/библиотека для С++), который использует стандартные средства - это может быть интересно. Сам в свое время долго разбирался с Perl, и так до конца не разобрался. А доверять твоей трактовке регулярный выражений и оптимизации я бы не стал - просто в силу того, что готовые средства используются каждый день по многу раз, а у тебя надо будет долго ловить баги. (все это естественно имхо). Удачи! |