Phonebook с T9 поиском
От: BioUnit Россия  
Дата: 12.08.11 19:06
Оценка:
Помогите найти исходники телефонной книги с поискам по контактам в стиле T9 (как это например в стандартной телефонной книге Android).
Телефонная книга — не самоцель, поэтому не хочется терять на неё много времени. Хочется что-то готовое, что можно встроить или хотя бы понять принцип и быстро наваять свое. Поэтому приоритетно на C++, но можно и др. языки.
Re: Phonebook с T9 поиском
От: Centaur Россия  
Дата: 13.08.11 08:21
Оценка:
Здравствуйте, BioUnit, Вы писали:

BU>Помогите найти исходники телефонной книги с поискам по контактам в стиле T9 (как это например в стандартной телефонной книге Android).

BU>Телефонная книга — не самоцель, поэтому не хочется терять на неё много времени. Хочется что-то готовое, что можно встроить или хотя бы понять принцип и быстро наваять свое. Поэтому приоритетно на C++, но можно и др. языки.

Что такое телефонная книга? Это, по сути, map из текстовых строк в какие-то неважно какие структуры данных. И ты хочешь на ключах этой map’ы определить эквивалентность в стиле T9 (1=вся пунктуация, 2=a=b=c=а=б=в=г, 3=d=e=f=д=е=ж=з=ё, 4=g=h=i=и=й=к=л, 5=j=k=l=м=н=о=п, 6=m=n=o=р=с=т=у, 7=p=q=r=s=ф=х=ц=ч, 8=t=u=v=ш=щ=ъ=ы, 9=w=x=y=z=ь=э=ю=я, 0=пробел).

Ну так и сделай предикат t9_less над std::string’ами, переводящий все буквы, пробелы и пунктуацию в соответствующие цифры, и потом сравнивающий трансформированные строки лексикографически. Только не забудь map сделать multimap’ом, а то коллизии попрут.
Re[2]: Phonebook с T9 поиском
От: BioUnit Россия  
Дата: 13.08.11 14:24
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Что такое телефонная книга? Это, по сути, map из текстовых строк в какие-то неважно какие структуры данных. И ты хочешь на ключах этой map’ы определить эквивалентность в стиле T9 (1=вся пунктуация, 2=a=b=c=а=б=в=г, 3=d=e=f=д=е=ж=з=ё, 4=g=h=i=и=й=к=л, 5=j=k=l=м=н=о=п, 6=m=n=o=р=с=т=у, 7=p=q=r=s=ф=х=ц=ч, 8=t=u=v=ш=щ=ъ=ы, 9=w=x=y=z=ь=э=ю=я, 0=пробел).


C>Ну так и сделай предикат t9_less над std::string’ами, переводящий все буквы, пробелы и пунктуацию в соответствующие цифры, и потом сравнивающий трансформированные строки лексикографически. Только не забудь map сделать multimap’ом, а то коллизии попрут.


Вообще-то, я предполагал, что контакты будут хранится в SQLite, как это на Android. И загружать их в память все не хотелось бы.
Можно загрузить только индексы, но лучше тогда уже не мультимепом, а деревом.
Ещё момент в том, что тот же андроид производит поиск сразу по нескольким данным из контакта: имя, фамилия, телефон, при этом бьет строку на слова, если например в имени несколько слов. Да ещё и может взять одну букву из одного слова а другую из другого. Т.е. например "Иван Петров" может быть выбран нажатием букв "И" + "П" (т.е. набором '45'). Т.е. одним индексом не обойтись, да ещё надо и более сложную логику с поиском по индексу.
Деталей реализации много, поэтому и хотелось уже что-то готовое.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.