На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Диалект SQL для смешанных данных. , Поиск, сортировка, извлечение данных из текста
    Иногда возникает потребность в обработке больших объемов текстовой информации.
    Например, нужно найти на диске С:\ все 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.

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

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

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

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

      Удачи!
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0216 ]   [ 15 queries used ]   [ Generated: 23.04.24, 17:57 GMT ]