范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

推荐一款免费的收货信息智能识别工具

  大家好,我是Echa 。
  今天给大家分享非常实用的收货信息智能识别工具,该工具使用广泛,比如小程序,H5,App等等,大大提高用户体验和工作效率。但是市面上大部分都是按照API调用平次来收费的,总体来说比较贵。目前推荐这个是免费的,智能匹配率大概在85%作用,希望大家喜欢。创作不易, 喜欢的老铁们加个关注,点个赞,后面会持续更新干货,速速 收藏,谢谢!
  源码地址:https://gitee.com/JCfeng/js-util/tree/main/address_auto
  效果图:
  核心代码:/**  * 收件人信息自动识别  * @param {String} auto_value 输入的信息  * @returns {ReturnInfo}  */ function address_auto(auto_value) {   /**    * 储存分割后的数据    * @type {String[]}    */   let split_res = [ auto_value ]    /**    * 支持的分割符    * @type {string[]}    */   let splitters = [",", ",", " ", "r ", " "]    // 按不同的分隔符依次分割   for (let splitter of splitters) {     let split_res1 = []     for (let split_res_item of split_res) {       split_res1.push(...split_res_item.split(splitter))     }     split_res = split_res1   }    // 类型标记   // 后面会对每个分割后的部分进行类型检测   let TYPE_MOBILE = 1 << 0          // 手机   let TYPE_NAME = 1 << 1            // 名字   let TYPE_ADDR_PROVINCE = 1 << 2   // 地址-省份部分   let TYPE_ADDR_CITY = 1 << 3       // 地址-城市部分   let TYPE_ADDR_COUNTY = 1 << 4     // 地址-区县部分   let TYPE_ADDR_DETAIL = 1 << 5     // 地址-详细地址部分    // 地址中可写可不写的部分   let DISPENSIBLE_PROVINCES = [ "省", "市", "自治区" ]   let DISPENSIBLE_CITYS = [ "市", "地区", "区", "盟", "自治州" ]   let DISPENSIBLE_COUNTYS = [ "林区", "族区", "区", "自治县", "县", "市", "自治旗", "旗" ]    /**    * 储存地区信息的结构    * @typedef {Object} AreaInfo    * @property {String} code - 地区编码    * @property {String} name - 地区名称    * @property {String} name_except_dispensible - 除了dispensible部分后的地区名称    * @property {Number} similarity - 匹配name_except_dispensible时的相似度    */    /**    * 地区数据处理函数    * @param {Object.} data - 地区数据    * @param {Array.} dispensible_list - 可忽略的内容    * @returns {Array.}}    */   let area_data_processing = function (data, dispensible_list) {     return Object.entries(data).map(entry => {       let item = {         code: entry[0] + "",         name: entry[1] + "",         name_except_dispensible: entry[1] + "",         similarity: 1,       }       for (let dispensible_item of dispensible_list) {         if (item.name.endsWith(dispensible_item) && item.name.length >= dispensible_item.length + 2) {           item.name_except_dispensible = item.name.substring(0, item.name.length - dispensible_item.length)           item.similarity = item.name_except_dispensible.length / item.name.length           break         }       }       return item     })   }    let provinces = area_data_processing(areaList.province_list, DISPENSIBLE_PROVINCES)   // 储存省份信息的数组   let citys = area_data_processing(areaList.city_list, DISPENSIBLE_CITYS)               // 储存省份信息的数组   let countys = area_data_processing(areaList.county_list, DISPENSIBLE_COUNTYS)         // 储存省份信息的数组    /**    * 匹配到的信息的结构    * @typedef {Object} ResInfo    * @property {String} code - 地区编码    * @property {String} name - 地区名称    * @property {Number} similarity - 相似度(完全匹配时为1)    * @property {Number} split_res_index - 对应的split_res数组中的数据的索引    * @property {String} [capture_province] - 捕获的省份内容,此字段只在省份信息内存在    * @property {String} [capture_city] - 捕获的城市内容,此字段只在城市信息内存在    * @property {String} [capture_county] - 捕获的区县内容,此字段只在区县信息内存在    * @property {Number} [max_city_split_res_index] - 最大相似度的城市对应的split_res数组中的数据的索引,此字段只在最终结果中存在    * @property {Number} [max_city_resInfo_index] - 最大相似度的城市对应的city_resInfo_list数组中的数据的索引,此字段只在最终结果中存在    * @property {Number} [max_province_split_res_index] - 最大相似度的省份对应的split_res数组中的数据的索引,此字段只在最终结果中存在    * @property {Number} [max_province_resInfo_index] - 最大相似度的省份对应的province_resInfo_list数组中的数据的索引,此字段只在最终结果中存在    */    /**    * 储存匹配到的省份信息    * @type {ResInfo[]}    */   let province_resInfo_list = []    /**    * 储存匹配到的城市信息    * @type {ResInfo[]}    */   let city_resInfo_list = []    /**    * 储存匹配到的区县信息    * @type {ResInfo[]}    */   let county_resInfo_list = []    /**    * 分割后的数据的扩展结构    * @typedef {Object} SplitResEx    * @property {String} value - 原始split_res数组内对应的元素    * @property {Number} type - 类型标记    */    /**    * 对split_res数组的数据进行处理后的拓展数据    * @type {SplitResEx[]}    */   let split_res_ex = split_res       .filter(split_res_item => split_res_item !== "")       .map(split_res_item => {         return {           value: split_res_item,           type: 0,         }       })    // 用于匹配11位手机号的正则表达式   let reg_exp_mobile = new RegExp("[0-9]{11}", "gmu")    // 储存手机的识别结果   let mobile = ""    // 储存split_res_ex数组内识别到手机的元素的索引   let mobile_split_res_index = -1    // 开始识别,遍历split_res_ex   for (let i = 0; i < split_res_ex.length; i++) {     let split_res_item = split_res_ex[i]    // 当前遍历元素      // 识别到手机(如果有多个,只储存最后一个)     if (reg_exp_mobile.test(split_res_item.value)) {       split_res_item.type |= TYPE_MOBILE    // 标记类型       mobile = split_res_item.value         // 储存识别结果       mobile_split_res_index = i            // 储存对应索引     }      // 对每个split_res_ex元素遍历识别所有的省份、城市、区县     // 构建[省份、城市、区县]遍历结构     let loop_data = [       { data: provinces, type: TYPE_ADDR_PROVINCE, resInfo_list: province_resInfo_list, type_name: "province" },       { data: citys, type: TYPE_ADDR_CITY, resInfo_list: city_resInfo_list, type_name: "city" },       { data: countys, type: TYPE_ADDR_COUNTY, resInfo_list: county_resInfo_list, type_name: "county" },     ]      // 遍历[省份、城市、区县]     for (let j = 0; j < 3; j++) {        // 遍历(省份)或(城市)或(区县)       for (let item of loop_data[j].data) {         let similarity = undefined      // 相似度         let capture_value = undefined   // 储存捕获到的名称          // 完整匹配某个(省份)或(城市)或(区县)的名称         if (split_res_item.value.search(item.name) !== -1) {           similarity = 1            // 相似度为1           capture_value = item.name   // 储存完整名称         }         // 非完整匹配某个(省份)或(城市)或(区县)的名称         else if (split_res_item.value.search(item.name_except_dispensible) !== -1) {           similarity = item.similarity      // 储存相似度(前面已计算)           capture_value = item.name_except_dispensible   // 储存省略后的名称         }          // 成功匹配,储存信息         if (similarity !== undefined) {           loop_data[j].resInfo_list.push({             code: item.code,             name: item.name,             similarity: similarity,             split_res_index: i,             [`capture_${loop_data[j].type_name}`]: capture_value           })         }       }     }   }    // 由区县的匹配结果决定地址信息最终是否匹配成功   // 只要区县匹配成功,不论城市和省份是否匹配成功,最终都将按匹配成功处理   // 下面的处理主要是针对匹配到多个区县的情况,最终按叠加的相似度决定匹配结果   // 因为该步骤主要是为了消除误判的区县,所以区县所属的城市和省份被匹配时,权重分别是10倍和100倍   if (county_resInfo_list.length >= 1) {      // 遍历区县的匹配结果     for (let i = 0; i < county_resInfo_list.length; i++) {       let county_resInfo_item = county_resInfo_list[i]    // 本次遍历的区县元素       let add_similarity = 0    // 最后要叠加到区县结果内的相似度        // 遍历城市的匹配结果       for (let j = 0; j < city_resInfo_list.length; j++) {         // 若匹配成功的区县其所属的城市同时也匹配成功,则记录其相似度         if (city_resInfo_list[j].code.substring(0, 4) === county_resInfo_item.code.substring(0, 4)) {           // 被匹配的区县所属的城市可能会匹配到多个,所以要找出其中相似度最大的           if (city_resInfo_list[j].similarity > add_similarity) {             add_similarity = city_resInfo_list[j].similarity           }         }       }       county_resInfo_item.similarity += add_similarity * 10     // 在城市的相似度的基础上乘10        // 遍历省份的匹配结果(同上)       add_similarity = 0       for (let j = 0; j < province_resInfo_list.length; j++) {         if (province_resInfo_list[j].code.substring(0, 2) === county_resInfo_item.code.substring(0, 2)) {           if (province_resInfo_list[j].similarity > add_similarity) {             add_similarity = province_resInfo_list[j].similarity           }         }       }       county_resInfo_item.similarity += add_similarity * 100    // 在省份的相似度的基础上乘10     }      // 按叠加后的相似度对区县的匹配结果进行排序,从大到小     county_resInfo_list.sort((item0, item1) => item1.similarity - item0.similarity)      // 排序后的区县匹配结果中的第一个元素视作最终匹配元素     let matching_county = county_resInfo_list[0]      // 在对应的split_res_ex数组内的数据上加上区县地址匹配标记     split_res_ex[matching_county.split_res_index].type |= TYPE_ADDR_COUNTY      // 在城市匹配结果中寻找最终匹配的区县所属的城市     let max_similarity = 0        // 临时变量,记录当前已遍历的匹配城市中相似度最大的     let max_resInfo_index = -1    // 相似度最大的城市在city_resInfo_list数组中对应的索引     for (let i = 0; i < city_resInfo_list.length; i++) {       if (city_resInfo_list[i].code.substring(0, 4) === matching_county.code.substring(0, 4)) {         if (city_resInfo_list[i].similarity > max_similarity) {           max_similarity = city_resInfo_list[i].similarity           max_resInfo_index = i         }       }     }     // 若寻找到相应的匹配城市,则储存和设置对应的信息     if (max_resInfo_index !== -1) {       matching_county.max_city_split_res_index = city_resInfo_list[max_resInfo_index].split_res_index       matching_county.max_city_resInfo_index = max_resInfo_index       split_res_ex[city_resInfo_list[max_resInfo_index].split_res_index].type |= TYPE_ADDR_CITY     }      // 在省份匹配结果中寻找最终匹配的区县所属的省份,同上     max_similarity = 0     max_resInfo_index = -1     for (let i = 0; i < province_resInfo_list.length; i++) {       if (province_resInfo_list[i].code.substring(0, 2) === matching_county.code.substring(0, 2)) {         if (province_resInfo_list[i].similarity > max_similarity) {           max_similarity = province_resInfo_list[i].similarity           max_resInfo_index = i         }       }     }     if (max_resInfo_index !== -1) {       matching_county.max_province_split_res_index = province_resInfo_list[max_resInfo_index].split_res_index       matching_county.max_province_resInfo_index = max_resInfo_index       split_res_ex[province_resInfo_list[max_resInfo_index].split_res_index].type |= TYPE_ADDR_PROVINCE     }   }    // 储存名字的识别结果   let name = ""   // split_res_ex数组中还未匹配到任何类型的元素   let split_res_type_equal_0 = []   // 遍历split_res_ex数组,寻找还未匹配到任何类型的元素   for (let i =0; i < split_res_ex.length; i++) {     if (split_res_ex[i].type === 0) {       split_res_type_equal_0.push({         split_res_item: split_res_ex[i],         index: i       })     }   }    // 按内容的长度排序,从小到大   split_res_type_equal_0.sort((item0, item1) =>       item0.split_res_item.value.length - item1.split_res_item.value.length   )    // 遍历排序后的split_res_type_equal_0数组(split_res_type_equal_0数组中除了可能存在名字外,还可能存在"详细地址")   // 规则1:名字不会被除手机外的其他信息包裹在中间,既除手机外,名字应该在两端   // 规则2:名字不会比"详细地址"长   for (let i = 0; i < split_res_type_equal_0.length; i++) {     let item = split_res_type_equal_0[i].split_res_item   // 对应的split_res_item数组的元素     let index = split_res_type_equal_0[i].index           // 对应的split_res_item数组的元素的索引     let access_indexs;    // 储存特定情况下,名字所有可能出现的位置(名字应该在两端)      // 若未匹配到手机,则名字应该在两端,否则,名字应该在除了手机所在位置后的两端     if (mobile_split_res_index === 0) {       access_indexs = [1, split_res_ex.length - 1]     }     else if (mobile_split_res_index === split_res_ex.length - 1) {       access_indexs = [0, split_res_ex.length - 2]     }     else {       access_indexs = [0, split_res_ex.length - 1]     }      // 匹配     if (access_indexs.indexOf(index) !== -1) {       // 若split_res_type_equal_0内不止一个元素,说明split_res_type_equal_0内存在"详细地址"部分       if (split_res_type_equal_0.length > 1) {         let add_length = 0    // 储存除本元素外的其他元素的内容长度的累加值          // 累加其他部分         for (let j = 0; j < i; j++) {           add_length += split_res_type_equal_0[j].split_res_item.value.length         }         for (let j = i + 1; j < split_res_type_equal_0.length; j++) {           add_length += split_res_type_equal_0[j].split_res_item.value.length         }          // 若本元素长度小于其他元素的长度累加值,则判定本元素为名字         if (item.value.length < add_length) {           item.type |= TYPE_NAME           name = item.value           break         }       }       // 若split_res_type_equal_0内只有一个元素,则判定本元素为名字       else{         item.type |= TYPE_NAME         name = item.value         break       }     }   }    let province = ""   // 储存省份的识别结果   let city = ""       // 储存城市的识别结果   let county = ""     // 储存区县的识别结果   let code = ""       // 储存地区编码的识别结果   let detail = ""     // 储存详细地址的识别结果    // 若有识别到区县地址   if (county_resInfo_list.length > 0) {     let matching_county = county_resInfo_list[0]    // 最终匹配元素      let detail_join_index_list = []   // 储存详细地址的各个部分对应的split_res_ex数组元素的索引      // 若有匹配到的省份     if (matching_county.hasOwnProperty("max_province_split_res_index")) {       detail_join_index_list.push(matching_county.max_province_split_res_index)       province = province_resInfo_list[matching_county.max_province_resInfo_index].name     }     else {       province = areaList.province_list[matching_county.code.substring(0, 2) + "0000"]     }      // 若有匹配到的城市     if (matching_county.hasOwnProperty("max_city_split_res_index")) {       // 检测是否与匹配到的省份对应的split_res_ex数组元素的索引重复,不重复才添加       if (detail_join_index_list.indexOf(matching_county.max_city_split_res_index) === -1) {         detail_join_index_list.push(matching_county.max_city_split_res_index)       }       city = city_resInfo_list[matching_county.max_city_resInfo_index].name     }     else {       city = areaList.city_list[matching_county.code.substring(0, 4) + "00"]     }      // 检测是否与匹配到的省份及城市对应的split_res_ex数组元素的索引重复,不重复才添加     if (detail_join_index_list.indexOf(matching_county.split_res_index) === -1) {       detail_join_index_list.push(matching_county.split_res_index)     }     county = matching_county.name      code = matching_county.code      // 将其余未匹配到任何类型的元素判定为"详细地址"部分,添加其对应的split_res_ex数组元素的索引到detail_join_index_list数组     for (let i = 0; i < split_res_ex.length; i++) {       if (split_res_ex[i].type === 0) {         detail_join_index_list.push(i)       }     }      // 拼接detail_join_index_list数组内所有元素对应的split_res_ex数组元素的内容     detail = detail_join_index_list.map(i => split_res_ex[i].value).join("")     // 去除省份信息     if (matching_county.hasOwnProperty("max_province_resInfo_index")) {       detail = detail.replace(province_resInfo_list[matching_county.max_province_resInfo_index].capture_province, "")     }     // 去除城市信息     if (matching_county.hasOwnProperty("max_city_resInfo_index")) {       detail = detail.replace(city_resInfo_list[matching_county.max_city_resInfo_index].capture_city, "")     }     // 去除区县信息     detail = detail.replace(matching_county.capture_county, "")   }    return {     name: name,     tel: mobile,     province: province,     city: city,     county: county,     areaCode: code,     addressDetail: detail,   } }

4岁男孩患虫癌,体内抽出2斤虫液!医生养猫养狗的家庭要注意4岁男孩肚子如孕妇2019年,同学的医院里上演了惊悚一幕。4岁男孩京京被紧急送到了这里,来医院前他先后出现了反复发烧,食欲不振憋气和腹胀等症状。孩子已经这样了,家长却没有意识到问题58岁大叔血糖从19。5降到4。8,医生他的2个降糖习惯,值得学习全球经济发展迅速,随之迅速发展的还有人类的基础疾病,今天我们要说的是其中之一糖尿病。全球每10个人中,就有4人死于糖尿病。既然它如此严重,那能不能摆脱它呢?胡大叔,58岁,与妻子相王者荣耀高渐离新皮肤曝光,又一款史诗级白嫖皮肤上线王者荣耀全民电竞的全国大赛又将在7月15日正式开启,官方已定于每年夏季推出一款全民电竞皮肤,且这款皮肤虽说需要点券,但只要积极完成任务,即可全额返还点券,对于玩家来说相当于白嫖,而甲钴胺不仅能修复受损神经,还能用于这3种常见病,您用对了吗?现如今,很多人因为这样或那样的原因导致患上了神经炎。研究表明,神经炎患者的四肢常常出现麻木感,同时这种麻木感还伴随着刺痛的感觉。很多患者在确诊为神经炎后,选择服用维生素B12来治疗瑞信iPhone14生产计划未变,但初期产量变少瑞信分析师黄翔及其团队日前在报告中表示,硬件的整体生产可能在6月7月逐渐恢复正常水平,苹果供应链的前景将比Android阵营更光明,而半导体的需求问题将比供应问题更多。iPhone回复石家老四的评论,到底谁在蹭流量看了老四今天在我的文章下的评论(见图),老四在我的文章下的评论想对老四说几句一本人一直客观理性发表观点,促进家庭团结和睦,不存在对你们说三道四!二本人发表的内容来源于你们家人的公开名人名言名句1。可以选择才是真正的自由。凯文凯利2。接到你的信,真快活。风和日暖,令人愿意永远活下去。朱生豪3。我尽量不在无助或悲伤时候想你,以免显得我的怀念不够诚意。陶立夏4。今夜,我的嗓音三国志11一城博天下最稳妥的4个都市,密不透风,永安都比不上对于三国志11来说,相比进攻战,个人感觉游戏里的防守战更有意思,因为玩家担任防守的一方,更能体验到以弱胜强的游戏感觉,也非常考验玩家在防御战中的各种组合搭配,比如部队的搭配,野外城孩子叛逆了怎么办?有网友私信我,问我孩子叛逆了,不理家长,学习退步了怎么办?小鱼丸还没有叛逆,我也不知道他将来会不会叛逆,我没什么应对叛逆期孩子的经验,所以只能分享点我和小鱼丸相处的经验。我们可以做10年陕西和尚扫寺,一吨重白玉佛凭空消失,警方调查发现不简单2010年12月的一天,陕西凤鸣镇堰河村里凤鸣寺的住持,趁着天色尚早,拿着扫帚勤勤恳恳地扫着院落的尘土。推开大殿的门,他直起腰板,扫了眼佛堂内的布置是否妥当,突然,他眨眨眼,似乎觉人这一辈子,最难熬的时间,就在这十年小孩子总觉得坐在教室里,每天上不完的课,做不完的作业,这是人生最苦恼的时候,且一熬就是寒窗十二年。然而等到真正长大,才发现最美不过年少时候,在家有父母可以依赖,在外有学校可以庇护,
2023米兰时装周开跑,盘点时尚圈喜爱的3个NewBalance经典鞋款NewBalance深受街头潮流人士喜爱之外,近年来更跨足时尚圈,在2022年与MIUMIU设计师MiucciaPrada初试啼声,NewBalance以复古与运动经典的传奇魅力月蕾哈娜穿丝绸连衣裙和男友米兰约会,两人计划结婚新专辑可能延期怀孕的蕾哈娜和AAPRocky在米兰度约会,有传言说他们可能会选择结婚,引发粉丝对新专辑可能会延迟的担忧35岁的蕾哈娜穿上了一件黄色丝绸连衣裙,高领连衣裙紧贴她的身体,裙子在大腿根42岁宋佳同台47岁刘敏涛,只差5岁如隔代,一个像大婶一个似姐姐春天绝对是穿衣搭配的好时节,很多服装单品都是为了春天而生,很多服装的颜色也正好和春天相呼应。春天大家选择最看重的是颜色的靓丽,在此基础上选择的是简单的纯色系衬衫和利落的长裤,简单的相约旅行,快乐同行福建霞浦太姥山二日游(二)04海上仙都太姥(m)山睡到自然醒,夫复何求。民宿的早点,简单而可口。五分钟的车程就到了太姥山旅游景区。只知道有天姥山,诗仙李白梦游天姥吟留别中写道天姥连天向天横,势拔五岳掩赤城。瞭望丨西藏墨脱一条公路改变一座县城因为交通不便,我大学期间一次都没回过家。如今我可以开车送孩子上学,也有许多像我这样的大学生毕业后回乡工作。待派墨公路通车运营后,林芝市区至墨脱县的公路里程将由原来的346公里缩至1上海这里太火爆!热门的已排到7月,还有这个要求劝退不少人人头攒动的咨询柜台有序排队的预检窗口座无虚席的接待大厅自上海恢复出入境证件办理一个月来上海市公安局出入境管理局市民办证的热情肉眼可见梁先生带着父母与孩子来到接待大厅为出境游早做打算红岩故事里的歌乐山小时候我们都学过一篇文章,叫小萝卜头。到现在我都还记得故事里的小萝卜头是如何在那残酷无情的革命年代里,用乐观,坚韧不拔的品质积极面对国民党反对派,想想现在生活在和平年代的我们是有多鲜花饼玫瑰花茶热卖9999!东方甄选云南专场助力云品出滇掌上春城讯2月25日,农产品直播电商平台东方甄选在西双版纳开启七彩云南行云南好物专场活动。记者通过观看直播发现,嘉华鲜花饼墨红玫瑰花茶向日葵郁金香等花产品成热销,销量达上万件。墨红四川有座冷门古城,它的古城墙堪称国宝,至今还少有人云游风物之旅在四川省内古城众多,其中主要是以阆中古城最有代表性,也是最有知名度的一座古城。其实在四川众多的古城中,至今还藏有一座非常冷门的千年古城,它不仅拥有着长达两千多年历史,而新消息!印度支付宝经营效果不佳,阿里巴巴或将搬离印度?我国网友经常以印度为嘲笑的对象,因为这个国家曾经发生了许多奇葩的事情。但实际上这个国家具有非常雄厚的发展潜力。从这个国家的发展历程来看,在过去的30年里它的经济体量翻了8倍。虽然在订单多了,加班都是快乐的!多家中小企业一片繁忙,员工难掩兴奋优质营商环境效果已现点蓝字关注,不迷路作为中国经济的毛细血管,中小企业好,中国经济才会好。今年来,随着各项稳经济政策落地见效,疫情防控取得重大决定性胜利,中小企业的发展迎来龙抬头。在企业营商环境不断优