请教我现在要做一个地名匹配的工具
现在我已经将"北京市长安街1002号"用逆向最大匹配法解析成
 
北京市/长安街/1002号现在我将根据这个分词算法分出的字符串 来匹配我的地名库如果我的地名库里有只有1003号 怎么将地图定位到1003号呢?

解决方案 »

  1.   

    地图当然是具有坐标信息的地图,类似于MapBar的地图~~
      

  2.   

    目前Mapbar是这样的,如果搜索到长安街1002号,如果没有1002号,他的搜索的结果就是用分词结果的第一项“长安街”来搜索~~
      

  3.   


    能不能换个逻辑...  xxx号作为 int 变量, 先匹配长安街 再匹配 xxx号  比如 你搜索1002号  但目前你的库里最近的只有 1003 和1009  那么你就选1003作为 展示给用户的最近匹配点呗
      

  4.   

    如果想更优化,你可以把你的匹配项目 减  1000号如果是负值 那么选择1000号如果是n  则选取 匹配项 的第n个元素来比较.如果小于 第n个元素则往回比较...希望你看懂了.呵呵 不过这样很繁琐 ,但的确有效率提升. 目的在于缩小比较范围.
      

  5.   

    思路是这样的 首先分词 前提是一个地名字典 然后根据后缀“号” “栋” “单元” “座”等提炼出门牌号。
    例如 长安街 和 1002号然后用函数提炼后一个1002号的数字,函数如下(可能有误,暂时没有找到别的好办法) 
    /// <summary> 
            /// 获取字符串中的数字 
            /// </summary> 
            /// <param name="str">字符串 </param> 
            /// <returns>数字 </returns> 
            public static decimal GetNumber(string str) 
            { 
                decimal result = 0; 
                if (str != null && str != string.Empty) 
                { 
                    // 正则表达式剔除非数字字符(不包含小数点.) 
                    str = Regex.Replace(str, @"[^\d.\d]", "");                 // 如果是数字,则转换为decimal类型 
                    if (Regex.IsMatch(str, @"^[+-]?\d*[.]?\d*$")) 
                    { 
                        result = decimal.Parse(str); 
                    } 
                } 
                return result; 
            }
    找到 关键词包含“长安街”的地名记录,同样的,用这个函数在记录提取数字(可能要根据后缀来判断数字)
    然后根据 数字之差的绝对值来判断记录。大概思路是这样,你需要做的就是完善自己的算法~避免提取数字的时候的错误。