За последние 24 часа нас посетили 18264 программиста и 1632 робота. Сейчас ищут 1587 программистов ...

определение неверной раскладки в тексте

Тема в разделе "Решения, алгоритмы", создана пользователем cramen, 25 июн 2010.

  1. cramen

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

    С нами с:
    25 июн 2010
    Сообщения:
    4
    Симпатии:
    0
    Привет сообществу.
    При проектировании поиска на сайте, столкнулся с одной задачей, решение которой гугл не подсказал.

    Условия:
    Присутствует строка поиска на сайте. Пользователь вводит поисковый запрос, а далее вступает в дело поисковый движок sphinx.

    Задача:
    Пользователь вводит запрос в неверной раскладке, т.е. вместо "сотовый телефон", "cjnjdsq ntktajy".
    Как следствие, поисковый движок ничего не находит.
    Необходимо предложить пользователю поискать эту строку в правильной раскладке.

    Таким образом нужен алгоритм, готовый код или php-модуль, который реализует проверку строки на "правильность" раскладки. Очевидно, что результат будет вероятностный.
    Собственно я не смог найти такого алгоритма или готового кода, но уверен, что оно есть, а изобретать велосипеды не хочется.
    Подскажите, может кто сталкивался с подобной задачей или просто знает, как ее решить?
     
  2. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    А как насчет предложить установить пфуто свичер перед заходом на сайт.
    На самом деле нафиг такие пользователи нужны. А если он даун и не может запоминать пароль - тоже будете рашать проблему?
    Мне кажется такие вопросы не стоят того, чтобы их решать. Поиск блин. Вот если бы он вводил пароль, то да! Как вы узнали что пользователи так ищут?
     
  3. cramen

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

    С нами с:
    25 июн 2010
    Сообщения:
    4
    Симпатии:
    0
    давайте не будем пожалуйста засорять ветку постами вида "да это не надо решать, да это пользователи виноваты" и т.д.
    Мне требуется решение задачи а не пустая вода. Зачем вы пишете, если не можете ответить на вопрос?
     
  4. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    cramen потому что это форум, и я буду писать сюда всё, что пожелаю нужным в меру правил...
    Может кто то вам и подскажет, я сказал своё мнение!
     
  5. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Ну вот у гугла видимо по словарю проверяется поисковый текст. Ищет же всегда по тому что указал юзер, но в тоже время предлагает "Возможно, вы имели в виду: сотовый телефон". Как по мне то ненужная вещь для сайта (а не для поисковика) делать такую проверку.
    Разбивает на слова запрос, переводит слово на какойто язык поочередно, сравнивает со словом в словаре того же определенного языка, если есть - значит предложить переведенный запрос, если нет - искать по тому что имеется.
     
  6. cramen

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

    С нами с:
    25 июн 2010
    Сообщения:
    4
    Симпатии:
    0
    У меня был такой вариант решения и пока он остается основным, но хочется все же спросить у народа. Может кто-то знает более качественное решение этой задачи.


    Дело в том, что этот сайт и является в некотором роде поисковой машиной по каталогу товаров, ибо товаров довольно много (около 800000 позиций) и без качественного поиска тут не обойтись.
     
  7. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    cramen
    Оправданно будет мудрить такую штуку если поиск является основным инструментом сайта. Да и "бегать" по словарям явно не на пхп надо.
     
  8. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    cramen
    можно искать по другой таблице с шаблонами названий товаров, а то как можно вообще отличить марку TB1000 от ЕИ1000 и определить какая должна быть правильная раскладка?
     
  9. cramen

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

    С нами с:
    25 июн 2010
    Сообщения:
    4
    Симпатии:
    0
    собственно так и есть

    именно для этого и требуется вероятностно оценить верность раскладки и после только предлагать пользователю изменить раскладку слова при вероятности верности, например меньше 0.4
     
  10. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    cramen
    ну вот и забейте в мускуль таблицу типовые шаблоны, а потом запросом с ранжированием вашу вероятность и считайте...
     
  11. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    поисковики собирают поисковые запросы, анализируют их и потом учат поисковик подставлять.

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

    мысля понятна?

    со временем как раз набирается такой словарик.
     
  12. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    нейросети рулят йоу
     
  13. dj--alex

    dj--alex Активный пользователь

    С нами с:
    29 ноя 2007
    Сообщения:
    184
    Симпатии:
    0
    я вообще считаю что все кроме UTF 8 форматы надо уничтожить во имя упрошения написания кода и уничтожения кракозябр :)

    в Dbscript 4.2 я использовал для файлового менеджера определитель кодировки для чтения файла .
    а вот для сохранения принудительно перекодирую в UTF-8 .
    и думаю так нужно делать во всех программах , тогда cp1251 будет наконец побежден.
     
  14. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    dj--alex
    хватит рекламировать и поднимать старые темы
     
  15. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    А почему так плохо cp-1251?
    Просто ставьте всегда теги meta (отправляйте заголовки для писем?) и кракозябр не будет... Или я что-то не понимаю/не знаю?
     
  16. neverlose

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

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    440Hz предложил хороший вариант, но на это уйдёт время, пока программа обучиться.

    Вариант другой, делать то, что делает гугл, по его же базе.
    А именно:
    1. Пользователь вводит слово.
    2. Проверяем раскладку, если раскладка оказалась русской (символов кириллицы больше, чем символов латинских)
    3. Делаем курл запрос гуглу на перевод в английский, если результат совпадает с исходным, то явно ошибка раскладки.
    4. Конвертируем в нормальную раскладку (й -> q, ц -> w, у ->e и т.д.)
    5. Снова отсылаем на перевод, если удалось, предлагаем новый вариант пользователю.

    Если в п.2 язык оказался английский, делаем точно также но с точностью на оброт.

    В противном случае пользователю предлагается исходный вариант.
     
  17. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
  18. vasa_c

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

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    А проще нельзя?
    Если на запрос ничего не нашлось, переводим раскладку и опять запрашиваем.
    Если во второй раз нашлось много чего, то скорее всего раскладка была неверной.
     
  19. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Зато получитете универсальную базу данных, и не надо никаких алгоритмов.
     
  20. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    солидарен с vasa_c
     
  21. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    vasa_c
    а как ты определишь если и на одной, и на второй расскладке чтото нашлось? Сравнивать количество найденного - както не серьезно.
     
  22. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Апельсин эм-м... всё-тки на какой больше - то и выдавать. так как количество записей в БД с неверной раскладкой думаю меньше, чем с верной
     
  23. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Ensiferum
    это я понял. Но если, например, нашлось 3 и 5 результатов. Выводить там где 5 - нет уверенности, что чел искал именно это. Лучше просто дублировать как гугл и делать ссылку типа "Может вы имели ввиду 'слово' ". А там пусть сам решает юзер что именно искал.
     
  24. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Думаю, может процентное отношение выяснять. Если оно ниже "значения" - выводить в другой раскладке, если выше - предлагать варианты. Только нужно задать "значение"
     
  25. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    думаю, что если ЧТО-ТО будет найдено по запросу пользователя - то выводить.
    если НИЧЕГО не будет найдено - то пробовать изменить раскладку.

    всё гениально просто, товарисчи :)