031702433仓库
【ps:如果评测同学在评测我的代码时报错,请在cmd上pip install cpca,和pip install jieba,感恩】
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | · 计划 | 30 | 20 |
Estimate | · 估计这个任务需要多少时间 | 1680 | 1225 |
Development | · 开发 | 1580 | 1020 |
Analysis | · 需求分析 (包括学习新技术) | 300 | 200 |
Design Spec | · 生成设计文档 | 60 | 50 |
Design Review | · 设计复审 | 60 | 50 |
Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 20 |
Design | · 具体设计 | 200 | 100 |
Coding | · 具体编码 | 500 | 300 |
Code Review | · 代码复审 | 200 | 100 |
Test | · 测试(自我测试,修改代码,提交修改) | 200 | 200 |
Reporting | · 报告 | 100 | 205 |
Test Repor | · 测试报告 | 30 | 60 |
Size Measurement | · 计算工作量 | 10 | 25 |
Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 120 |
= | · 合计 | 1810 | 1450 |
计算模块接口的设计与实现过程 |
主要函数
函数名 | 功能 |
---|---|
def sort_name(infomation) | 提取名字 |
def sort_phone(firstcut) | 提取出电话 |
def sortinfo(secondcut) | 切分详细地址 |
cpca.transform(address) | 切分省市区 |
解题思路
- 使用python来解题,从入门到入坟
- 获取省市区地址数据,中国三级行政区划分爬取自(中华人民共和国民政局全国行政区划查询平台)
- 数据文件在为cpca/resources/pca.csv,数据为2019年2月20日在官网上爬取的最新权威数据
- 代码中最主要的方法是cpca.transform,该方法可以输入任意的可迭代类型(如list,pandas的Series类型等),然后将其转换为一个DataFrame,可以用list将其保存
真的动手造轮子太难了,只会使用写好的第三方库
方法sortname
:很简单的利用python自带的re模块切分数据,都怪数据太整齐,直接逗号隔开
origin_list = information.split(',', 1)
方法sortphone
:先在数据中找到长度11位的纯数字,将其提取出来后判断是否是手机号
phone = re.compile('^0\d{2,3}\d{7,8}$|^1[358]\d{9}$|^147\d{8}')
phonematch = phone.match(first_value)
if phonematch:
phonenum = phonematch.group()
方法transform
:处理了省的简写情况,普通省份和直辖市的分类,自治区和特别行政区的情况
_fill_province_area_map
_fill_area_map
_fill_city_map
方法sortinfo
:切分地址并填充省市信息,保存姓名手机数据转为字典返回
temp = {
"姓名": name,
"手机": phone,
"地址": address
}
return json.dumps(temp, ensure_ascii=False, indent=4)
计算模块接口部分的性能改进 |
- 其实性能分析图太长了,没有全部截出来。大多数时间是花在了读取省市区的数据和匹配地址上,所以改进的方法就是更改匹配算法,需要强大的算法编程能力才能进行优化
计算模块部分单元测试展示 |
测试数据
输入
刘一,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层
刘二,福建省福州鼓楼13101111111区西洪路588号金牛山
刘三,北京13101111112市海淀区清华西路28号圆明园
刘四,上海市嘉定区南翔13101111113镇沪宜公路218号古猗园
刘五,杭州市西湖区龙井13101111114路1号西湖风景区
刘六,福州市闽侯县南屿镇五峰里1号福州旗山森林国家旅游区
输出
[{'姓名': '刘一', '手机': '13756899511', '地址': ['福建省', '福州市', '鼓楼区', '鼓西街道', '湖滨路110号湖滨大厦一层']}]
[{'姓名': '刘二', '手机': '13101111111', '地址': ['福建省', '福州市', '鼓楼区', '', '西洪路588号金牛山']}]
[{'姓名': '刘三', '手机': '13101111112', '地址': ['北京市', '北京市', '海淀区', '', '清华西路28号圆明园']}]
[{'姓名': '刘四', '手机': '13101111113', '地址': ['上海市', '上海市', '嘉定区', '南翔镇', '沪宜公路218号古猗园']}]
[{'姓名': '刘五', '手机': '13101111114', '地址': ['浙江省', '杭州市', '西湖区', '', '龙井路1号西湖风景区']}]
测试覆盖率
计算模块部分异常处理说明 |
未解决错误案例
王一,上海市浦东新区锦13101111111绣路1001号世纪公园
[{'姓名': '王一', '手机': '13101111111', '地址': ['', '', '', '', '上海市浦东新区锦绣路1001号世纪公园']}]
- 错误:个别省市区地址分割错误.
- 分析:地址库中存储地址错误.
刘六,福州市南屿镇五峰里1号福州旗山森林国家旅游区
[{'姓名': '刘六', '地址': ['福建省', '福州市', '', '南屿镇', '五峰里1号福州旗山森林国家旅游区']}]
- 错误:地址的区没有进行匹配填充.
- 分析:数据匹配遗漏.
自我总结 |
- 一天速成python,在初始语法的情况下面向百度编程 ,Ctrl+c、Ctrl+v用的无比熟练
- 我太难了,只会调用第三方库来,自己不会造轮子,可惜过不了评测,这次的分数要没了
- 在大概读懂题目的情况下,使用网络上的省市区映射模块加自己的暴力解法
- 再一次思考Objective-C真的是一个小语种,就算学了它说出去也没人知道是什么
- 太久没有进行编程题的考验,脑子已经僵化了什么都不会
- 为接下来的结对编程感到无比的担忧