danforth

danforth
Рейтинг
153
Регистрация
18.12.2015

Попробуйте что-то вроде:

RewriteRule /404.html - [L,R=404]

Вполне вероятно что приведет к зацикленному редиректу, тогда удалите строку и отпишитесь.

umka:
Далеко не все слова и названия городов с выкинутыми гласными будут одинаковы в склонениях.

Да, но дистанция в 1-3 символ - не много. Можно считать, что это искомое слово. Хотя, конечно, нужно брать контекст. Тут все зависит от фонетического разбора: чем он точнее разбирает произношение слов, тем ниже ошибка. Можно звонкие на глухие менять, и гласные не убирать, тогда точность высится. В любом случае, это более точный алгоритм, чем доверится на правильное написание города пользователем.

Вообще интересная темка, я давно хотел написать кое-какую штуку на эту тему: что-то вроде мини-поисковой системы, которая бы оценивала релевантность слова. Но пока руки не доходят, и не уверен что доведу до конца.

P.S. [umka], ваш ник ломает систему быстрого цитирования :)

Stek:
Отдать картинку и сгенерить и отдать страницу - вещи разные.

Ну у меня там несколько запросов в базу, пара к Redis, +парсинг и отдача шаблона. Не скажу, что прям ваще ресурсоемкое, но аналогичное на PHP7 с Twig и тем же Redis работает в 2.5 раза медленнее.

Первое решение было на Go, веб-сервер тоже асинхронный на Go отдающий статику.

Второе было Nginx, php7.0-fpm.

Конечно, все от кода и приложения зависит, но я к тому, что 30к в сутки, это 1 запрос в секунду при 8 часовом рабочем графике. Обычно график более размазан. 1 запрос в секунду - это не нагрузка.

rereg:
А вообще есть куча либ чтобы привести слово к базовой форме. Тот же phpmorphy

Нет никакого смысла приводить к базовой форме. Достаточно просто находить дистанцию между словами. Например: Между "Москва" и "Москве" дистанция 1 символ: "а" меняется на "е". Между "Москва" и "Моксва" - 2 символа. Предварительно, можно сделать фонетический разбор слова, есть множество алгоритмов, но не все они подходят под русский, если вкратце, то пропущенное через функцию фонетического разбора слово "Ростов-на-Дону" будет выглядеть где-то так: РСТВНДН, и даже если мы его просклоняем - слово не изменится, т.к. гласные из слова убраны, а если и слово не меняется - значит расстояние между двумя словами будет равно 0 - а это значит точное попадание. Это конечно лучше чем милторговские алгоритмы, но не идеально ввиду того, что если слово напишут "Ростов на дону" (вместо тире - пробелы), то регулярка по тире может не сработать, ну и ещё по мелким косячкам, которые сработают: например город "Обь" и слово "об" пропущенные через функцию фонетического разбора будут выглядеть как "б", что является полным совпадением с точки зрения дистанции между словами.

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

miltorg:
Извините. Но обучение - платное

Так это я вас обучаю. Если регулярка заключается в том, чтобы убрать последнюю букву у слова, типа "Москв", то да, прокатит. Для склонения слова Москва. Но не прокатит для склонения, например, Ростова-на-Дону. Ваша регулярка не сработает на "Ростов-на-Дон" в случае, если Петя решит отпраздновать Новый год в Ростове-на-Дону.

miltorg:
Зачем? Там одна регулярка.

Какая? Название города без последней буквы?

miltorg:
Города москва - не существует. Есть Москва.

Город Москва, как и москва, существует. Просто допущена ошибка в написании. Страшно представить что было-бы, если бы вы писали поисковый алгоритм Google.

- кинотеатры казани

- 0 результатов

---------- Добавлено 13.12.2016 в 19:51 ----------

veleg:
Все остальное - нюансы, которые требуют времени.

Так а я и не говорю что он мудак, просто задачка для мозга: как разбирать морфологию и определять опечатки в словах. Молодец что помог, безусловно.

miltorg, при том, что если в базе появится +500 городов, вы на каждый напишете регулярку?

...

preg_match('москв', $text)

preg_match('казан', $text)

...

Ваше: http://prntscr.com/diz0xe

И даже так: http://prntscr.com/diz93x

Должно: http://prntscr.com/diz88n

И даже так должно: http://prntscr.com/diz9k8

Исходник продам за 20 баксов. :)

miltorg:
Работает

Что работает? Там netgoroda написано. Москва и Москве - два разных города по вашему?

Для того, чтобы определялись склонения, нужно писать что-то вроде метафон-функции и высчитывать дистанцию между словами (левенштайн). Все остальное (preg_match, strpos, etc.) - как авторизация только по логину. Идиотизм другими словами.

Всего: 1540