Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверки орфографии, что-то вроде "Возможно,вы имели в виду:" 
V
    Опции темы
mclight
Дата 5.4.2007, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



Здравствуйте.
на сайте есть :
1) форма поиска........
2) определенное кол-во того что может ввести пользователь. 

Надо сделать так, чтобы при неправильном вводе......пользователю выводилось сообщение, что-то наподобие Гугловского "Возможно, вы имели в виду: фывафываф"........

да....чуть не забыл....надо сделать так чтобы скрипт в случае неудачи попробовал поискать в перечне слов( их примерно 228 ).......и выдал бы пользователю наиболее похожий результат.........


 ! 
PARROT
Не стоит плодить посты, надо было просто отредактировать свое первое сообщение.


Это сообщение отредактировал(а) PARROT - 5.4.2007, 12:04
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
PARROT
Дата 5.4.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 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
внизу примеры


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
PARROT
Дата 5.4.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: нет
Всего: 50





--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
mclight
Дата 6.4.2007, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



конечно спасибо....но ничего не подходит.......

Это сообщение отредактировал(а) mclight - 6.4.2007, 07:44
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
The Thing
Дата 9.4.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: нет
Всего: 3



Так а в чем проблема-то?


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
mclight
Дата 11.4.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



проблема в след........есть определенное кол-во глав....каждая из которых имеет свое название.......
пользователь делает поиск по главам......
пользователь выбирает главу и делает поиск......все работает отлично......
но недавно решил переделать скрипт и сделать так чтоб пользователь сам вводил название главы......

так вот......хочу сделать так чтоб при неправильном написании, скрипт выводил нечто подобное, типа 
"Возможно, Вы имели ввиду <aasdfasf>"
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
artfabrique
Дата 15.4.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: нет
Всего: 2



эта технология очень дорогая и дико грузит БД.
Ты имеешь в виду поиск с учетом морфологии русского языка.
ключевые слова для поиска iSpell + PHP
но сразу говорю что мучится ты будешь очень долго.
Мускуль не тянет некоторые запросы а если HEAP таблица во время запроса слишком большая то ваще он не будет её обрабатывать и записывать. зато на Оракле пашет и на Постаж тоже кле как.
Есть вариант делать для самых новых версий Мускуля. там есть встроенные процедуры.

а у гугля подумай какие мощьности? =))

Но есть выход.. если не нада сильно заумный делать поиск (типа яндекса)
то можно обойтись запросами к БД типа LIKE почитай как они пашут.
там ты даже по релевантности(чем больше вхождений подстроки тем выше рейтинк строки) сможешь сортировать результаты.
поищи в инете статью она одна и раздублина на разных сайтах оч хорошая
если ссылку найду кину.
--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
mclight
Дата 16.4.2007, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



Цитата(artfabrique @  15.4.2007,  18:00 Найти цитируемый пост)
Ты имеешь в виду поиск с учетом морфологии русского языка.

нет......названий глав всего 114...а поиск хочу по названиям глав......поэтому не так уж и много
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
artfabrique
Дата 16.4.2007, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: нет
Всего: 2



а ну тогда все проще как я выше написал с помощью LIKE запросов к БД.
Если не в БД хранишь, то регулярками проверяй preg_match_all тебя спасёт.
а ещё круче можно это сделать либа на AJAX либо просто в тупую на JavaScript.
Ну как на этом форуме сделано, когда новую тему создаешь и вводишь Заголовок то ниже тебе по мере того как печатаешь выводится список тем "возможно" подходящих твоему вопросу.
Можешь поискать этот модуль к IPB и позырить изнутри как оно сделано..

Маза кстати.. перед юзером список тем длинющий и помере того как он вводит слово список сокращается.

Если глав немного (140) тогда можно и без аджакса обойтись..
просто с помощью пхп будешь генерить яваскриптовый массив глав и по мере написания слова будешь пробегать по нему яваскриптом и регулярками.

точно! ща модуль такой для CMS напишу своей =))
--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
mclight
Дата 16.4.2007, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



опишу проблему в примере....

