程序员的修养

    在做IE正方面的东西,用的是GATE框架,处理中文文本,中文处理不同于英文,因为中文最大的特点就是每个字之间没有间隔,而英文每个词之间都有间隔,GATE是谢菲尔德大学开发的开源框架,老外麽,主要处理人家的英文,因而用到中文就要首先进行分词。
    不谈分词和GATE如何处理文本,谈一下经过GATE处理完后的文本的处理,由于是分割过的文本,因而有必要进行把分割后的文本进行合并,也就是去掉空格。
    不能简单进行替换,因为会把文本开始的两个空格删除,这样看的很不舒服。因而到文本中进行全文的查找,找到一个空格就去点一个空格,ok 万事大吉。可是运行的程序多了,发现处理的越来越慢,把程序down掉,重新运行,速度就跟上来了。开始没怎么在意,以为是机子的问题呢,后来老大过来看成果,运行一下,半天没出结果。老大说这种速度是不行的,需要改良程序,打开任务管理器,发现分析一个几百k的文本,程序会耗掉20M的内存,JVM 来不及回收。老大给我说了一句很有道理的话:程序员要有程序员的修养。“周星驰说演员要有演员的修养,程序员也要有程序员的修养。”
    程序员不应该写这样烂程序,要对自己负责。查找一下原因,原来在用StringBuilder 去除空格的时候,JAVA的处理是再复制一个原先的文本(去掉那个空格的文本),一篇文档中有数千个空格,那么这个文档要被复制数千遍,JVM 只能回收少部分,因而耗费内存过大。是因为调用的系统函数处理的原因,如何该进呢?
    一个大卡车转弯是很难的,但小型车可以来个漂移转个弯,相当的easy 。用到程序中也一样,把文档分成若干小部分,一次处理一小部分的文档,那么ok ,复制也只是复制一小部分,这样JVM可以来得及回收,耗费的内存大大减小。
   

你可能感兴趣的:(文本处理)