The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Поиск и получение подстроки в одинаковой для двух и более строк, !*! lightspeed, 11-Фев-06, 22:57  [смотреть все]
Приветствую тебя, All
Поиск и получение подстроки одинаковой для двух и более строк.
Известно, что подстрока одинаковая для всех строк - единственная одинаковая подстрока.
Ищу наименее затратный по процессорному времени (не по памяти) алгоритм.
Сделал в тупую, разбирая первую строку и проверяя каждую ее подстроку с другими строками. Не удовлетворяет производительность.
Можно-ли это сделать с помощью grep/egrep кода?
Пока, не могу ничего нормального придумать...
:(
  • Поиск и получение подстроки в одинаковой для двух и более ст..., !*! rWizard, 00:48 , 12-Фев-06 (1)
    можете привести пример разбираемого файла и того, что нужно получить?
    (если много, можно на почту )


    • Поиск и получение подстроки в одинаковой для двух и более ст..., !*! lightspeed, 04:13 , 12-Фев-06 (2)
      >можете привести пример разбираемого файла и того, что нужно получить?
      >(если много, можно на почту )

      Вот пример. Допустим есть строка:
      $text = "text не text1, опять text1 и снова text3.";
      мне нужно получить слово text1. Повторяющееся два раза в тексте.
      Знаки препинания не важны.

      я делаю так:
      if ($text =~ /([0-9A-Za-z]+) +\1/) { print "found: $1\n"; }

      И это работает, если text1 повторяется подряд. Но, если он стоит в разных частях строки, то, данный regexp не обнаруживает повторения.
      И это не понятно почему, т.к. он должен запоминать контент.

      • Поиск и получение подстроки в одинаковой для двух и более ст..., !*! jd, 07:10 , 12-Фев-06 (3)
        Не совсем понял задачу, но судя по примеру вам поможет что-то вроде (если нужно именно на perl):
        if ($text =~ /(?:^|\W)(\w+)\W.*(?<=\W)\1(?:\W|$)/) { print "found: $1\n"; }
        Конечно, нужно учесть, что \w - это не совсем то, что было в вашем примере. Он включает ещё '_'. А \W, соответственно, не включает...
        • Поиск и получение подстроки в одинаковой для двух и более ст..., !*! jd, 07:14 , 12-Фев-06 (4)
          Ну и, как справедливо замечено в книжке "Регулярные выражения" (неточное цитирование): всегда нужно учитывать контекст задачи. Вполне может оказаться, что это выражение можно уполовинить.
          • Поиск и получение подстроки в одинаковой для двух и более ст..., !*! lightspeed, 12:01 , 12-Фев-06 (5)
            >Ну и, как справедливо замечено в книжке "Регулярные выражения"
            >(неточное цитирование): всегда
            >нужно учитывать контекст задачи. Вполне может оказаться, что это выражение можно
            >уполовинить.

            Да, это примерно то, что нужно.
            А теперь вопрос, как получить некую матрицу, где по вертикали слова найденные в совпадении, а по горизонтали количество совпадений данного слова? Т.е. задача понимания некоего текста, основанная на статистическом подсчете количества совпадений. А затем сравнение данных совпдадений с некоей строкой поиска. Чем выше количество совпадений, тем выше статус данного текста для данной строки поиска.
            Пример: Google.
            Используя данный алгоритм можно получить 1-е совпадение. А как с оставшимися словами, совпадающими в тексте далее?

            • Поиск и получение подстроки в одинаковой для двух и более ст..., !*! Wulf, 16:48 , 12-Фев-06 (6)
              > Используя данный алгоритм можно получить 1-е совпадение. А как с оставшимися словами, совпадающими в тексте далее?

              Вы сразу задачу полностью ставьте. В первоначальном посте Вам требовалось нахождение longest common subsequence (lcs), которую опеннетовские велосипедостроители сразу предложили решить принципиально нерабочим методом (перловый регексовый конечный автомат находит первое совпадение, а не ищет совпадение с максимальной длиной, как это делает posix-овский). Вместе с тем эта задача полностью изъедена 30 лет назад и тучу готовых алгоритмов с анализом, описаниями и кодом можно отыскать в гугле по вышеупомянутым трем словам.
              Потом у вас все изменилось и оказалось, что нужно multiple-patterns string matching. Т.е. несколько другое. В этом случае, как я понимаю, вам надо рыть в сторону алгоритма Ахо-Корасика (Aho Corasik)

              P.S. Прошу прощения за излишнее употребление англ. терминов

              • Поиск и получение подстроки в одинаковой для двух и более ст..., !*! Wulf, 16:58 , 12-Фев-06 (7)
                > которую опеннетовские велосипедостроители сразу предложили решить принципиально нерабочим методом
                Извиняюсь перед человеком под  ником jd, которого я по ошибке назвал "велосипедостроителем", недостаточно внимательно просмотрев тред. Он всего-лишь поправил чужой код. Велосипедостроитель, конечно, здесь автор темы.
                • Поиск и получение подстроки в одинаковой для двух и более ст..., !*! lightspeed, 00:21 , 13-Фев-06 (8)
                  >> которую опеннетовские велосипедостроители сразу предложили решить принципиально нерабочим методом
                  >Извиняюсь перед человеком под  ником jd, которого я по ошибке назвал
                  >"велосипедостроителем", недостаточно внимательно просмотрев тред. Он всего-лишь поправил чужой код. Велосипедостроитель,
                  >конечно, здесь автор темы.

                  Ну велосипедостроитель, или не велосипедостроитель, мне понадобился алгоритм, и вы мне дали. За, что вам спасибо. Как спасибо и jd, за то, что он подправил мой код.
                  :)

                  Кстати Wulf. Прочтите еще раз мой первый топик. Что я просил? Правильно, алгоритм, для того что-бы _не_ строить свой собственный велосипед.
                  Понимаете?

                  А то, что я все-го лишь попытался развить алгоритм jd, до моей второй задачи. Ну что-же, мне надо было попробывать.
                  Кстати, и алгоритм jd мне тоже очень пригодился.
                  :)

                  Т.ч. не стоит говорить про изобретательство. Или попросту говоря "наезжать". Здесь собираются, в основном специалисты. И пусть я ранее не слышал про этот алгоритм, это совсем ничего не значит.
                  Т.к. возможны вы не слышали, про другие вещи, в которых разбираюсь я.
                  :)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру