0.前言
本文章主要记录笔者在写毕业设计时的东西,便于以后回顾时能够快速明白自己当年写的是什么,同时也给予一些读者思路或灵感什么的。
因为笔者实力有限,可能内容会有部分错误或者有更好的方法却未使用,请不要多怪指责。
1.数据生成
因为本次毕设所需要做的作品是人工智能方面的东西,需要用到大量的数据去跑。但是经过笔者一个星期的查询(查询了360实验室、微软的研究院、阿里和腾讯的研究地方)都没找到适用的信息,最后只能自己生成数据
因为需要的是垃圾账号的数据,也就是一个账号的用户名、注册ip、注册邮箱等等,所以直接上github找了个工具一键生成。
2.数据写入
为了方便后续的操作和整理,我将数据写入到csv文件中
写入csv的核心方法就是writerow()这个方法
这个方法会按照你输入的参数的数量,一行写入多少个参数,每个参数之间会以,间隔
1 | with open(filename, 'w',newline="") as csvfile: |
3.数据处理
3.1user_name
对于用户名的处理,我是按照《机器学习互联网业务安全实践》一书里面的处理方法进行处理的。
我们先构建两个池,一个是数字池,一个是字母池
1 | numPool = u'0123456789' |
将传入的用户名(就是字符串)移除字符串头尾的空格或换行符,然后再将字符串的大写字母全部转换为小写字母
1 | element = inputFileName.strip().lower() |
之后就是利用for循环对每一个字符(数字)进行统计。
返回的内容是一个类似字典一样的东西。这里看对输出的要求做调整。
1 | for c in element: |
代码中的getPattern()是用来统计字数的,如果存在一个数字或者一个字母,就返回1,都存在就返回2,以此类推。
1 | if i_num and i_cha and i_other: |
3.2user_ip
ip的处理也比较简单。
因为我们需要比对的是两个用户注册是不是同一个ip地址段,所以我们需要提取ip的前三个段。
1 | ip1 = re.search(r'((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){2}', Filename) |
正则理解:
我们直接用正则匹配就好了。
3.3user_email
email的处理是提取它的后缀名
依旧使用正则匹配
1 | a = re.search(r'@([-\w]{1,63}\.)*[-\w]{1,63}', filename) |
正则理解:
@([-\w]{1,63}.):匹配从@开始到.号(第一个)结束的任意字符
*[-\w]{1,63}:匹配前面的子表达式零次或多次
然后除去@符号就好了
1 | b = list(a.group()) |
3.4写入新的文件
将上述处理好的数据重新写入一个新的csv文件里
1 | with open(filename2, 'w', newline="")as file2: |