За последние 24 часа нас посетили 137107 программистов и 2310 роботов. Сейчас ищут 1235 программистов ...

Замена букв в словах

Тема в разделе "PHP для новичков", создана пользователем Alex_ST, 5 дек 2011.

  1. Alex_ST

    Alex_ST Активный пользователь

    С нами с:
    5 дек 2011
    Сообщения:
    23
    Симпатии:
    0
    Нужно для работы скрипт написать, от части понятно, но от части немогу всё в единое целое собрать, смысл вот в чем:
    нужно заменить и записать слово с всевозможными опечатками которые могут возникнуть при "слепой" печати на клаве.
    Вот как этот скрипт работает
    seo2web.ru

    С алгоритмом немогу полностью сообразить, т.к. пхп изучаю довольно недавно.
     
  2. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Из того, что я увидел по ссылке выше, то варианты алгоритма следующие:
    • - "съесть" последовательно каждый символ в запросе;
      - продублировать каждый символ в запросе дважды;
      - переставить соседние символы местами;
      - заменить символ на соседний по клавиатуре;
      - дальше изучать не стал...
    Если есть проблемы с реализацией, то просьба задавать конкретные вопросы, но прежде прочитать это http://php.net/manual/en/ref.strings.html
     
  3. Alex_ST

    Alex_ST Активный пользователь

    С нами с:
    5 дек 2011
    Сообщения:
    23
    Симпатии:
    0
    меня только интересует смена местами и замена одних букв на те которые возможны при слепой печати.
    Тут посути, как оно в моем представлении. Допустим у меня файл в нем десять строк в каждой строке по несколько словосочетаний. Я заставляю читать скрипт построччно, прочитали первую строку, разбили ее в массив по буквам. И тут я стопорюсь.
    Так то сам процес понятен, меняем первую букву на возможные ошибки, после каждой ошибки записываем полученное в файл, вот к примеру у меня для буквы Z есть 10 возможных ошибок
    Z a s x zz za az zs sz xz zx
    т.е. к примеру взял слово ZOO
    получается только по первой букве 10 слов
    aoo
    soo
    xoo
    zzoo
    zaoo
    azoo
    zsoo
    szoo
    zxoo
    xzoo
    потом переходим к следеющей букве и т.д.
     
  4. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Написал на быструю руку следующий код для перестановки символов в строке
    PHP:
    1. <?php
    2. $string = 'Hello, World!';
    3. $lengthOfString = strlen($string);
    4. // количество вариантов будет равно количеству символов в строке
    5. for($i = 0; $i < $lengthOfString; $i++){
    6.     // обработанная строка
    7.     $newString = '';
    8.     // времення копия исходной строки
    9.     $stringTemp = $string;
    10.     for($j = 0; $j < $lengthOfString; $j++){
    11.         // если позиция текущего символа в строке не равна номеру варианта текущего варианта, то символы не переставляем местами, иначе то, что в else
    12.         if ($j != $i
    13.             || !isset($stringTemp[$j + 1])) {
    14.             $newString .= $stringTemp[$j];
    15.         } else {
    16.             $newString .= $stringTemp[$j + 1];
    17.             $stringTemp[$j + 1] = $stringTemp[$j];
    18.         }
    19.     }
    20.     // вывод обработанной строки
    21.     echo ($i + 1) . '. ' . $newString . '<br />';
    22. }
    , результатом будет
    . Аналогично можно реализовать все остальные варианты, которые используются...
     
  5. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Alex_ST
    тут вопрос больше не в пхп, а в алгоритме. реализация поиска ближайшего слова - это очень давняя задача, которая имеет множество решений, ни одно из которых нельзя назвать идеальным.

    погугли "поиск опечаток, n-граммный поиск, триграммный индекс, нечёткий поиск" и т.д...
    как пример, ссылка на статью в хабре http://habrahabr.ru/blogs/algorithm/123320/
     
  6. Alex_ST

    Alex_ST Активный пользователь

    С нами с:
    5 дек 2011
    Сообщения:
    23
    Симпатии:
    0
    большое спасибо. Пару идей в голове появилось, сейчас накидаю на бумаге, а завтра потестирую . Еще раз спасибо!