1. Открывающая Книгу
2. Корова
...
113. Рассвет
114. Люди

если пользователь введет "Расвет", то вывести ему сообщение....типа 
Код

Возможно Вы имели ввиду "Рассвет"




Это сообщение отредактировал(а) mclight - 16.4.2007, 09:02
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
artfabrique
Дата 17.4.2007, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: нет
Всего: 2



ну да! я так и написал или что-то не понятно?
--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
mclight
Дата 18.4.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



т.е. ты советуешь через явяскрипт делать?

все равно не понятно..... smile 

Это сообщение отредактировал(а) mclight - 18.4.2007, 09:16
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
artfabrique
  Дата 20.4.2007, 14:20 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Дизайн
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 5.2.2006
Где: СПб

Репутация: нет
Всего: 2



я код писать не буду, так как задвая подобный вопрос изначально предпологается что ты знаком с яваскриптом и php

1)вариант 1 - сделать только с помошью яваскрипта:

с помощью php генерируешь яваскриптовый массив
и выдаешь его браузеру.
$chArray - тут php массив имен глав

Код

$chapters = "<script languge=\"javascript\" type =\"text\javascript\">
chapters = new array();";

$i=0;
foreach($chArray as $row) {
 $chapters .= "chapters[".$i."] = \"".$row."\"";
 $i++;
}
$chapters .="</script>";
echo $chapters;


после этого ты получишь этотже массив глав токо в яваскрипте.
а далше уже танцуй как хочешь.
вешай событие на изменение поля ввода и пробегай яваскриптом при каждом изменении поля по массиву в поисках похожих фраз.
Для этого тебе нада знать массивы, события, функции, регулярные выражения в яваскрипте.

2)вариант 2 - делаем с помощью пхп.
делаешь форму строка для ввода, скрытое поле actionflag и сабмит кнопку.метод формы ставишь GET чтобы можно было сохранять ссылку на поисковый запрос. Например, поисковая строка у нас называется search

далее после сабмита проверяем экшнфлаг. если он стоит в поиск значит делаем поиск.

из за того что русские символы URL кодируются в GET запросах нам нада расшифровать полученные данные и сделать все нужные проверки.

Код

$search = trim(urldecode($_GET['search']));


далее проверяем не пытается ли кто нить нас поломать (проверяем на запретные символы строку)

далее если глав не много то получаем их в массив $chArray
 далее пробегаемся по массиву циклом проверяя не совпадает ли полученная строка с названием
тут тоже нада регулярки юзать. сложнее если пользователь сделал опечатку и слова не совпадают.
далее ищи статьи на тему контекстный поиск и пользуйся кодом приведенным в них.

суда возвращайся когда по делу разговор уже будет (когда будет код)
--------------------
Я спасу мир! © ЙУХ 0000г.
PM MAIL WWW ICQ   Вверх
koloskov
Дата 20.4.2007, 16:18 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 20.4.2007

Репутация: 1
Всего: 1



Советую обратить внимание на PHP функцию levenshtein.
Она вычисляет расстояние Левенштейна между двумя строками (это минимальное количество вставок, замен и удалений символов, необходимое для преобразования str1 в str2)

В данном случае можно применить следующим образом:
1. Задаем допустимый предел ошибок (например 10% от общего кол-ва букв слова);
2. Принимаем данные пользователя;
3. Делаем выборку из БД всех глав;
4. Циклический перебор с проверкой схожести введенной фразы той что есть в базе.

Можно таким образом найти наиболее похожую фразу из БД введенной пользователем.

ЗЫ: Можешь еще посмотреть на функции metaphone и soundex (поддерживается MySQL)


PM MAIL   Вверх
mclight
Дата 25.4.2007, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 6.7.2005
Где: Baku, Azerbaijan

Репутация: нет
Всего: 2



 smile  как раз то что нужно.......спасибо большое!
ЗЫ.: насчет metaphone и soundex - пробовал....не то!
--------------------
Как я решал подводные камни Cakephp и не только
PM WWW ICQ MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0951 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.