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

解决方案 »

  1.   

    什么样的地图, gis组件有定位功能方法
      

  2.   

    学习一下gis的 API 你就知道怎么调用了。
      

  3.   

               MessageBox.Show(String.Concat("长安街101号".ToCharArray().Select<Char, String>(delegate(Char C) { return char.IsNumber(C) ? C.ToString() : String.Empty; }).ToArray()));
     
      

  4.   

    没什么用法,单纯的就是取一个字符串里的整数部分,你不是要拆么
    String S="长安街101号";
     MessageBox.Show(String.Concat(S.ToCharArray().Select<Char, String>(delegate(Char C) { return char.IsNumber(C) ? C.ToString() : String.Empty; }).ToArray()));
     
    不过如果有多个数字要控制一下,非连续遇到数字情况下遇到非数字时结束判断,或指定要截取哪部分数字,
    就像“长安街1栋101号"
      

  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; 
            }
    找到 关键词包含“长安街”的地名记录,同样的,用这个函数在记录提取数字(可能要根据后缀来判断数字) 
    然后根据 数字之差的绝对值来判断记录。 大概思路是这样,你需要做的就是完善自己的算法~避免提取数字的时候的错误。