基于WinForm的Exctract Tool工作总结

来源:互联网 发布:php抓取访客手机号码 编辑:程序博客网 时间:2024/06/14 19:34

Background:

        一个多月前来到新的实习单位,boss让我label一些文件,就是一篇文章中人工抽取人物、地点、时间等关键信息,可以先做个小工具来提高label效率。boss给我的是几个json文件,每个json文件都有上百篇文章,有长有短,要求label好的信息填入固定格式的json文件中。刚开始听到要人工label几百篇甚至上千篇文章我内心其实是拒绝的TAT,我来是学技术而不是干苦力啊,就算coding一天也比干这活舒服!!!没办法,谁叫我是intern。。。

前戏:

        刚开始我并不在意做个tool来辅助我label,毕竟就三百来个,暴力标记下也就几天可以完成。。。于是我真的很暴力的标记了上百篇文章。。。。幸好公司配了双屏,左屏放源文件,右边放结果文件,结果文件里面都是我事先手工加入要求的格式,然后从源文件找到相应信息填入到结果文件相应的blank中。事实证明,这样的暴力标记法真心make me crazy,标记过程容易乱而且标记后的文件还得去JSON在线校验工具验证下格式是否正确。我真的很懒,但又真的很勤快。懒的是我为啥不去做个Tool来大大减少工作量,勤快的是,我在标记完十几篇后竟然还有耐心继续暴力标记。。。

高潮:

       实话说暴力标记这么多文章也不是没啥卵用,至少让我大大增加开发一个抽取工具的欲望,同时让我了解这个Tool能从哪些方面带来抽取效率的提升,这点非常非常重要,也就是能解决用户的哪些痛点问题。最后工具也要易于使用,操作不要反人类。

       于是开始琢磨做一个WinForm应用程序。程序左边显示源文件中的文字,右边都是一些属性空格,左边找到信息后填入对应的blank中。这就避免用户与json文件打交道,尤其是以后标记工作外包给别人来做,就极大的降低了学习成本,否则你要让他们做标记工作之前先学学Json格式是什么样的。。。

       第一版我是将NodePad++嵌入到WinForm应用里,放到左边用来显示文本。NodePad++打开源文件,会同时显示所有文章(当然要滑轮上下翻滚才能看到),boss看了后不太满意,说左边最好只显示一篇文章,保存抽取结果后,会自动跳到下篇文章。Good idea!!!于是我将NodePad++撤下,换成RichText来代替,结果发现RichText并不支持鼠标右键复制粘贴功能,于是又去实现下这个功能。。。虽然键盘可以操作,但是鼠标没有这个功能总是觉得怪怪的。。。

       第二版实现了通过指定ID来查找抽取过的文本,抽取结果会显示到右边相应的blank处,用来做修改工作。同时也实现了自定义下拉菜单选项、抽取工作没完成,源文件新增多篇文章(文章位置随机,可能插入到已经抽取的文章前面)而系统依然能检测这些文章并抽取他们,以及做了一些防止异常发生的工作。

       第三版也就是现在这版本,我又增加了返回到上一个抽取过程的功能,这是我用第二版后发现还需要这个功能,并且也是个常用操作,于是今天来公司完成的。

      明天开始就要靠第三版来做标记工作了(PS:前几天boss又发了两千篇给我标记 = =,2千!!!),winter is coming~~~


总结:

     在做这个小工具时真是挺伤脑的,这也是我第一次做WinForm应用。以前在学校做的项目是纯Demo,目标就是有功能,能展示就完事了~~但是来公司后发现,这还远远不够,需要从实际使用者的角度出发来做项目的设计、规划,分析好需求(非常重要),设计好模块、定义好函数的功能(函数功能尽可能的单一,一些有意义、能抽取出来的代码就作为另一个函数)以及哪些变量要设成全局的。刚开始做这工具时是边coding边想功能,做完后再加功能,反复这样迭代,给开发工作带来许多不必要的麻烦,也导致目前Tool里的代码较为混乱。此外学会了很重要的一点,就是怎么很快的实现一个新功能,需要写什么函数、明确函数会对哪些变量造成影响以及能利用到系统中哪些已经有的函数(现在我是通过个流程图来完成整个函数功能)。比如本系统中的last返回到上一个的功能就能利用到search功能,因为他们都需要将对应的结果显示到界面中,也就是都会调用fillBlank()函数。另外last和search功能需要的参数不同,search的目标ID已给出,而last需要自己算出来,当前ID是多少,上个ID是多少。

   That‘ s All!

    

    

0 0
原创粉丝点击