![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
mclight |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 6.7.2005 Где: Baku, Azerbaijan Репутация: нет Всего: 2 |
Здравствуйте.
на сайте есть : 1) форма поиска........ 2) определенное кол-во того что может ввести пользователь. Надо сделать так, чтобы при неправильном вводе......пользователю выводилось сообщение, что-то наподобие Гугловского "Возможно, вы имели в виду: фывафываф"........ да....чуть не забыл....надо сделать так чтобы скрипт в случае неудачи попробовал поискать в перечне слов( их примерно 228 ).......и выдал бы пользователю наиболее похожий результат.........
Это сообщение отредактировал(а) PARROT - 5.4.2007, 12:04 --------------------
Как я решал подводные камни Cakephp и не только |
|||
|
||||
PARROT |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2339 Регистрация: 5.1.2005 Где: Спб-ЦарьГрад Репутация: нет Всего: 50 |
А поиск? http://www.opennet.ru/base/dev/spell_check.txt.html
Другое дело проверить, будет ли оно работать, это уже другой вопрос Добавлено через 5 минут и 1 секунду http://ru2.php.net/manual/ru/ref.pspell.php внизу примеры -------------------- Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим! |
|||
|
||||
PARROT |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2339 Регистрация: 5.1.2005 Где: Спб-ЦарьГрад Репутация: нет Всего: 50 |
-------------------- Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим! |
|||
|
||||
mclight |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 6.7.2005 Где: Baku, Azerbaijan Репутация: нет Всего: 2 |
конечно спасибо....но ничего не подходит.......
Это сообщение отредактировал(а) mclight - 6.4.2007, 07:44 --------------------
Как я решал подводные камни Cakephp и не только |
|||
|
||||
The Thing |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 286 Регистрация: 6.9.2004 Репутация: нет Всего: 3 |
Так а в чем проблема-то?
-------------------- Правильность работы программы зависит от двух велечин. В нужном месте должны стоять нолик и еденичка. |
|||
|
||||
mclight |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 6.7.2005 Где: Baku, Azerbaijan Репутация: нет Всего: 2 |
проблема в след........есть определенное кол-во глав....каждая из которых имеет свое название.......
пользователь делает поиск по главам...... пользователь выбирает главу и делает поиск......все работает отлично...... но недавно решил переделать скрипт и сделать так чтоб пользователь сам вводил название главы...... так вот......хочу сделать так чтоб при неправильном написании, скрипт выводил нечто подобное, типа "Возможно, Вы имели ввиду <aasdfasf>" --------------------
Как я решал подводные камни Cakephp и не только |
|||
|
||||
artfabrique |
|
|||
![]() Доктор Дизайн ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 5.2.2006 Где: СПб Репутация: нет Всего: 2 |
эта технология очень дорогая и дико грузит БД.
Ты имеешь в виду поиск с учетом морфологии русского языка. ключевые слова для поиска iSpell + PHP но сразу говорю что мучится ты будешь очень долго. Мускуль не тянет некоторые запросы а если HEAP таблица во время запроса слишком большая то ваще он не будет её обрабатывать и записывать. зато на Оракле пашет и на Постаж тоже кле как. Есть вариант делать для самых новых версий Мускуля. там есть встроенные процедуры. а у гугля подумай какие мощьности? =)) Но есть выход.. если не нада сильно заумный делать поиск (типа яндекса) то можно обойтись запросами к БД типа LIKE почитай как они пашут. там ты даже по релевантности(чем больше вхождений подстроки тем выше рейтинк строки) сможешь сортировать результаты. поищи в инете статью она одна и раздублина на разных сайтах оч хорошая если ссылку найду кину. --------------------
Я спасу мир! © ЙУХ 0000г. |
|||
|
||||
mclight |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 6.7.2005 Где: Baku, Azerbaijan Репутация: нет Всего: 2 |
нет......названий глав всего 114...а поиск хочу по названиям глав......поэтому не так уж и много --------------------
Как я решал подводные камни Cakephp и не только |
|||
|
||||
artfabrique |
|
|||
![]() Доктор Дизайн ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 5.2.2006 Где: СПб Репутация: нет Всего: 2 |
а ну тогда все проще как я выше написал с помощью LIKE запросов к БД.
Если не в БД хранишь, то регулярками проверяй preg_match_all тебя спасёт. а ещё круче можно это сделать либа на AJAX либо просто в тупую на JavaScript. Ну как на этом форуме сделано, когда новую тему создаешь и вводишь Заголовок то ниже тебе по мере того как печатаешь выводится список тем "возможно" подходящих твоему вопросу. Можешь поискать этот модуль к IPB и позырить изнутри как оно сделано.. Маза кстати.. перед юзером список тем длинющий и помере того как он вводит слово список сокращается. Если глав немного (140) тогда можно и без аджакса обойтись.. просто с помощью пхп будешь генерить яваскриптовый массив глав и по мере написания слова будешь пробегать по нему яваскриптом и регулярками. точно! ща модуль такой для CMS напишу своей =)) --------------------
Я спасу мир! © ЙУХ 0000г. |
|||
|
||||
mclight |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 6.7.2005 Где: Baku, Azerbaijan Репутация: нет Всего: 2 |
опишу проблему в примере....
1. Открывающая Книгу 2. Корова ... 113. Рассвет 114. Люди если пользователь введет "Расвет", то вывести ему сообщение....типа
Это сообщение отредактировал(а) mclight - 16.4.2007, 09:02 --------------------
Как я решал подводные камни Cakephp и не только |
|||
|
||||
artfabrique |
|
|||
![]() Доктор Дизайн ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 5.2.2006 Где: СПб Репутация: нет Всего: 2 |
ну да! я так и написал или что-то не понятно?
--------------------
Я спасу мир! © ЙУХ 0000г. |
|||
|
||||
mclight |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 6.7.2005 Где: Baku, Azerbaijan Репутация: нет Всего: 2 |
т.е. ты советуешь через явяскрипт делать?
все равно не понятно..... ![]() Это сообщение отредактировал(а) mclight - 18.4.2007, 09:16 --------------------
Как я решал подводные камни Cakephp и не только |
|||
|
||||
artfabrique |
|
||||
![]() Доктор Дизайн ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 5.2.2006 Где: СПб Репутация: нет Всего: 2 |
я код писать не буду, так как задвая подобный вопрос изначально предпологается что ты знаком с яваскриптом и php
1)вариант 1 - сделать только с помошью яваскрипта: с помощью php генерируешь яваскриптовый массив и выдаешь его браузеру. $chArray - тут php массив имен глав
после этого ты получишь этотже массив глав токо в яваскрипте. а далше уже танцуй как хочешь. вешай событие на изменение поля ввода и пробегай яваскриптом при каждом изменении поля по массиву в поисках похожих фраз. Для этого тебе нада знать массивы, события, функции, регулярные выражения в яваскрипте. 2)вариант 2 - делаем с помощью пхп. делаешь форму строка для ввода, скрытое поле actionflag и сабмит кнопку.метод формы ставишь GET чтобы можно было сохранять ссылку на поисковый запрос. Например, поисковая строка у нас называется search далее после сабмита проверяем экшнфлаг. если он стоит в поиск значит делаем поиск. из за того что русские символы URL кодируются в GET запросах нам нада расшифровать полученные данные и сделать все нужные проверки.
далее проверяем не пытается ли кто нить нас поломать (проверяем на запретные символы строку) далее если глав не много то получаем их в массив $chArray далее пробегаемся по массиву циклом проверяя не совпадает ли полученная строка с названием тут тоже нада регулярки юзать. сложнее если пользователь сделал опечатку и слова не совпадают. далее ищи статьи на тему контекстный поиск и пользуйся кодом приведенным в них. суда возвращайся когда по делу разговор уже будет (когда будет код) --------------------
Я спасу мир! © ЙУХ 0000г. |
||||
|
|||||
koloskov |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.4.2007 Репутация: 1 Всего: 1 |
Советую обратить внимание на PHP функцию levenshtein.
Она вычисляет расстояние Левенштейна между двумя строками (это минимальное количество вставок, замен и удалений символов, необходимое для преобразования str1 в str2) В данном случае можно применить следующим образом: 1. Задаем допустимый предел ошибок (например 10% от общего кол-ва букв слова); 2. Принимаем данные пользователя; 3. Делаем выборку из БД всех глав; 4. Циклический перебор с проверкой схожести введенной фразы той что есть в базе. Можно таким образом найти наиболее похожую фразу из БД введенной пользователем. ЗЫ: Можешь еще посмотреть на функции metaphone и soundex (поддерживается MySQL) |
|||
|
||||
mclight |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 6.7.2005 Где: Baku, Azerbaijan Репутация: нет Всего: 2 |
![]() ЗЫ.: насчет metaphone и soundex - пробовал....не то! --------------------
Как я решал подводные камни Cakephp и не только |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |