|
#1
|
|||
|
|||
Т9
Помогите пожалуйста, уважаемые люди-программисты! Нужно создать аналог программы Т9 из сотовых телефонов в Дельфи. Единственное, на что меня хватило - создать форму, аналогичную клавиатуре сотового телефона. А что дальше делать - ума не приложу...
|
#2
|
|||
|
|||
Написал было ответ, потом подумал и понял, что написал фигню, ответ стер.
А скажите, насколько точно должен функционал программы повторять T9? Т.е. например - перебор слов? Смена регистра? Или достаточно будет просто по мере нажатия кнопок выбирать подходящее слово? Последний раз редактировалось Rosenkrantz, 08.12.2007 в 17:29. |
#3
|
||||
|
||||
При написании такой программы можно использовать простой *.txt или *.DAT файл с набор
При написании такой программы можно использовать простой *.txt или *.DAT файл с набором слов на каждую букву!
Не обязательно в массиве указывать бесконечно набор слов а легче обратится к файлу с набором слов... В общем на когда нужна тебе эта программа ? |
#4
|
|||
|
|||
Можно по мере нажатия кнопок выбирать подходящее слово, только первыми должны выскакивать наиболее употребляемые слова (как и в телефоне), т.е., как я полагаю, нужно использовать вероятности букв-слов.. Вот это-то и вводит в ступор!
Насчет сроков - жетально чем скорее, тем лучше. Где-нибудь на следующей неделе. Спасибо огромное! Последний раз редактировалось Lacrima, 08.12.2007 в 22:48. |
#5
|
|||
|
|||
Вот чего написалось в итоге (во вложении).
Основная идея такая - при нажатии кнопки с буквами находим перебором все возможные комбинации этих букв и проверяем - нет ли в словаре слов, начинающихся с такой комбинации. Если есть - добавляем комбинацию в список возможных вариантов. При нажатии следующей буквы повторяем цикл сначала. Словарь представляет собой простой текстовый файл, одна строчка - одно слово. Имя словаря такое же как у exe-файла с расширением ".dic". Обязательно в словаре должен быть алфавит: а б .. я Остальные слова можно вбивать какие хотите. После первого использования программы строчки в словаре приобретут вид "x;str", где "x" - эмпирическая частота использования слова, "str" - само слово. При этом в словарь по-прежнему можно добавлять слова. Частота определяется эмпирически - т.е. чем чаще слово используется в наборе, тем "выше" оно всплывает в словаре. Таким образом, наиболее употребимые слова будут предлагаться чаще. Слово считается использованным если нажат пробел или точка. Тут есть еще над чем поработать - когда длина слова приближается к 10, поиск заметно тормозит. Т.е. надо бы оптимизировать, но, поскольку такой производственной необходимости у меня нет, то и не буду Интересная задачка, спасибо. Последний раз редактировалось Rosenkrantz, 09.12.2007 в 09:47. |
#6
|
|||
|
|||
ихмо, бд делать надо =)
а слова выбиратся запросом будут. Сформировать условие выборки из этого самое сложно, где должны быть перечислены все варианты букв в зависимости от нажатых кнопок. |
#7
|
|||
|
|||
Здесь можно вот что сделать, не устраивая глобализации с привлечением SQL-технологий:
1) Разделить по времени перебор вариантов. Т.е. первый найденный вариант принимаем и разрешаем пользователю вводить текст дальше. А остальные варианты ищем только если будет нажата кнопка перебора. 2) Сделать "черный" список буквосочетаний, которых заведомо не бывает в русском языке - всякие "ыъ", "фй" и т.д. Но чтобы его эффективно использовать, нужно поменять алгоритм перебора букв. 3) Оптимизировать сам перебор сочетаний букв. Это самая сложная часть программы и, мне кажется, он у меня совершенно неоптимально написан. 4) Оптимизировать поиск в словаре. Т.е. сделать отдельный класс, заточенный на быстрый поиск по началу слова. Вот в этих направлениях я бы двигался, если бы писал софт для промышленной эксплуатации. Но для задачи "сдать курсовую" мне кажется того, что есть достаточно. |
#8
|
|||
|
|||
Ух ты! Не ожидала, что так быстро будет написана программа.. Большое-пребольшое спасибо!!! Теперь попробую словарь составить..
|
#9
|
|||
|
|||
Вот еще прога с словарем:
|
#10
|
|||
|
|||
Алгоритм отбора понравился. Вместо того, чтобы каждый раз перебирать сочетания букв, отсеивать слова по мере нажатия - это явно быстрее будет.
|