Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Обсуждаем новые идеи > Диалект SQL для смешанных данных.


Автор: Alex221 20.03.05, 10:41
Иногда возникает потребность в обработке больших объемов текстовой информации.
Например, нужно найти на диске С:\ все 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.

Если есть идеи, поделитесь.

Автор: Kutushut 22.03.05, 09:50
Alex221
Ты предлагаешь взять стандартные регулярные выражения и определить для них удобочитаемые имена, т.е. сделать переходник к тому же Perl? Вроде нет.
Насколько я понял, ты хочешь реализовать свои алгоритмы поиска? Только я тогда не понял на чем ты будешь основываться. Есть готовые решения вроде lexx/yacc для обработки примера со скобками, регулярные выражения в Perl, для C++ тоже есть поддержка рег. выражений, вроде в boost, есть awk и другие оптимизированные под текст средства.
Ты уверен в том, что твой вариант будет правильнее и быстрее работать?

Идея адаптера (допустим, интерпретатор со своими командами, или макросы/библиотека для С++), который использует стандартные средства - это может быть интересно. Сам в свое время долго разбирался с Perl, и так до конца не разобрался.

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

(все это естественно имхо).

Удачи!

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)