请教我现在要做一个地名匹配的工具
现在我已经将"北京市长安街1002号"用逆向最大匹配法解析成
北京市/长安街/1002号现在我将根据这个分词算法分出的字符串 来匹配我的地名库如果我的地名库里有只有1003号 怎么将地图定位到1003号呢?
现在我已经将"北京市长安街1002号"用逆向最大匹配法解析成
北京市/长安街/1002号现在我将根据这个分词算法分出的字符串 来匹配我的地名库如果我的地名库里有只有1003号 怎么将地图定位到1003号呢?
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号"
例如 长安街 和 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;
}
找到 关键词包含“长安街”的地名记录,同样的,用这个函数在记录提取数字(可能要根据后缀来判断数字)
然后根据 数字之差的绝对值来判断记录。 大概思路是这样,你需要做的就是完善自己的算法~避免提取数字的时候的错误。