| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > проверки орфографии |
| Автор: mclight 5.4.2007, 09:41 | ||
| Здравствуйте. на сайте есть : 1) форма поиска........ 2) определенное кол-во того что может ввести пользователь. Надо сделать так, чтобы при неправильном вводе......пользователю выводилось сообщение, что-то наподобие Гугловского "Возможно, вы имели в виду: фывафываф"........ да....чуть не забыл....надо сделать так чтобы скрипт в случае неудачи попробовал поискать в перечне слов( их примерно 228 ).......и выдал бы пользователю наиболее похожий результат.........
|
| Автор: PARROT 5.4.2007, 12:12 |
| А поиск? http://www.opennet.ru/base/dev/spell_check.txt.html Другое дело проверить, будет ли оно работать, это уже другой вопрос Добавлено через 5 минут и 1 секунду http://ru2.php.net/manual/ru/ref.pspell.php внизу примеры |
| Автор: PARROT 5.4.2007, 12:29 |
| http://dklab.ru/chicken/nablas/24.html http://imtranslator.net/speller.asp |
| Автор: mclight 6.4.2007, 07:41 |
| конечно спасибо....но ничего не подходит....... |
| Автор: The Thing 9.4.2007, 14:20 |
| Так а в чем проблема-то? |
| Автор: mclight 11.4.2007, 08:20 |
| проблема в след........есть определенное кол-во глав....каждая из которых имеет свое название....... пользователь делает поиск по главам...... пользователь выбирает главу и делает поиск......все работает отлично...... но недавно решил переделать скрипт и сделать так чтоб пользователь сам вводил название главы...... так вот......хочу сделать так чтоб при неправильном написании, скрипт выводил нечто подобное, типа "Возможно, Вы имели ввиду <aasdfasf>" |
| Автор: artfabrique 15.4.2007, 16:00 |
| эта технология очень дорогая и дико грузит БД. Ты имеешь в виду поиск с учетом морфологии русского языка. ключевые слова для поиска iSpell + PHP но сразу говорю что мучится ты будешь очень долго. Мускуль не тянет некоторые запросы а если HEAP таблица во время запроса слишком большая то ваще он не будет её обрабатывать и записывать. зато на Оракле пашет и на Постаж тоже кле как. Есть вариант делать для самых новых версий Мускуля. там есть встроенные процедуры. а у гугля подумай какие мощьности? =)) Но есть выход.. если не нада сильно заумный делать поиск (типа яндекса) то можно обойтись запросами к БД типа LIKE почитай как они пашут. там ты даже по релевантности(чем больше вхождений подстроки тем выше рейтинк строки) сможешь сортировать результаты. поищи в инете статью она одна и раздублина на разных сайтах оч хорошая если ссылку найду кину. |
| Автор: mclight 16.4.2007, 07:00 |
нет......названий глав всего 114...а поиск хочу по названиям глав......поэтому не так уж и много |
| Автор: artfabrique 16.4.2007, 08:41 |
| а ну тогда все проще как я выше написал с помощью LIKE запросов к БД. Если не в БД хранишь, то регулярками проверяй preg_match_all тебя спасёт. а ещё круче можно это сделать либа на AJAX либо просто в тупую на JavaScript. Ну как на этом форуме сделано, когда новую тему создаешь и вводишь Заголовок то ниже тебе по мере того как печатаешь выводится список тем "возможно" подходящих твоему вопросу. Можешь поискать этот модуль к IPB и позырить изнутри как оно сделано.. Маза кстати.. перед юзером список тем длинющий и помере того как он вводит слово список сокращается. Если глав немного (140) тогда можно и без аджакса обойтись.. просто с помощью пхп будешь генерить яваскриптовый массив глав и по мере написания слова будешь пробегать по нему яваскриптом и регулярками. точно! ща модуль такой для CMS напишу своей =)) |
| Автор: mclight 16.4.2007, 09:00 | ||
| опишу проблему в примере.... 1. Открывающая Книгу 2. Корова ... 113. Рассвет 114. Люди если пользователь введет "Расвет", то вывести ему сообщение....типа
|
| Автор: artfabrique 17.4.2007, 05:55 |
| ну да! я так и написал или что-то не понятно? |
| Автор: mclight 18.4.2007, 09:04 |
| т.е. ты советуешь через явяскрипт делать? все равно не понятно..... |
| Автор: artfabrique 20.4.2007, 14:20 | ||||
| я код писать не буду, так как задвая подобный вопрос изначально предпологается что ты знаком с яваскриптом и php 1)вариант 1 - сделать только с помошью яваскрипта: с помощью php генерируешь яваскриптовый массив и выдаешь его браузеру. $chArray - тут php массив имен глав
после этого ты получишь этотже массив глав токо в яваскрипте. а далше уже танцуй как хочешь. вешай событие на изменение поля ввода и пробегай яваскриптом при каждом изменении поля по массиву в поисках похожих фраз. Для этого тебе нада знать массивы, события, функции, регулярные выражения в яваскрипте. 2)вариант 2 - делаем с помощью пхп. делаешь форму строка для ввода, скрытое поле actionflag и сабмит кнопку.метод формы ставишь GET чтобы можно было сохранять ссылку на поисковый запрос. Например, поисковая строка у нас называется search далее после сабмита проверяем экшнфлаг. если он стоит в поиск значит делаем поиск. из за того что русские символы URL кодируются в GET запросах нам нада расшифровать полученные данные и сделать все нужные проверки.
далее проверяем не пытается ли кто нить нас поломать (проверяем на запретные символы строку) далее если глав не много то получаем их в массив $chArray далее пробегаемся по массиву циклом проверяя не совпадает ли полученная строка с названием тут тоже нада регулярки юзать. сложнее если пользователь сделал опечатку и слова не совпадают. далее ищи статьи на тему контекстный поиск и пользуйся кодом приведенным в них. суда возвращайся когда по делу разговор уже будет (когда будет код) |
| Автор: koloskov 20.4.2007, 16:18 |
| Советую обратить внимание на PHP функцию levenshtein. Она вычисляет расстояние Левенштейна между двумя строками (это минимальное количество вставок, замен и удалений символов, необходимое для преобразования str1 в str2) В данном случае можно применить следующим образом: 1. Задаем допустимый предел ошибок (например 10% от общего кол-ва букв слова); 2. Принимаем данные пользователя; 3. Делаем выборку из БД всех глав; 4. Циклический перебор с проверкой схожести введенной фразы той что есть в базе. Можно таким образом найти наиболее похожую фразу из БД введенной пользователем. ЗЫ: Можешь еще посмотреть на функции metaphone и soundex (поддерживается MySQL) |
| Автор: mclight 25.4.2007, 08:22 |
| ЗЫ.: насчет metaphone и soundex - пробовал....не то! |
| Автор: koloskov 25.4.2007, 13:54 |
| |