写一个简易识别地址的代码

C# 智能识别地址简易代码

由于项目需要 简易写了一个智能识别地址的后端程序
model定义

 public class AddressModel
    {
        // 省
        public string province { get; set; }
        // 市
        public string city { get; set; }
        // 区县
        public string area { get; set; }
        // 位置
        public string address { get; set; }
        //名字
        public string name { get; set; }
        // 邮编
        public string zip_code { get; set; }
        public string mobile { get; set; }

    }

    public class AreaListModel
    {
        public List<AreaList> areaList { get; set; }
    }

    public class AreaList
    {
        public string name { get; set; }
        public List<City> city { get; set; }
        public string json { get; set; }
    }

    public class City
    {
        public string name { get; set; }
        public List<string> area { get; set; }
    }



    public class ZipCodeModel
    {
        // 省级id
        public int id { get; set; }
        // 省名
        public string name { get; set; }
        // 市
        public List<Child> child { get; set; }

    }
    public class Child
    {
        // 市id
        public int id { get; set; }
        // 市名
        public string name { get; set; }
        // 区县
        public List<child> child { get; set; }
    }
    public class child
    {
        // 区县id
        public int id { get; set; }
        // 区县名
        public string name { get; set; }
        // 区县代码
        public string zipcode { get; set; }
    }

方法

public class AddressParse
    {
        
        // 解析邮编
        public List<string> PostCodeParse()
        {
            string jsonFile = "D://PostCode.json";
            StreamReader file = System.IO.File.OpenText(jsonFile);
            JsonTextReader reader = new JsonTextReader(file);
            JArray o = (JArray)JToken.ReadFrom(reader);
            List<ZipCodeModel> zipCodeModels = JsonConvert.DeserializeObject<List<ZipCodeModel>>(o.ToString());
            List<string> codeList = new List<string>();
            for (int i = 0; i < zipCodeModels.Count; ++i)
            {
                if (zipCodeModels[i].child != null)
                {
                    for (int j = 0; j < zipCodeModels[i].child.Count; ++j)
                    {
                        for (int k = 0; k < zipCodeModels[i].child[j].child.Count; ++k)
                        {
                            codeList.Add(zipCodeModels[i].child[j].child[k].zipcode);
                        }
                    }
                }
            }
            return codeList;
        }
        // 
        public AddressModel AddressRecognize(string address)
        {
            try
            {
                AddressModel parse = new AddressModel();
                AreaListModel areaListModel = new AreaListModel();
                string jsonFile = "D://AreaList.json";
                StreamReader file = System.IO.File.OpenText(jsonFile);
                JsonTextReader reader = new JsonTextReader(file);
                JArray o = (JArray)JToken.ReadFrom(reader);
                List<AreaList> items = JsonConvert.DeserializeObject<List<AreaList>>(o.ToString());
                areaListModel.areaList = items;
                string[] provinceKey = { "特别行政区", "古自治区", "维吾尔自治区", "壮族自治区", "回族自治区", "自治区", "省省直辖", "省", "市" };
                string[] cityKey = { "布依族苗族自治州", "苗族侗族自治州", "自治州", "州", "市", "县" };
                // string[] Province = new string[] { };
                int n = areaListModel.areaList.Count;
                string[] Province = new string[n];
                for (int i = 0; i < areaListModel.areaList.Count; i++)
                {
                    Province[i] = areaListModel.areaList[i].name;
                }
                for (int i = 0; i < areaListModel.areaList.Count; i++)
                {
                    int index = 0;
                    // foreach (string item in Province)
                    for (int a = 0; a < Province.Length; a++)
                    {
                        index = address.IndexOf(Province[a]);
                        if (index > -1)
                        {
                            if (index > 0)
                            {
                                //省份不是在第一位的,在省份之前的字段识别为人名
                                parse.name = address.Substring(0, index).Trim();
                            }
                            // parse.province = Province[index];
                            parse.province = Province[a];
                            address = address.Substring(index + parse.province.Length);
                            foreach (string obj in provinceKey)
                            {
                                if (address.IndexOf(obj) == 0)
                                {
                                    address = address.Substring(obj.Length);
                                }
                            }
                            int m = areaListModel.areaList[a].city.Count;
                            string[] cityArray = new string[m];
                            for (int j = 0; j < areaListModel.areaList[a].city.Count; ++j)
                            {
                                cityArray[j] = areaListModel.areaList[a].city[j].name;
                            }
                            for (int j = 0; j < areaListModel.areaList[a].city.Count; ++j)
                            {
                                int flag = 0;
                                flag = address.IndexOf(areaListModel.areaList[a].city[j].name);
                                if (flag > -1 && flag < 3)
                                {
                                    parse.city = areaListModel.areaList[a].city[j].name;
                                    address = address.Substring(flag + parse.city.Length);
                                    for (int k = 0; k < cityKey.Length; ++k)
                                    {
                                        if (address.IndexOf(cityKey[k]) == 0)
                                        {
                                            address = address.Substring(cityKey[k].Length);
                                        }

                                    }
                                    int t = areaListModel.areaList[a].city[j].area.Count;
                                    string[] areaArray = new string[t];
                                    if (areaListModel.areaList[a].city[j].area != null)
                                    {
                                        for (int c = 0; c < areaListModel.areaList[a].city[j].area.Count; c++)
                                        {
                                            areaArray[c] = areaListModel.areaList[a].city[j].area[c];

                                        }
                                        int areaFlag = 0;
                                        // foreach (string areaItem in areaArray)
                                        for (int d = 0; d < areaArray.Length; d++)
                                        {
                                            areaFlag = address.IndexOf(areaListModel.areaList[a].city[j].area[d]);
                                            if (areaFlag > -1 && areaFlag < 3)
                                            {
                                                parse.area = areaListModel.areaList[a].city[j].area[d];
                                                address = address.Substring(areaFlag + parse.area.Length);
                                                break;
                                            }
                                        }
                                    }
                                    break;
                                }
                            }
                            parse.address = address.Trim();
                            break;
                        }
                    }
                }
                // 调用PostCodeParse()获取邮编集合
                List<string> codeList = PostCodeParse();
                //  for (int i = 0; i < codeList.Count; i++)
                int codeFlag = 0;    
                foreach (string item in codeList)
                {
                    while (address.Contains(item)) {
                        parse.zip_code = item;
                        parse.address = address.Replace(item, ""); 
                        break;
                    }
                    
                }
                string result = "";
                foreach (Match match in Regex.Matches(parse.address, @"\d+")) {
                    result = match.Value.Length > result.Length ? match.Value : result;
                }
             
                if (result != null) {
                    parse.mobile = result;
                    parse.address = parse.address.Replace(parse.mobile,"");
                }
                return parse;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

直接调用AddressParse.AddressRecognize(“具体地址(人名省市县具体位置 邮编 手机等)”)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值