js 一个问题

就是给了我很多个不标准的地址格式,
例如

 1    name,phone,address
 2    name address phone
 3    address phone name
 4
 (name,
 address,
 phone,)
 5     我的地址:address 我的名字:name , 电话:phone
 等等一堆格式,这种怎么改啊
 还有各种中英文符号的,

这种怎么转成标准的

name phone address格式啊,
replace(/,|,/g,',')

有大佬给个思路吗,这种怎么解决啊
不标准格式
1->A(姓名),137XXXXXXXX(电话),XX省XXXXXXXXXXXXX(地址),
2->B,XX省XXXXXXXXXXXXX 137XXXXXXXXXX
3->XX省,
137XXXXXXXXXX,
C,
4->我的地址:XX省,
我的电话:137xxxxxxxxxxx,
我的性命:D
注意:这里由一连串的字符串来提供的,并不是一条地址为一项,是一整条字符串为一项
标准格式
A 137xxxxxxxx XX省XXXXXXXXX

阅读 2.1k
3 个回答

[^\s\.(),,:]+

image.png
感觉这个问题都可以提升到ML来处理了。通过提取可能的单元符,对每个单元进行打分(判断是否更像某种属性),最后给出一种可能让用户确认,这个淘宝京东啥填物流地址的时候也有,都是提供一种可能,最后让用户来确认是否正确。

就这三个属性。其实特征还是蛮明显的。
手机就纯数字或者带个-之类的。位数也就两三种
名字如果不考虑英文 长度也比较固定。
最后一个就地址了。判断里面带点路省市之类的。

要十分准确的从随机顺序随机干扰条件下提取任意元素。。应该是不太可能的。。

image.png

function parse(str) {
    return str.split(/\d+->/) // 先把一个字符串分为多条
                        .slice(1)                // 因为用了 split 所以第一个是空字符串,所以要删除
                        .map(
                            line => line.split(/[,, \n]/g) // 按照分隔符分割为多个数据
                                                    .filter(i => i) // 去掉空数据
                                                    .reduce((p, c) => {
                                                        if (/\d{8}/.test(c)) p.phone = c  // 这里的判断条件你就自己加了,比如这一条是「大于8个数字就是phone」
                                                        else if (/省/.test(c)) p.addr = c // 「带省字的都是地址」
                                                        else p.name = c // 其他的都是姓名
                                                        return p
                                                    }, {})
                        )
}

这个可能单纯的用javascript的字符串处理能力,不可能完美的处理好,因为地址和名称之间并不存在理想的分隔,也没有办法完美的识别区分二者,这个可能需要用AI技术,或者深度学习等训练出足够好的识别策略才可能较好的区分吧。

比如(下面乱构造的数据)
王省思 昆明市 13333333333沪市 江苏鑫 1345678901

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题