Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.12.2007, 01:19
Lacrima Lacrima вне форума
Прохожий
 
Регистрация: 08.12.2007
Сообщения: 3
Репутация: 10
По умолчанию Т9

Помогите пожалуйста, уважаемые люди-программисты! Нужно создать аналог программы Т9 из сотовых телефонов в Дельфи. Единственное, на что меня хватило - создать форму, аналогичную клавиатуре сотового телефона. А что дальше делать - ума не приложу...
Ответить с цитированием
  #2  
Старый 08.12.2007, 12:49
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Написал было ответ, потом подумал и понял, что написал фигню, ответ стер.
А скажите, насколько точно должен функционал программы повторять T9? Т.е. например - перебор слов? Смена регистра?
Или достаточно будет просто по мере нажатия кнопок выбирать подходящее слово?

Последний раз редактировалось Rosenkrantz, 08.12.2007 в 17:29.
Ответить с цитированием
  #3  
Старый 08.12.2007, 17:50
Аватар для Wipahacker
Wipahacker Wipahacker вне форума
Начинающий
 
Регистрация: 01.06.2007
Адрес: ДОНЕЦК
Сообщения: 112
Репутация: 10
По умолчанию При написании такой программы можно использовать простой *.txt или *.DAT файл с набор

При написании такой программы можно использовать простой *.txt или *.DAT файл с набором слов на каждую букву!
Не обязательно в массиве указывать бесконечно набор слов а легче обратится к файлу с набором слов...
В общем на когда нужна тебе эта программа ?
Ответить с цитированием
  #4  
Старый 08.12.2007, 22:41
Lacrima Lacrima вне форума
Прохожий
 
Регистрация: 08.12.2007
Сообщения: 3
Репутация: 10
По умолчанию

Можно по мере нажатия кнопок выбирать подходящее слово, только первыми должны выскакивать наиболее употребляемые слова (как и в телефоне), т.е., как я полагаю, нужно использовать вероятности букв-слов.. Вот это-то и вводит в ступор!
Насчет сроков - жетально чем скорее, тем лучше. Где-нибудь на следующей неделе. Спасибо огромное!

Последний раз редактировалось Lacrima, 08.12.2007 в 22:48.
Ответить с цитированием
  #5  
Старый 09.12.2007, 09:39
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Вот чего написалось в итоге (во вложении).

Основная идея такая - при нажатии кнопки с буквами находим перебором все возможные комбинации этих букв и проверяем - нет ли в словаре слов, начинающихся с такой комбинации. Если есть - добавляем комбинацию в список возможных вариантов. При нажатии следующей буквы повторяем цикл сначала.

Словарь представляет собой простой текстовый файл, одна строчка - одно слово. Имя словаря такое же как у exe-файла с расширением ".dic". Обязательно в словаре должен быть алфавит:
а
б
..
я

Остальные слова можно вбивать какие хотите.

После первого использования программы строчки в словаре приобретут вид "x;str", где "x" - эмпирическая частота использования слова, "str" - само слово. При этом в словарь по-прежнему можно добавлять слова.

Частота определяется эмпирически - т.е. чем чаще слово используется в наборе, тем "выше" оно всплывает в словаре. Таким образом, наиболее употребимые слова будут предлагаться чаще. Слово считается использованным если нажат пробел или точка.

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

Интересная задачка, спасибо.
Вложения
Тип файла: 7z T9Emu.7z (14.5 Кбайт, 73 просмотров)

Последний раз редактировалось Rosenkrantz, 09.12.2007 в 09:47.
Ответить с цитированием
  #6  
Старый 09.12.2007, 22:12
Burka Burka вне форума
Начинающий
 
Регистрация: 10.06.2007
Сообщения: 163
Репутация: 10
По умолчанию

ихмо, бд делать надо =)
а слова выбиратся запросом будут.
Сформировать условие выборки из этого самое сложно, где должны быть перечислены все варианты букв в зависимости от нажатых кнопок.
Ответить с цитированием
  #7  
Старый 10.12.2007, 03:22
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Здесь можно вот что сделать, не устраивая глобализации с привлечением SQL-технологий:
1) Разделить по времени перебор вариантов. Т.е. первый найденный вариант принимаем и разрешаем пользователю вводить текст дальше. А остальные варианты ищем только если будет нажата кнопка перебора.
2) Сделать "черный" список буквосочетаний, которых заведомо не бывает в русском языке - всякие "ыъ", "фй" и т.д. Но чтобы его эффективно использовать, нужно поменять алгоритм перебора букв.
3) Оптимизировать сам перебор сочетаний букв. Это самая сложная часть программы и, мне кажется, он у меня совершенно неоптимально написан.
4) Оптимизировать поиск в словаре. Т.е. сделать отдельный класс, заточенный на быстрый поиск по началу слова.

Вот в этих направлениях я бы двигался, если бы писал софт для промышленной эксплуатации. Но для задачи "сдать курсовую" мне кажется того, что есть достаточно.
Ответить с цитированием
  #8  
Старый 10.12.2007, 03:30
Lacrima Lacrima вне форума
Прохожий
 
Регистрация: 08.12.2007
Сообщения: 3
Репутация: 10
По умолчанию

Ух ты! Не ожидала, что так быстро будет написана программа.. Большое-пребольшое спасибо!!! Теперь попробую словарь составить..
Ответить с цитированием
  #9  
Старый 07.01.2008, 15:45
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Вот еще прога с словарем:
Вложения
Тип файла: zip T9.zip (30.0 Кбайт, 68 просмотров)
Ответить с цитированием
  #10  
Старый 08.01.2008, 05:59
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Алгоритм отбора понравился. Вместо того, чтобы каждый раз перебирать сочетания букв, отсеивать слова по мере нажатия - это явно быстрее будет.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter