Hello,大家好!前一段时间跟一位银行的朋友吃饭,听到她吐槽各部门数据冗杂,数据量又大,每次审核都极为繁琐,眼睛都看瞎了。那么今天就给大家介绍常用的字符串查找语句来做一个简易的审核系统,来减轻大家的工作量。
以下是全世界各个地方的地址,我们可以粗略看出,非常的不规范,中英文混杂,有拼音有汉字,大小写组合,等等,3万多条数据,像极了平时审核的数据,今天我们的目标就是从中挑出中国的地方。
首先,要确定我们的思路,含有中国地方(不论是拼音还是汉字)的字段全是我们要数据,因此,我们需要先创建一个关键字集,里面含有中国各地地名,以及其拼音。
接下来,我们就可以用Python进行筛选。
第一部分:方法介绍
先给大家介绍find()语句。
find() 方法查找指定值的首次出现。如果找不到该值,则 find() 方法返回 -1。
a = 'abCDef'a.find('e')a.find('g')
参数说明:
string.find(value, start, end)
1、value:要检索的值;
2、start:开始检索的位置。默认是 0;
3、end:结束检索的位置。默认是字符串的结尾。
但是,find()的缺点便是不够灵活,对于英文字母的大小写是比较严格的,例如以下情况便无法查询
a.find('d')
必须输入大写的“D”方可查询
a.find('D')
因此,这个方法不适合在不规范的数据中进行查找 。
第二个方法就是给大家介绍正则表达式,一般我们对它的使用常常出现在网络爬虫中,去提取所需要的信息。
今天我们所用到的就是re.findall(),我先用一个简单的例子给大家做个说明:
import re
re.findall("python", "I like Python", flags = re.IGNORECASE)
参数说明:
findall (pattern, string [, flags])
1、pattern:正则表达式;
2、string:需要处理的字符串;
3、flags:说明匹配模式,例如不区分大小写re.I,详细匹配模式说明见下表:
第二部分:代码实现
首先,读取数据,并转换为列表:
import pandas as pd
import numpy as np
citys = pd.read_excel("D:\\city.xls", header = None)
Citys = np.array(citys).tolist()
goals = pd.read_excel("D:\\goal.xls", header = None)
Goals = np.array(goals).tolist()
说明:
因为本人习惯用pandas进行导入和用列表来进行循环操作,所以我用array().tolist()进行转换,如果想直接从DataFrame中进行循环操作,可以用DataFrame.iterrows()、DataFrame.itertuples()、DataFrame.iteritems()来实现。
建立一个空的DataFrame来存储筛选数据:
mistake = pd.DataFrame(columns = ['错误', '内陆城市'])
最后,我们结合循环语句,对目标进行筛选查询:
for city in Citys:
b = "".join(city)
for goal in Goals:
a = "".join(goal)
result = re.findall(b, a,flags=re.IGNORECASE)
if len(result) != 0:
new = pd.DataFrame([[a, b]], columns = ['错误', '内陆城市'])
mistake = mistake.append(new, ignore_index = True)
参数说明:
str.join(sequence)
将序列中的元素(sequence)以指定的字符(str)连接生成一个新的字符串。
最后,去重导出,就大功告成了
mistake.drop_duplicates(inplace = True)
mistake.to_excel("D:\\mistake.xls")
总结
虽然我们从结果中发现,由于在一些单词中包含部分城市的拼音,所以还是需要人工进行二次筛选,但相比较看三万个数据,工作量已经大大减少,此外审核用的关键字集也是极为重要的一点,关键字集越精简,筛选的结果便越好,所以小伙伴们需要根据自己的实际情况去使用。
最后,考虑到使用Python做文案审核工作的一般都没有代码经验的小伙伴,因此,我将其打包为.exe文件上传至百度云,可以根据使用说明,便于直接使用。
获得代码
以下是我的个人公众号,本文完整代码和exe程序均已上传,关注公众号回复“关键字筛选”,即可获得,谢谢大家支持。