基于互联网分词思想的车载导航POI搜索引擎 【技术领域】
本发明涉及车载导航的POI(Point of Interest,兴趣点)查询系统,该系统是基于互联网搜索引擎的分词思想。
背景技术
自1994年基于网络的搜索出现以来,互联网搜索引擎便得到了极大的发展,现在互联网搜索引擎已经成为互联网上非常重要的网络导航服务工具。互联网搜索引擎搜集互联网中的资源和信息,发现新的网站和网页,经过抓取和分析,存储相应的信息副本。在此基础上,进一步对信息进行理解、提取、组织和处理,并为用户提供检索服务,从而起到信息导航的目的。互联网搜索引擎能提供文字和拼音查询,查询输入时的联想提示,根据查询输入预览查询结果数量,错误输入纠正提示等功能。
车载导航中POI搜索与互联网搜索引擎有着许多相似之处,POI信息也需要进行理解、提取、组织和处理,并为用户提供快捷的检索服务。因此我们完全能将互联网搜索引擎的概念运用在车载导航中的POI搜索中,这也就是我们所说的POI搜索引擎。而目前的车载导航的POI查询功能较为单一,不能满足用户需求。
【发明内容】
本发明所要解决的技术问题是:提供一种基于互联网分词思想的车载导航POI搜索引擎,本发明能提供文字和拼音查询,并提供查询输入时的联想提示,查询结果数量预览,错误输入自动纠正,多次输入组合查询的功能。
本发明解决其技术问题所采用的技术方案是:基于互联网分词思想的车载导航POI搜索引擎包括以下步骤:1)对POI原数据中的POI名称做分词处理;2)根据分词结果生成POI搜索引擎信息索引;3)根据POI搜索引擎信息索引进行POI名称查询。
本发明的有益效果是:通过不同类型的输入,包括中文、英文、数字,POI搜索引擎均能在较短时间内完成联想结果和查询结果的显示;用户通过联想结果能提前预知查询结果的情况,输入是否有查询结果、查询结果数量是多少、是否需要继续输入才能查询到自己所需的结果,使用户减少了不必要的查询输入;如果用户输入POI名称的简称,POI搜索引擎也能准确的查询到结果;如果用户查询输入错误,POI搜索引擎会根据谐音自动提示正确的信息;如果用户输入多个查询信息,POI搜索引擎会根据查询信息组合查询,使查询结果更精确。
【附图说明】
图1是POI名称数据分词流程示意图。
图2是生成POI搜索引擎信息索引流程示意图。
图3是POI搜索引擎信息索引组成图。
图4是POI搜索引擎查询基本流程示意图。
图5是关键词分词处理流程图。
【具体实施方式】
基于互联网分词思想的车载导航POI搜索引擎(以下简称POI搜索引擎)是借鉴了互联网搜索引擎和中英文分词技术实现而成的。虽然POI搜索引擎借鉴了互联网搜索引擎和中英文分词技术,但还是有许多不同的地方。首先POI的原数据均来至于数据厂商,所以无法具有实时抓取和分析的能力,数据是一次性生成并非动态更新;其次是POI搜索引擎运行在嵌入式设备上,而互联网搜索引擎则是运行在大型服务器上,因此在机器性能上POI搜索引擎远不如互联网搜索引擎;另外POI搜索引擎数据源是存放在导航仪上的数据文件,而不是像互联网搜索引擎使用大型数据库。总的来说POI搜索引擎是用于嵌入式设备,有较多的限制条件,但由于数据量并不像互联网搜索引擎那么庞大,所以POI搜索引擎无论是搜索效率还是用户体验都不会与互联网搜索引擎有较大差距。
本发明是一种车载导航的POI查询系统,它是基于互联网搜索引擎的分词思想,在嵌入式设备上实现的车载导航POI搜索引擎。POI搜索引擎使用POI搜索引擎信息索引,提供输入联想、查询结果预览、错误输入纠正、多次输入组合查询功能。通过不同类型的输入,包括中文、英文、数字,POI搜索引擎均能在较短时间内完成联想结果和查询结果的显示;用户通过联想结果能提前预知查询结果的情况,输入是否有查询结果、查询结果数量是多少、是否需要继续输入才能查询到自己所需的结果,使用户减少了不必要的查询输入;如果用户输入POI名称的简称,POI搜索引擎也能准确的查询到结果;如果用户查询输入错误,POI搜索引擎会根据谐音自动提示正确的信息;如果用户输入多个查询信息,POI搜索引擎会根据查询信息组合查询,使查询结果更精确。
下面结合附图详述本发明。
在图1中,首先步骤S101从POI原数据中提取出POI的名称,然后步骤S102将提取出来的POI名称保存为文本文件,便于后续生成POI搜索引擎信息索引时使用。步骤S103将POI名称做分词处理,根据算法将POI名称的中文分割为小于等于4字的词;数字和英文单词各自分割为一个整体;并去除POI名称中的符号。最后步骤S104将POI名称分词处理后生成的4字以内的中文关键词、数字关键词和英文关键词保存为分词结果。
在图2中,根据图1中步骤S104的分词结果,步骤S201将分词结果中的关键词生成首字母,其中中文关键词的首字母为拼音首字母;数字关键词的首字母为其本身;英文关键词的首字母为其小写字母。所以关键词首字母的字符范围为0-9和a-z,共36种字符。步骤S202为分词结果建立字符0-9和a-z的首字母倒排索引。步骤S203为POI名称建立分词结果的关键词倒排索引,根据分词结果的关键词在POI名称中查找含有关键词地POI记录。步骤S204将分词结果关键词查找的POI记录在数据中的地址和记录数量保存到该关键词的倒排索引中,最后生成POI搜索引擎信息索引。
在图3中,显示了POI搜索引擎信息索引有6个组成部分,分别为:管理部数据块、首字母管理数据块、首字母索引数据块、关键词数据块、匹配结果索引数据块和实体数据块。各个组成部分的结构如下:
1)管理部数据块:管理整个数据结构,记录各数据块的首地址,方便读取各个数据块的数据,其结构见表1(以下表格中数据长度单位统一为字节,DWORD为双字,WORD为单字,BYTE为字节,BYTE[]为字节数组)。
表1管理部数据块结构
序号 偏移 数据长度 数据类型 字段 1 0 4 DWORD 首字母管理数据块首地址 2 4 4 DWORD 首字母索引数据块首地址 3 8 4 DWORD 关键词数据块首地址 4 12 4 DWORD POI匹配结果索引数据块首地址 5 16 4 DWORD POI实体数据块首地址
2)首字母管理数据块:管理首字母数据信息,包括英文关键词的小写字母组合和数字关键词本身,方便根据一个字母或数字快速索引到关键词,减少资源载入量,其结构见表2。
表2首字母管理数据块结构
序号 偏移 数据长度 数据类型 字段 1 0 4 DWORD 首字母组合的第一个字母或数字 2 4 4 DWORD 首字母索引的偏移地址
3)首字母索引数据块:索引关键词,能通过首字母快速查找相应关键词,减少资源载入量,其结构见表3。
表3首字母索引数据块结构
序号 偏移 数据长度 数据类型 字段 1 0 2 WORD 该字母开头的首字母组合数量n1 2 2 1 BYTE 该字母开头的首字母组合1的文字个数i1 3 3 1*i1 BYTE[] 首字母组合文字的BYTE数组 4 3+i 2 WORD 对应关键词个数m1 5 5+i 4 DWORD 关键词1的偏移地址
4)关键词数据块:保存关键词,并作为POI查询输入分词的字典和输入联想的结果,其结构见表4。
表4关键词数据块结构
序号 偏移 数据长度 数据类型 字段 1 0 1 BYTE 关键词1文字的个数i2 2 1 2*i2 WORD[] 关键词1文字的WORD数组 3 1+2*i2 4 DWORD 关键词1匹配结果索引的偏移地址
5)POI匹配结果索引数据块:索引POI结果,能通过该索引快速的查找到关键词能匹配到POI结果的数量和偏移地址,其结构见表5。
表5 POI匹配结果索引数据块结构
序号 偏移 数据长度 数据类型 字段 1 0 4 DWORD 匹配POI结果数量n2 2 4 4 DWORD 匹配POI结果1的偏移地址
6)POI实体数据块(此处仅以POI名称作为其实体数据):保存POI真正的实体数据,其结构见表6。
表6 POI实体数据块结构
序号 偏移 数据长度 数据类型 字段 1 0 1 BYTE POI记录1名称文字的个数i3 2 1 2*i3 WORD[] POI记录1名称的WORD数组
当POI搜索引擎信息索引生成成功后,POI搜索引擎就可以根据POI搜索引擎信息索引为用户提供POI查询功能。首先用户必须输入要查询POI名称的相关信息,当用户查询输入停止时,POI查询就开始了。用户的查询输入通常为一个词或一个字,包括汉字、字母和数字,在这里统称为查询关键词。用户输入完关键词后,由POI搜索引擎从搜索引擎信息索引中找到关键词的联想结果和该联想结果能匹配POI结果的记录条数。用户选择关键词的联想结果,POI搜索引擎将该联想结果能匹配到的POI结果的记录显示出来。这个过程就是POI搜索查询的基本流程,包括用户查询请求输入、关键词转换处理、关键词分词处理、关键词索引匹配、关键词联想结果显示和查询结果显示。整个处理流程如图4,处理步骤依次如下:
S301)用户查询请求输入:用户通过导航系统提供的键盘按钮或手写功能输入要查询的短语或文字,允许输入的字符类型有汉字、字母和数字,字母不分大小写。当用户首次输入或者是清除上次输入后再输入的情况下,用户的输入为一个文字。
S302)关键词转换处理:将用户输入的关键词转换为相应的首字母。当关键词为中文时,转换成拼音首字母;当关键词为英文时,转换成小写字母组合;当关键词为数字时,为其本身。
S303)关键词分词处理:当用户输入文字的个数超过4(关键词最大长度)时,就需要对用户输入进行分词处理。整个处理流程见图5所示,具体流程如下:
A)将用户输入字符串保存为目标字符串S1,初始化保存分词结果的字符串序列容器Vector<string>VetStr,并设置最大分词长度MaxLen为4。
B)如果S1的长度超过MaxLen,转到步骤C。否则将S1保存到分词结果VetStr,并转到步骤J。
C)如果S1为空,转到步骤J,否则转到步骤D。
D)从S1左边开始,取出候选字符串W,并且W的长度不大于MaxLen。如果W的长度大于1,转到步骤E,否则转到步骤I。
E)取W的首字母字符串L,根据字母L[0](即字符串L中的第一个字母)在首字母管理数据块查找该字母所有首字母组合。查看首字母组合,看字符串L是否在其中。如果在其中转到步骤F,否则转到步骤H。
F)在首字母索引数据块中获取字符串L的索引信息,根据索引信息在关键词数据块中获取其相应关键词,并保存为分词词库。
G)查看分词词库,看W是否在词库中。如果不在其中转到步骤H,否则转到步骤I。
H)将W最右边一个字去掉,判断W是否为单字。如果是单字,转到步骤I,否则转到步骤G。
I)将W保存到分词结果VetStr中,并从S1中去掉候选字符串W然后保存为新的S1,最后转到步骤C。
J)返回分词结果VetStr。
比如用户输入“中华人民共和国”,输入文字个数大于4,将进行分词处理。首先取出最左边的4个字“中华人民”和对应的首字母“zhrm”。然后在首字母管理数据块中查找字母“z”所有的首字母组合,包括“zc”、“zhd”、“zhrm”、“zjt”等字符串。在这些首字母组合中查找字符串“zhrm”,由于“zhrm”存在其中,所以在首字母索引数据块中取出该字符串的索引信息。再然后根据索引信息取得该字符串匹配的所有关键词,包括“中华人民”等关键词,并保存为分词词库。最后在分词词库中查找用户输入的“中华人民”是否在其中,由于该词存在所以将其分割,并保存到分词结果中。根据相同的处理方式,用户输入的字符串“共和国”也保存到了分词结果中。
S304)关键词索引匹配:根据分词结果中的字符串S1,S2…Sn,查找相应的索引信息。其中查找完全匹配S1,S2…Sn-1的字符串索引信息,保存为集合A1,A2…An-1。查找所有部分匹配Sn的索引信息,保存为m个集合An1,An2,…Anm。如果关键词从第1个字符到第L个字符(L为Sn的长度)依次与Sn中的字符相等,称为部分匹配。如果关键词与Sn完全相等,称为完全匹配。n和m均为自然数。
S305)关键词联想结果显示:显示用户输入的所能联想出的关键词以及这些关键词能查询到POI结果数量。用户输入经过分词处理后,生成了S1,S2…Sn字符串,S1,S2…Sn-1均为完整的短语,而Sn则是不具备完整意义的字或词,所以用户输入的联想,实际就是Sn的联想结果。与Sn部分匹配的关键词就是Sn的联想结果,其匹配的POI结果集合Ri=A1∩A2∩…∩Ani-1∩Ani(ni≤m),联想结果能查询到的POI结果数量就是集合Ri的个数。当用户输入错误时,POI搜索引擎会根据输入字符串的谐音查找相应的联想结果。当用户多次输入,POI搜索引擎会对每单个输入的联想结果求交集,得到组合查询的联想结果。
S306)查询结果显示:根据用户选择的联想结果,通过该联想结果能匹配的POI结果集合Ri,在POI实体数据块中取得相应的POI结果信息。
上述步骤中,POI搜索引擎信息索引为S303提供首字母管理数据块、首字母索引数据块和关键词数据块,为S304提供匹配结果索引数据块,为S306提供实体数据块。