![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
В одной из тем про "как обрабатывать телефонный номер" возникла идея сделать ассоциацию со словами, т.е. чтобы лучше запомнить телефон.
Вот я тут начал было реализовывать, но никак не могу понять логику как подбирать слова. Вот что получает у нас есть десять цифр. Единица и ноль не имеют букв (рассматриваем раскладку на сотовых телефонах) Единицу я планирую заменить на "минус", а ноль на "плюс" Значит мы можем номера делить на слова если в номере будут эти цыфры. далее есть 2 - а,б,в,г 3 - д,е,ё,ж,з 4 - и,й,к,л 5 - м,н,о,п 6 - р,с,т,у 7 - ф,х,ц,ч 8 - ш,щ,ь,ы,ъ 9 - э,ю,я а также есть таблицы с русскими словами (у меня получилось около 99 тысяч) где есть само слово и сколько в нём букв. Хотя нужно будет выкинуть слова больше 10 букв а вот теперь сижу ине могу понять как осуществить перебор словаря и выдать все возможные варианты Жду идей ;) -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
сотовые номера начинаются с 8 или 7 (у нас), то есть слова будут начинаться на ф,х,ц,ч,ш,щ,ь,ы,ъ
как много таких слов? -------------------- Amazing ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
телефонные номера у нас начинаются с кода оператора или кода региона
![]() в том словаре который у меня ф - 1512 х - 1045 ц - 509 ч - 952 ш - 1231 щ - 179 ы, ь,ъ - понятное дело нет так что можно выбрать ![]() Сейчас пытаюсь всё это дело реализовать через прогон массивов. Но видимо это не самый оптимальный вариант.. Зато будет от чего отталкиваться.. -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
1. надо бы составить правила формирования слов (три ффф подряд не могут быть и т.д.)
2. проверка по словарю Добавлено через 48 секунд как я пока вижу решение: формируем все возможные комбинации, с учетом правил (п. 1), и делаем проверку. в итоге мы можем получить несколько вариантов -------------------- Amazing ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
так, значит условия должны быть следующими
- слово не должно содержать три повторяющиеся буквы - наверное нет смысла когда 1 или 0 тоже три идут подряд - разбить телефон на слова, т.е. по 1 или 0 - не начинать слова с Ь,Ъ,Ы вот простой перебор в который нужно вставить эти условия...
сам перебор без вывод при карсимальновозможной комбинации составляет меньше секунды (думал будет значительно больше) -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
38попугаев ( [8]385 556 223 )- это хороший номер?
Зачем игнорировать цифры?
Осталось вставить туда условие и ужаснуться ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
а что ты предлагаешь? Как такое обработать?
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
добавить в assn[X] еще и соответствующую цифру. Резать на слова по 0,1 и цифрам -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
Я бы поместил словарь в бд, после чего делал бы выборку по таблице, и в PHP скрипте обрабатывал бы только уже ответ БД. Это сообщение отредактировал(а) krundetz - 20.1.2012, 09:33 |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
так тогда в словари это нужно занести
если одно слово, т.е. нет ни 1 ни 0 то это самый простой перебор (уже показал код).. Но ведь нужноделить по словам ещё и искать каждое слово.. Вот как тут с этими вложенными циклами быть? -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Зачем? слова в словаре состоят из букв. Просто некоторые слова могут соединяться цифрами -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
это не реально автоматом делать..
Добавлено через 4 минуты и 1 секунду кстати, есть слова с тире.. тогда нужно сначала делить по "0", и если слова не найдуться, то потом ещё и по "1" -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
ну я предлагаю делать саму выборку единым запросом к таблице, то есть все сведется к составление запроса для составления самих же комбинаций подставляемых в запрос ИМХО перебор не лучшей вариант, думаю здесь возможно использование побитового сдвига Это сообщение отредактировал(а) krundetz - 20.1.2012, 11:09 |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
На генерацию исходных данных для запроса УЖЕ уходит примерно секунда. Сколько будет выполняться сам запрос отдельная и не простая песня. Вероятно, нужно применять более навороченную математику и, возможно, более быстрый инструмент. Хотя прикинуть сложность и реализуемость алгоритма можно, наверное, и на php -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
ну так кто-нибудь попробует описать свой алгоритм ?
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
krundetz |
|
|||
![]() Вечный странник ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1400 Регистрация: 14.6.2007 Где: НН(Сормово) Репутация: 20 Всего: 69 |
попробую привести вечерком, если получиться реализовать, так как остались смутные воспоминания ещё с университетских времен
как раз по этому и предлагаю перенести на сторону БД, так как на PHP логика будет намного медленее также возможно стоит глянуть в сторону теории конечных автоматов Это сообщение отредактировал(а) krundetz - 20.1.2012, 12:20 |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
Gold Dragon |
|
||||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
в общем представляю суперстрашный код
![]() таблица
ну и сам код
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
||||
|
|||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
надо что-то делать с этими форешами
-------------------- Amazing ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
а что?
в общем запустил я на проверку 10-значный номер без нулей - Лиса рухнула 2 - 0.03 сек 3 - 0.06 сек 4 - 0.16 5 - 0.67 6 - 2.59 7 - 12.88 8 - 51.46 9 - 253.73 Добавлено через 32 секунды какие мысле есть ещё? ps утопическая идея получается ![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Надо подойти с другой стороны.
Сделать словарь с поиском по буквам
потом, начиная от первых букв перебирать слова. Так можно сильно сократить дерево перебора. Если на очередной комбинации мы не смогли продвинутся "вглубь" словаря - нужно вернутся выше. Есть ли сторонние сервисы, хранящие словари в таком виде? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
а разве база данных это не быстрее сделает по индексному полю?
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Нет. Так как база будет перебирать все варианты, а их только генерировать с предварительной фильтрацией - 200 секунд. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
тогда я не понял твою логику...
Индекс в базе делает именно так же кажется.. видит "п" и сразу переходит к ним, видит вторую "о" и переходит к ним -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
База sql? Тогда сначала нужно эти данные для перехода ей сгенерировать и подсунуть. Именно этим - генерацией данных для sql запроса и занимался твой foreach-монстр 200 секунд. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
так, тогда чуть подробнее (лучше на примере) покажи что нужно делать
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Вечером продолжу, пока времени нет :(.
Пока можно сделать словарь такой, о котором я говорил. Для начала - нужно нарыть список слов. Поискав системы проверки орфографии - наткнулся где-то на ссылку на словарь hunspell - zip архив с плагином для непонятно чего. Оттуда нам будет интересен файл ru_RU.dic - список слов, с указанием части речи. Он 2 mб, так что сами качайте. Слова в кодировке koi-8, так что без небольшого шаманства не получилось.
простенький конвертер ![]() множество str_replace вставлено от того, что var_export генерирует 41мб строку. После реплейса она становится в 13мб, что все-таки чуть поменьше, чем 40. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
ksnk, ты прикололся? конвертер?
![]() Кстати, если нужно , то могу словари дать. Этот хиленький, всего на 14 тысяч слов.. у меня есть нормальный на 90 с лишним + примерно 50 с разными окончаниями (и кажется с жаргонизмами) Это сообщение отредактировал(а) Gold Dragon - 20.1.2012, 18:53 -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Присоединённый файл ( Кол-во скачиваний: 1 ) ![]() -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
а вот результат. Довольно быстро... если не считать 70м памяти на словарь
Это сообщение отредактировал(а) ksnk - 20.1.2012, 20:54 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |