一种移动终端电话簿的模糊查询方法和装置 【技术领域】
本发明属于移动终端技术领域, 具体涉及一种移动终端电话薄的模糊查询方法和装置。 背景技术 随着移动终端技术的不断发展, 用户对移动终端功能的要求也越来越高。
以手机为例, 手机电话本 (Phonebook) 已经成为手机当中日常运用最多的功能, 随着手机存储空间越来越大, 可存储的联系人的条目也越来越多。
现有的搜索方式基本上是基于拼音的完整匹配实现的, 如果要查找一个联系人, 需要输入的联系人姓名的完整拼音或者需要至少输入联系人姓名的各个字的拼音的第一 个字母, 这种方式就需要用户完全清晰的记得该用户的完整姓名。如 : “杨华明” 的拼音是 : yang hua ming, 则必需至少输入 “yhm” 才能搜索到该联系人, 如果输入 “ym” , 则搜索结果列 表只有 : 杨铭。
对用户而言, 往往只会模模糊糊的大概记得某些人的姓名, 而不能清楚的记得完 整的姓名。如何使得用户能够根据记忆对联系人进行模糊搜索, 并对搜索出的结果进行排 序, 而无需完全记住联系人的姓名, 是移动终端技术领域研究的方向之一。
发明内容
本发明的目的在于提供一种移动终端电话薄的模糊查询方法, 旨在使得用户能够 根据记忆对联系人进行模糊搜索, 并对搜索出的结果进行排序, 而无需完全记住联系人的 姓名。
本发明实施例是这样实现的, 一种移动终端电话薄的模糊查询方法, 所述方法包 括以下步骤 :
接收用户输入的第一个查询字母, 将第一个拼音字母跟输入的第一个查询字母相 同的第 1 组联系人显示 ;
接收用户输入的第二个查询字母, 从第一组联系人中的第二个拼音字母开始进行 查找, 若拼音中有与第二个查询字母相同的字母, 则将查询到的字母进行第二标识, 并将符 合条件的第 2 组联系人显示 ;
接收用户输入的第 N 个查询字母, 从第 N-1 组联系人中进行第 N-1 标识的拼音字 母后进行查找, 若拼音中有与第 N 个查询字母相同的字母, 则将查询到的字母进行第 N 标 识, 并将符合条件的第 N 组联系人显示, 其中 N 为大于 2 的自然数。
本发明实施例的另一目的在于提供一种移动终端电话薄的模糊查询装置, 所述装 置包括 :
查询字母接收模块, 用于接收用户输入的查询字母 ;
匹配模块, 用于根据用户输入的查询字母对联系人拼音进行匹配, 查找包含有查 询字母的联系人 ;字母标识模块, 用于对字母进行标识 ;
显示模块, 用于将查找的联系人显示 ;
其中, 查询字母接收模块在接收到第一个查询字母后, 匹配模块匹配第一个拼音 字母跟输入的第一个查询字母相同的第 1 组联系人, 显示模块将第 1 组联系人显示 ;
查询字母接收模块接收用户输入的第二个查询字母, 匹配模块从第一组联系人中 的第二个拼音字母开始进行查找, 若拼音中有与第二个查询字母相同的字母, 字母标识模 块则将查询到的字母进行第二标识, 显示模块将符合条件的第 2 组联系人显示 ;
查询字母接收模块接收用户输入的第 N 个查询字母, 匹配模块从第 N-1 组联系人 中进行第 N-1 标识的拼音字母后进行查找, 若拼音中有与第 N 个查询字母相同的字母, 字母 标识模块则将查询到的字母进行第 N 标识, 显示模块将符合条件的第 N 组联系人显示, 其中 N 为大于 2 的自然数。
本发明实施例中, 用户只需输入自己能够记忆的几个模糊的字母, 移动终端便能 根据用户输入的字母进行模糊的查找, 且能对查找出的联系人进行排序, 使得用户能够根 据记忆对联系人进行模糊搜索, 并对搜索出的结果进行排序, 而无需完全记住联系人的姓 名, 利于移动终端的推广。 附图说明
图 1 为本发明实施例提供的移动终端电话薄的模糊查询方法的流程图 ; 图 2 为本发明实施例提供的移动终端电话薄的模糊查询装置的结构图。具体实施方式
为了使本发明的目的、 技术方案及优点更加清楚明白, 以下结合附图及实施例, 对 本发明进行进一步详细说明。 应当理解, 此处所描述的具体实施例仅用以解释本发明, 并不 用于限定本发明。
图 1 示出了本发明实施例提供的移动终端电话薄的模糊查询方法的流程。
在步骤 S101 中, 接收用户输入的第一个查询字母, 将第一个拼音字母跟输入的第 一个查询字母相同的第 1 组联系人显示 ;
在步骤 S102 中, 接收用户输入的第二个查询字母, 从第一组联系人中的第二个拼 音字母开始进行查找, 若拼音中有与第二个查询字母相同的字母, 则将查询到的字母进行 第二标识, 并将符合条件的第 2 组联系人显示 ;
在步骤 S103 中, 接收用户输入的第 N 个查询字母, 从第 N-1 组联系人中进行第 N-1 标识的拼音字母后进行查找, 若拼音中有与第 N 个查询字母相同的字母, 则将查询到的字 母进行第 N 标识, 并将符合条件的第 N 组联系人显示, 其中 N 为大于 2 的自然数。
其中, 当对联系人进行字母的查询时, 若联系人的字母中不含有查询字母, 则将该 联系人进行标识, 不再对该联系人进行查询。
其中, 对查找到的联系人进行排序, 其中, 在排序时, 按照以下规则 : 第 N 个查询字 母与第 N-1 个查询字母之间的距离越小, 则排列越靠前。
本发明实施例中, 主要数据结构包括 :
1)、 MMI_PHB_ENTRY_BCD_STRUCT PhoneBook[] :该数据结构主要是用来存放所有的联系人的姓名, 以用来在搜索完成后将搜索的 结果以列表的方式显示给用户, 同时, 在搜索的过程中需要一一使用联系人的姓名进行比 较;
2、 static U8
g_phb_qsearch_pinyin_cache[MAX_PB_ENTRIES][(MAX_PB_NAME_ LENGTH+1)*ENCODING_LENGTH] :
该数据结构主要是用来存放所有中文联系人姓名的拼音, 以在比较算法当中使 用;
3、 static S8
g_phb_qsearch_record_index[MMI_PHB_QUICK_SEARCH_INPUT_LE NGTH][MAX_ PB_ENTRIES] :
该数据结构主要是用来记录每一个输入的查询字符在匹配的联系人姓名字符串 中的位置 ; 等于 “-1” 则表示该联系人跟输入的查询字符不符合 ;
4、 static
g_phb_qsearch_name_inde[MMI_PHB_QUICK_SEARCH_INPUT_LEN GTH][MAX_PB_ ENTRIES] :
该数据结构主要是记录每个查询字符输入搜索后的各个联系人物理的存储位置 ; 同时只要对该数组进行排序就能达到对电话本当中联系人的逻辑位置的排序 ; 上层 MMI 显 示时, 只要通过读取该数据中的物理位置就能读取到相关姓名, 号码等信息 ;
其中, 本发明实施例主要的函数为 :
S32mmi_phb_quick_search_find_entry(U8*keyword) :
功能 : 该函数主要完成了搜索匹配联系人并进行精确性排序的功能
输入 : U8*keyword 输入的查询字符串
返回 : 匹配的联系人的个数 ;
实现 : 该函数通过查询 g_phb_qsearch_pinyin_cache[][] 中的姓名, 来获得是否 跟输入的 keyword 匹配, 如果匹配则在 g_phb_qsearch_record_index[][] 纪录下位置, 再 通过比较 g_phb_qsearch_record_index[][] 位置, 将联系人进行精确性排序, 也就是调整 联系人在 g_phb_qsearch_name_inde[][] 当中的位置。最后返回搜索结果联系人数量 ;
在 电 话 本 列 表 中, 每 输 入 一 个 字 符 就 会 调 用 mmi_phb_quick_search_find_ entry() 搜索匹配的联系人, 并得到新排序的列表 --g_phb_qsearch_name_inde[][], 电话 本再通过该列表中联系人物理位置依次读出联系人姓名, 通过列表的方式显示给用户。
本发明实施例中查询函数的处理流程 :
1)、 输入第一个查询字母后, 查询所有的联系人的拼音表 g_phb_qsearch_pinyin_ cache[][], 查找第一个拼音字母跟输入的第一个查询字母相同的所有联系人, 在 g_phb_ qsearch_record_index[][] 记录下当前匹配字符的位置, 将这些第一组联系人作为查询结 果显示给用户 ;
2)、 输入第二个查询字母后, 在第一组联系人中继续查找, 查找时需要从名字中从 第二个字母开始, 如果该名字含有该字母, 在 g_phb_qsearch_record_index[][] 中记录下 该字母在名字中出现的位置, 将第二组联系人作为查询结果显示给用户 ; 如果联系人的名字中不含有该字母, 将 g_phb_qsearch_record_index[][] 对应的位置为 “-1” , 表示该联系 人不匹配 ;
3)、 输入第三个查询字母后, 在第二组联系人中继续查找, 查找时需要从第二 个字母出现的位置的下一个开始查找, 如果该联系人的名字还是含有该字母, 在 g_phb_ qsearch_record_index[][] 中记录下该字母出现的位置, 将该联系人作为查询结果显示给 用户 ; 如果联系人的名字中不合有该字母, 将 g_phb_qsearch_record_index[][] 对应的位 置为 “-1” , 表示该联系人不匹配 ;
4)、 输入第四个, 第五个 ...... 查询字母以此例推 ; 当然最大的查询的字符个数 是有限制的, 一般为 6 到 10 个。
当找到一个与当前输入字符匹配的联系人后, 需要进行精确性比较, 将越是与输 入字符相近的联系人越放在前面。比较精确性的原则是 : 当输入大于等于两个搜索字符 后, 匹配的联系人姓名的拼音字符串当中这两个字符之间的距离越小越表示精确。如 : 输 入 “YB” 后匹配的结果有 “杨红兵” -YangHongBing 与 “杨兵” --YangBing ; 显然 “杨兵” 要比 “杨红兵” 更精确, 因为 “YangBing” 中的 Y 与 B 的距离更近。
本发明实施例的精确性比较处理流程 : 1)、 输入一个搜索字符后, 找到一个匹配的联系人, 在所有匹配的联系人当中查找 第一个精确性比当前联系人差的联系人, 该联系人的位子就是当前联系人需要插入的位 子: 也就是在数组 g_phb_qsearch_name_index[] 中将当前联系人的位置调整 ;
2)、 依次移动查找到的那个精确性差的联系人以及后面精确性更差的联系人的位 子: 也就是移动数组中 g_phb_qsearch_name_index[] 中各个联系人的物理存储次序 ;
3)、 将当前的联系人放在调整后的位子 ;
譬如, 当前电话本中的有以下联系人列表 :
1)、 阿木
2)、 杨华名
3)、 杨启明
4)、 杨铭
5)、 杨小明
6)、 曾晓明
当用户记得名字不是很清楚, 只记得一个人叫 “杨 XX 明” 时, 只要输入 : yming 或者 ym, 就可以得到查询列表 :
1)、 杨铭
2)、 杨华名
3)、 杨启明
4)、 杨小明
本发明实施例对输入关键字母的对输入关键字母的个数没有限制, 只要输入的关 键字母的顺序跟名字中这些关键字母所在的先后顺序一致就可以, 譬如 : “杨华明” 的拼音 是: yang hua ming, 只要输入 : yanghuaming、 yhm、 yum、 yhi、 yming、 ym、 yi... 都可以搜索出 “杨华明” 。
图 2 示出了本发明实施例提供的移动终端电话薄的模糊查询装置的结构。
查询字母接收模块 21, 用于接收用户输入的查询字母 ;
匹配模块 22, 用于根据用户输入的查询字母对联系人拼音进行匹配, 查找包含有 查询字母的联系人 ;
字母标识模块 23, 用于对字母进行标识 ;
显示模块 24, 用于将查找的联系人显示 ;
其中, 查询字母接收模块 21 在接收到第一个查询字母后, 匹配模块 22 匹配第一个 拼音字母跟输入的第一个查询字母相同的第 1 组联系人, 显示模块 24 将第 1 组联系人显 示;
查询字母接收模块 21 接收用户输入的第二个查询字母, 匹配模块 22 从第一组联 系人中的第二个拼音字母开始进行查找, 若拼音中有与第二个查询字母相同的字母, 字母 标识模块 23 则将查询到的字母进行第二标识, 显示模块 24 将符合条件的第 2 组联系人显 示;
查询字母接收模块 21 接收用户输入的第 N 个查询字母, 匹配模块 22 从第 N-1 组 联系人中进行第 N-1 标识的拼音字母后进行查找, 若拼音中有与第 N 个查询字母相同的字 母, 字母标识模块 23 则将查询到的字母进行第 N 标识, 显示模块 24 将符合条件的第 N 组联 系人显示, 其中 N 为大于 2 的自然数。 匹配模块 22 当对联系人进行字母的查询时, 若联系人的字母中不合有查询字母, 字母标识模块 23 则将该联系人进行标识, 不再对该联系人进行查询。
显示模块 24 按照排序对查询到的联系人进行显示, 其中, 在排序时, 按照以下规 则: 第 N 个查询字母与第 N-1 个查询字母之间的距离越小, 则排列越靠前。
本发明实施例中, 用户只需输入自己能够记忆的几个模糊的字母, 移动终端便能 根据用户输入的字母进行模糊的查找, 且能对查找出的联系人进行排序, 使得用户能够根 据记忆对联系人进行模糊搜索, 并对搜索出的结果进行排序, 而无需完全记住联系人的姓 名, 利于移动终端的推广。
应当理解的是, 对本领域普通技术人员来说, 可以根据上述说明加以改进或变换, 而这些改进和变换都应属于本发明所附权利要求的保护范围。