使用了svn和jira以后,工作效率得到了提高,羽方的工作热情也得到了提升,觉得自己对于团队的作用越来越高,在团队中的认同感也是越来越高了。
这一天,羽方有迎来了自己新的任务,文本过滤的优化。公司的系统本来就有文本过滤的功能,只是过滤的方式是通过关键字过滤进行的,也就是简单的进行文字匹配,如果命中的关键字太多的话,就把对应的网站进行标识,然后交由管理员进行审核。现在的问题是通过简单的关键字进行匹配的话,经常会出现误判的情况,领导和系统的使用者都希望能够提高系统的识别准确性,减少用户的工作量。然后这个问题就交给了羽方来处理。
羽方领到了任务,却没有想到好的处理办法。因为他在网络上进行过搜索,目前主要的方法是通过切词进行处理。切词以后,在对切出来的词语进行关键字匹配,这样就可以大大提高文本过滤的识别准确性。但是这种方法羽方却无法使用,因为如果要把所有的网页进行切词的话,会导致整个系统的识别效率降低,就是说一个网页的识别可能都需要2~3秒的时间。然而,实际上系统的需求要至少1秒钟内可以检测10个以上的网页,如果使用了切词方法,会导致系统的效率跟不上爬虫的效率。
不能够进行切词,羽方就必须考虑其他的方法,在保证效率的同时,能够尽可能的提高文本过滤的准确性。羽方想了好久,也没有想到可行的办法。无奈之下,像范平海进行了求助。范平海当然知道羽方的任务,而且心中也有着自己的想法,等到羽方求助的时候,就告诉了羽方。那就是对关键字进行评分,不同的关键字评分不同,而且有些特殊的关键字评分可以是负数,然后计算所有的关键字评分总和,如果达到了一个阈值,就把该网页提取出来,这样的话,准确度比着之前肯定会有一个很大的提高。
羽方听了之后,觉得确实会有不错的效果,就准备开始写代码了。却又发现如果使用了评分机制的话,就会需要大量的修改代码,因为整个的文本检查流程都会发生变化,以前是对于每个关键字只检查一次,而现在每个关键字都需要检查多次,如果处理不好的话,就会导致系统的检测性能降低很多。
关于这个问题,羽方在咨询过范平海之后,决定使用c++代码来实现关键字的检查,然后通过++的动态库来实现文本过滤的效果,因为在性能上,c++有着天然的优势,自己处理内存比着++实现关键字的过滤系统,然后再使用ctypes进行动态库调用。
这是一个完整的工作,也是羽方第一次接触多语言的共同开发,进行语言间的调用。由于没有使用过ctypes,羽方只能再从头学习。庆幸的是,羽方在学校的时候学习的编程语言就是c++,不需要重新学习c++了,这样就可以自己直接实现关键字的检查模块了。为了提高关键字检查的性能,羽方采用了二叉树遍历的方式,因为这样的话只需要遍历一次整篇网页的文本,而不需要每个关键字都过滤一遍文本。基于在学校时学习的基础还算扎实,羽方很快就实现了关键字检查的模块,并封装成了动态链接库,以供hon的调用模块的书写难度绝不亚于关键字检查模块的书写,因为内存申请的问题,羽方在书写调用模块的时候,遇到了很多的内存申请和异常返回的问题。好在,经过网上的资料搜索和范平海的帮助,羽方顺利完成了整个文本过滤模块的实现。
完成了整个文本过滤模块的代码编写之后,羽方进行了一些测试工作,发现性能比着以前有所降低,但是还在可接受的范围之内,而准确率确实提高了不少,心中非常高兴,就把代码提交到了svn之上。
然后羽方去找范平海交任务,因为已经做好了文本过滤,他当然希望能够早日把这个功能应用到系统之中。结果,范平海只问了他一个问题:“我们的系统大部分时候都跑在linux上,你准备怎么在linux上运行dll啊?”瞬间,羽方傻眼了,不知道该怎么回答,因为他真的没有想到这个问题。
“可是,那怎么办啊?难道我们要用hon来实现关键字检查吗?这样的话性能会降低很多的啊?”羽方无奈了,只能问道。
“当然不能用++的动态库编译成so的,那样就可以在linux上使用了。这样吧,我写一下,你到时候看看,也学习一下。”范平海还是喜欢把工作自己来做,就这么说道。
“好的,范哥,我一定好好学。”羽方也是乐的清闲。
就这样,羽方和范平海合作完成了文本过滤模块的开发工作,并且应用到了最新的系统当中,可以说现在爬虫系统中有二分之一的模块都是羽方完成的了,羽方看着系统的代码,想到:“明年我一定要掌握图片过滤的代码,这样就可以说整个爬虫系统的代码我都是熟悉的了。”
很快,羽方就迎来了自己工作后的第一个春节,也就是要第一次参加公司的年会和领取第一份年终奖了,这是每个第一次工作的时候都会觉得兴奋的东西,当然羽方也不例外了。
农历腊月二十五,公司的年会开始了,由于只是一个小公司,并没有什么节目之类的东西,而是公司组织员工一起出去玩,泡泡温泉之类的。羽方第一次参加,非常兴奋,和刘俊宇还有金越一起参加了年会,之所以说一起是因为他们基本上整个年会
喜欢程序员修炼生涯请大家收藏:(m.shudai.cc),书呆网更新速度最快。