今天跟大家唠唠我这两天折腾的“派克诺妲”。
话说最近重温《全职猎人》,突然对派克诺妲这个角色来了兴趣,就想着能不能自己也搞点类似的东西出来,当然不是说要复制她的能力,只是想做一个类似的,能读取和分析数据的小玩意儿。
最开始的想法很简单,就是用Python写个脚本,能从文件里读取信息,然后根据关键词进行筛选和提取。
第一步: 我先找了些文本数据,随便啥都行,小说,新闻,甚至是聊天记录,一股脑全扔进去。
第二步: 然后就开始写代码,用到`open()`函数读取文件,`readlines()`把内容按行分割,再用`for`循环遍历每一行,用`in`判断关键词是不是在这一行里。
第三步: 找到包含关键词的行,就把它们提取出来,保存到一个新的文件里。
一开始效果还行,但是问题很快就来了。
是效率太低。数据量稍微大一点,跑起来就慢得要死。
然后是关键词匹配太死板。只能完全匹配,稍微有点变形就不行了。比如,我要找“派克诺妲”,结果文本里是“派克·诺妲”,就匹配不上了。
这肯定不行,于是我就开始研究更高级的玩意儿。
我开始学习正则表达式。这东西简直是神器,可以定义各种复杂的匹配规则。比如,可以用`\s`匹配空白字符,用`.`匹配任意字符。这样一来,我就能匹配“派克 诺妲”、“派克·诺妲”这种变体了。
改进一: 我把代码里的关键词匹配部分,全部替换成了正则表达式。
改进二: 为了提高效率,我还学习了`multiprocessing`模块,用多进程来处理数据。把大文件分割成小块,每个进程处理一块,再把结果合并起来。
这样一来,效率确实提高了不少,但是又出现了新的问题。
有些数据是结构化的,比如JSON或者CSV。如果还是用文本方式来处理,那就太麻烦了。
解决办法: 我开始学习`json`和`csv`模块。
`*()`可以把JSON字符串转换成Python对象,
`*()`可以读取CSV文件。
这样一来,处理结构化数据就方便多了。
为了让这个“派克诺妲”更像样,我还给它加了一个简单的界面。用`Tkinter`写了一个窗口,可以输入关键词,选择要处理的文件,然后点击按钮开始处理。
这个小玩意儿已经可以处理文本、JSON和CSV三种格式的数据,可以进行模糊匹配,还可以多进程处理。虽然离真正的派克诺妲还差得很远,但至少已经能帮我做一些简单的数据分析工作了。
学东西就是要动手做,光看书是没用的。
遇到问题不要怕,一点一点解决。
多用搜索引擎,可以找到很多有用的资料。
不断学习新的技术,才能不断进步。
以后有机会,我还想继续完善这个“派克诺妲”,让它更强大,更智能。
还没有评论,来说两句吧...