2006年9月14日

承诺之语言技术平台

何谓“承诺”?我不知道标准的定义是什么,只是知道做不到的事情不会答应别人,答应了别人的事情一定要做到,如果答应了突然做不到的话要及时告诉对方原因和建议的解决方案。回想自己半年来的工作,就是在兑现一个承诺:基于XML的自然语言处理平台,也就是现在的语言技术平台LTP(http://ltp.ir-lab.org)。

回想LTP的研发,经历了一个曲折的过程。

2003年8月,我加入了信息检索研究室,开始的一个月里在全力完成自己在学校申请的科技创新课题《基于灰色系统的大气污染预测》。紧随其后是大四的科研实习,我的课题被确立为实验室车师兄负责的中文理解平台的搜索策略的探讨。从那时起,我开始渐渐了解了实验室的各种底层处理技术,开始尝试各种搜索算法来实现快速高效的树型结构的精确路径的发现。完成科研实习后我被调往词义消歧小组,之后有过路路续续的几次工作调换。等到2004年4月调研信息抽取的时候偶然发现XML是个好东西,而且已经有很多国际人士在研究XML和NLP的关系,在尝试基于XML来提升NLP研究和开发的能力。

2005年3月,忘了怎么辗转的,我又开始负责基于XML来将实验室的各个模块串连起来。不过,基础的表示方法和程序链接方式的尝试还没有完全建立起来,我就到微软亚洲研究院去实习了。等到半年后的12月初回到实验室,发现张会鹏已经在当初我交接给他基础工作的基础上实现了基于TinyXML的一个可以串连实验室各个模块的函数接口库。随后的几个月时间里,我们一起合作解决了各个层面处理结果的可视化的工作。由于2006年3月初,会鹏被派往腾讯实习。于是整个儿工作又都重新扛到了我的肩上。说实话,我起初对这个任务是有些排斥的,因为,我知道完成这件工作是需要耗费大量的时间的,因为需要学习的东西实在太多太多了,而且我正准备全身心的开展自己的指代消解博士课题。刘老师给我做了两次思想工作后,我开始全身心的投入到其中。在3、4两个月里,忘了经历了多少次的挫折和熬了多少个半夜,终于解决了一路上遇到的各种问题,当然其中也得到了非常多的师兄、师弟&朋友的鼎立帮助。

2006年4月22日,那是一个让我难以忘怀的日子。因为那一天,我向刘老师汇报语言技术平台可以在线演示了。记得当时刘老师非常的高兴,鼓励一番后发现了其中还存在很多的问题。为了赶在紧随的五一前的最后一次实验室全体例会上发布语言技术平台,那7天里我快忙疯了。因为又遇到了很多的困难。不过,天公作美,在4月28日,一个格外晴朗的日子,实验室例会上和实验室的网站上,以及刘老师的blog上,我的blog上,都看到了我们语言技术平台的身影。是的,那天是让人兴奋的!事实上,到今天为止,在线演示的体系框架仍然是那几天确定下来的。后来的日子里,尝试了一些方法来提高在线演示的速度,但是失败了很多次后找到了在线演示的socket访问方法来进行架构的重新设计。不过Socket模式没有最终成功,因为其中还有几个问题一直没有解决。回想当初自己揣摩Socket模式的经过,我找不到对应的人询问,一切都只能依靠google和baidu来查找。因为我设计的技术框架别人没有遇到过。现在想来,自己实现的这个框架还真有些奇特的。随后的5月22日,是学生计算语言学会议的截稿日。在最后的两天内,我和刘老师密切合作,终于完成了《LTP:语言技术平台》的文章。回想那两天,又是一段快要忙疯的日子。论文后来被录用了,紧接着就是8月中旬到沈阳参加学生会议,在其中正是对外宣传和推广LTP。为了赶在这个会议之前实现刘老师规划的完整的语言技术平台,去沈阳前的一周我天天都在实验室里面泡着,完善LTML的DTD,LTML化实验室的各种对外共享语料,统一LTP函数库的调用接口和详细文档的撰写。一切事情都排在了我的日程表上。还好,在熬了大概三个通宵的基础上,我全部完成了这些工作。去沈阳的火车上,我好好睡了一觉。在学生计算语言学会议上,我完成了预期的工作:宣讲论文,对外演示,推广共享计划。记得我的报告结尾时向在座的几十位老师同学承诺,我们的共享计划从2006年9月5日开始。等回到学校,为了这个承诺,我又开始马不停蹄的去撰写很多的文档和打包各种资源和程序,以及建立邮件列表和论坛,对外发出新闻邮件等等。终于等到了2006年9月5日,我的承诺兑现了,对外共享如期发布。随后又是大量的整理需要发送共享包下载地址和解压密码的邮件。嗯,现在看来这次对外共享还不错。

基本的一些数据如下:
截至2006年9月14日
LTP在线演示从4月28日到现在测试次数:15808次
LTP在线演示从4月28日到现在测试文本容量:32.8M,折合共16,400,000汉字
LTP完全共享包自9月8日对外以来下载地址和解压密码发出:50份
LTP完全共享包自9月8日对外依赖下载次数:73
LTP-Users邮件列表自9月8日发布以来加入用户:63
发布后得到有效反馈:2条(都是台湾用户Aska 发现的,已经提供解决方案)

今天下午实验室召开了一个LTP的交接例会,交接时间是一个月。这段时间开始,我会全身心的投入到自己最热爱的研究工作:Coreference Resolution! 目标:ACL2007。

以上便是我当初对xml工作的承诺。实现这个承诺花了前前后后接近两年的时间。现在想来,我不后悔。正如simply师姐在刘老师blog里留言说的那样:


舍得舍得,有“舍”才有“得”,小“舍”则小“得”,大“舍”则大“得”,敢“舍”才敢“得”。

当大“得”之时,看当初之大“舍”,有何不可“舍”?
当需大“舍”之时,何妨想想将来之大“得”,则又有何不可“舍”?


2006年9月12日

Discriminative vs. Generative model

总是听到这两个术语,但是又一直不清楚它们最本质的区别。今天花了一小点时间来彻底的弄清楚了。得到的结论如下:
Discriminative Model是判别模型,又可以称为条件模型,或条件概率模型。
Generative Model是生成模型,又叫产生式模型。
二者的本质区别是
discriminative model 估计的是条件概率分布(conditional distribution)p(class|context)
generative model 估计的是联合概率分布(joint probability distribution)p()

常见的Generative Model主要有:
– Gaussians, Naive Bayes, Mixtures of multinomials
– Mixtures of Gaussians, Mixtures of experts, HMMs
– Sigmoidal belief networks, Bayesian networks
– Markov random fields

常见的Discriminative Model主要有:
– logistic regression
– SVMs
– traditional neural networks
– Nearest neighbor

Successes of Generative Methods:
? NLP
– Traditional rule-based or Boolean logic systems
Dialog and Lexis-Nexis) are giving way to statistical
approaches (Markov models and stochastic context
grammars)
? Medical Diagnosis
– QMR knowledge base, initially a heuristic expert
systems for reasoning about diseases and symptoms
been augmented with decision theoretic formulation
? Genomics and Bioinformatics
– Sequences represented as generative HMMs

主要应用Discriminative Model:
? Image and document classification
? Biosequence analysis
? Time series prediction


Discriminative Model缺点:
? Lack elegance of generative
– Priors, structure, uncertainty
? Alternative notions of penalty functions,
regularization, kernel functions
? Feel like black-boxes
– Relationships between variables are not explicit
and visualizable


Bridging Generative and Discriminative:
? Can performance of SVMs be combined
elegantly with flexible Bayesian statistics?
? Maximum Entropy Discrimination marries
both methods
– Solve over a distribution of parameters (a
distribution over solutions)

2006年8月26日

Papers Submission Deadlines

In the personal research work, paper submission deadlines are very important! To eachone, he has been interested in some special conferences, workshops or special issue of journals. Organizing and listing them is crucial. This is a basic skill of research, I believe so.

Here, I list my paper submission deadlines Bill_Lang concerning Papers Submission Deadlines!

The screenshot is as following:

Welcome!

2006年8月25日

SWCL2006 沈阳之行

8月14日到8月21日的七天里面,我在沈阳参加了SWCL2006(第三届学生计算语言学研讨会)。在这期间将LTP(语言技术平台)在会议Demo时段进行了展示,完成了《LTP:语言技术平台》和《中国人名性别自动识别》的两个报告,并且主持了Machine Learning的第二个Session。总体来说报告效果还是很不错的,也引起了很多老师和同学对语言技术平台的关注。另外一个大的收获是有幸认识了台湾中央研究院的黄居仁老师。

在黄老师的特邀报告自然语言处理中的语言学与语言分析:多语言环境中的研究趋势中,我了解到一条非常重要的信息。那就是刚刚结束的COLIONG/ACL 2006上面Sally McConnell-Ginet有个特邀报告关于Language and Gender的。在黄老师的报告中也提到了Language and gender是一个新兴的NLP中的研究问题。会后和黄老师的交流过程中也得到了他对我的论文《中国人名性别自动识别》的一些指点。非常有幸的是我获得了和黄老师一起在世博园门口的合影。简短的交流之中我感受到了黄老师的gentel man的学者风度。



刚到沈阳的时候游玩了一下著名的北陵和千山。北陵中安息着皇太极和孝庄皇太后,整个园陵静谧肃穆,景色也相当不错。后来才知道了这里是世界文化遗产。千山据说是东北最有名气的旅游景点。整整一天的行程中有了很多在家乡爬峨眉山的感觉,千山虽小,但是应有尽有。三百多处的景点让我们大包眼福。会后的沈阳世博园之行也感受到了很多别致的景色。下面是一些相关的照片。

“烟的店”:第一眼看到就觉得非常特别,此后几天一直把它当成路标^_^


威严的皇太极,像是在指挥千军万马,这是何等的气势!


沈阳特色之一是中街,这个是中街附近一个街道上的雕塑


沈阳世博园内一景,昔日的夸父真是这样追日的么?赞叹艺术家的灵感。


哈哈,这个是后羿用过的弓箭,直指天顶!


像是“魔戒之双塔骑兵”中的双塔,只是规模差之甚远


世博园内玫瑰园中经典的黄玫瑰,真的很漂亮!

总体来说,此趟沈阳之行收获颇丰!

2006年8月12日

The Effective Executive

  在一个完美的世界里,我们每个人都该有自己的“军师”,就像《教父》里的那位律师,或是德尔斐神庙的神使,他能一天 24 小时跟随我们,在我们耳边说著妙策良言: “用纸,不要用塑料。用 Google,不要用 Infoseek。不行,你的老板不会喜欢你这种古板和僵硬表情的……”
 
  且慢,实际上,你现在就有了睿智的顾问供你驱使,它耐心地待在那里,等著你的召唤,你甚至可以把它揣在包里。1962 年古巴导弹危机期间,肯尼迪总统从巴巴拉 塔奇曼(Barbara Tuchman)的《八月炮火》(The Guns of August)一书中寻求智慧。这本书讲述了欧洲爆发第一次世界大战的经过。肯尼迪对他的兄弟说,“我不会像书中的人那么做,否则,人们这次就可以写一本名为《十月导弹》(The Missiles of October)的书了。”
  你不可能总是随身携带你想要的书。但是,你手边却可以有一份完美的阅读书目。正因为如此,《财富》调动一切资源,选出了 75 本书,这些书将激发你的思考,甚至是行动。

  这些书,并不是那种干巴巴的所谓经典商业读物。一方面,我们选出的有些书其实与商业无关。巴诺书店(Barnes & Noble)可能会把迈克尔•刘易斯(Michael Lewis)的《钱与球》(Moneyball)归入体育类书籍,但该书谈到投资(和招聘)的内容,要比任何咨询师的 文章都多。另外,它也不枯燥。虽然《我在通用汽车公司的日子》(My Years at General Motors)是一部经典,但却枯燥乏味。

  不过,有些经典作品我们还是喜欢的。《股票作手回忆录》(Reminiscences of a Stock Operator) 虽然写于 1923 年,但该书仍然能够与《门口的野蛮人》(Barbarians at the Gate)摆在一起。这两本书都不是教人具体怎么做的书─总的来说,我们没有选那些有意识教导人的书,而是选了那些寓教于乐的书。而且没有比一手的信息更有价值的了。既然你可以读沃伦•巴菲特(Warren Buffett)自己写的书,为什么还要去读别人写他的书呢?

  当然,要读完书单上所有的书,大概需要 75 年吧。不过,我们可以给你提个建议: 不要只是因为你没有时间看完一本书,就不去读它。打开封面,看看介绍,直接跳到第九章。或者,留著这个书目,把它放到抽屉里。因为书中自有黄金屋,它们正等待你去发掘呢!

今天随便浏览了一下这75本书的介绍《财富》的75本值得阅读的书。找到了一本现在最想看的书-《The Effective Executive》。


《有效的管理者》(The Effective Executive),彼得•德鲁克(Peter Drucker)著,1966 年出版(中译本由求是出版社出版)。在你管理别人之前,你必须学会管理自己。在这本薄薄的书里,德鲁克将告诉你如何去做。
哈哈,俺找到的是英文版的,还好每页字数不多,共有197页,就当练习英文阅读啦!

2006年8月9日

Python是垃圾?(转)


第一个常见看法是:

python和basic差不多应该是容易学,但是功能弱的语言


basic是好多人的年幼时的回忆了,gvbasic,gwbasic,qbaisc,各种版本把很多人带入了快乐的世界里面。但是很多人都会用了一段时间basic之后就把它废置了,因为觉得除了能够用来play,功能太少。即便是vb,也是功能不甚完善的,很多地方要依靠其他语言写的组件和直接调用api来完成功能。
而python由于粗看之下,也是那么的像玩具。而且那个交互式命令行给人带来的教学语言的感觉更加加强了人们的想法。
但是python其实功能不能说是弱,其实是非常强大。python内置了重要的数据结构和文件这些功能,而且包含了一个很大的标准库,基本上涵盖了从GUI到数据库到网络种种功能上的要求。而且还有很多爱好者,公司企业为python写第三方的库,这些库品种繁多,功能齐全。而且还能把其他语言的库加以包装给自己使用,直接用c这样的语言了来写扩展的库也是可以的。所以说,python像basic一样好学,但是功能却要强大很多。

第二个常见看法是:

python速度很慢,只能用在很少的应用场合

对于习惯了汇编和C++这样的语言的人,思维总是有一个惯性(包括我自己也经历了这么一个阶段)。就是看文件大小是数字节的,任何运行时的overhead都是绝对不可以的。那么一看见python这样的动态语言,而且动态得非常厉害的语言,怎么看怎么不顺眼也是情理之中了。
关键的问题首先是你是否需要省那么个100~200k的大小,现在的内存,硬盘,网络通信环境已经不大在乎这么一点的空间了,所以大小不是问题。关键的是运行时间吗?其实在很多场合下是不需要那么快的速度的,比如开一个窗口,运行如果延时100ms,你感觉得到吗?
python还能够把py文件进行一些处理变成pyc文件,加速源文件的解释执行。像java的虚拟机中的just in time或者hot spot这样的预先读取,预先编译的技术都能构同等的用于python。
python还有一个非常大的好处就是能够用C这样的快速的语言写扩展模块。在软件中一般都是20%的代码占据了80%的运行时间。这样你可以先用benchmark这样的工具看看软件是否慢得无法忍受了,然后再用profiler查出问题瓶颈在哪里,那么就可以把关键的代码用C解决掉。这样可以节省了开发时间(大部分代码用python写,比C快),而且运行速度也可以令人满意。
所以说,对于python的速度是不用多担心的。但是为了客观起见,python的却是慢的,在python中什么都是对象,这个比java这样的不那么纯的OO语言,就要差一些了。

第三个常见问题是:

由于python是动态的,程序更加容易出错了

有这个看法主要是认为,因为python是动态的,所以缺乏静态的类型检查,那么程序中的错误就很难发现了。设置可能说没有执行到的块的语法都没有得到完全彻底的检查。变量由于没有声明,所以容易产生误写的错误。事情真这么糟糕吗?

第一个缺乏类型检查是说一个函数有几个参数,但是由于参数的类型是动态确定的,所以没有办法在静态的时候就检查传入的参数和参数表是否匹配了。问题是你写的函数一定要自己测试了,而且一旦出了问题,你是非常容易找到出错的地方的。dynamic typing是那么灵活好用,多这么一点麻烦也是值得的。

第二个看法就是错误的。在python中所有语法都得到了检查的。即使是处在分支语句中。只是有可能你说的是这样的情况:
a = 1;
明明加了分号,怎么不说我错了呢?其实分号是可以用的,用来格开在一行中的不同语句。
还有可能是这样的:
if a == 0:
fsdfsdafsad
这个怪东西应该是一个语法错误吧。其实是未必。因为程序运行到这个的时候可能这个名字就绑定到了什么东西上了,未必就是错误。它是符合语句的语法的。

第三个则不是那么回事了。在basic中,你引用一个没有出现过的变量名。那么这个变量自动被分配,而且得到初始化。这个就会出问题了。而python中,你不能引用一个没有绑定到对象上的名字,而
name = 0
这样的语句就是一个声明了。没有什么问题。
name = 0
nama = 1
这个总是问题了吧。对于变量名的误拼写出现在赋值的情况的时候就会被通过,因为认为是产生一个新的名称绑定。那么这个也好找出来啊,必然是出现在赋值的情况下,比basic中的那种情况好多了

总体来说是,dynamic的东西缺少一些静态的检查的却是会使得错误隐蔽一些。但是由于动态带来的调试上的方便(比如能够一眼从出错信息中找到出错的行,以及调用流程)足以把副作用给抵消了。

希望通过我的一点解释,能够让你消去疑惑,喜欢上python。

2006年8月8日

C++程序员常用工具集

开发环境

  –Turbo c

  DOS时代c语言开发的经典工具,目前适合两类人使用:c语言beginner(尤其是学生一族),具有怀旧情节的专业人士:)

  –Visual C++ 6.0/7.0

  稳定而强大的IDE开发环境,具有丰富的调试功能,定制宏的功能也是其一大特色。Microsoft的经典之作,功能强大自不必言说。附带的一些工具也很不错,比如:Spy++。但编译器较之同类,支持c++标准的程度不够好,尤其6.0及以前的版本。

  –BCB

  Borland的C++ Builder是可以与VC匹敌的另一个功能强大的IDE,速度和稳定性稍逊,但对c++标准支持的程度较好。

–Cygwin

  Windows平台下的C++编译器,基于gcc,又完全兼容Window特有的东西,比如对winsock的支持。从http://www.cygwin.com可以找到有关Cygwin的详细信息。

  –Dev-c++

  Windows平台下,一个类似VC、BCB的c++ IDE开发环境,属于共享软件。界面亲切优雅,size也不大,其4.9.x版有中文语言支持,无需汉化。编译器基于gcc,完全支持STL。但是对于规模较大的软件项目,恐怕难以胜任。可以从:http://www.bloodshed.net/dev/devcpp.html找到有关Dev-c++的有关信息。

  –Source Insight

  有着和Dev c++一样漂亮的界面,提供代码的编辑和察看功能,具有丰富的语法加亮功能,可以像VC一样自动弹出成员函数的提示,并具有快速方便的函数跳转功能(但是跳转速度似乎有点慢)。只是默认设置不适合时,需要仔细的调整和修改。无法查找经typedef之后的名字。

   辅助

  –Visual Assist

  VC IDE环境下的辅助编程工具,能识别各种关键字、函数、成员变量,自动给出tip,并自动更正大小写错误,标示拼写错误等。是VC开发的良好伴侣。

  –Understand for C++

  一款c/c++IDE编程的辅助工具,支持反向工程,代码导向和一些统计功能,从http://www.scitools.com可以找到有关Understand for C++的详细信息。

程序编辑器

  –EditPlus

  一款很不错的文本编辑软件,功能强大却又十分轻巧。支持不同语言的语法加亮,还有Project组织功能,具有丰富的自定义功能。通过设置User Tool,可以和其他语言编译器结合,形成一个简单的IDE。

  –Ultra Edit

  功能和EditPlus相当,通过脚本文件提供的配置功能可以定制编辑环境,但自6.0版以后一直没多大变化,就编程而言,自定义设置没有EditPlus方便。

  –EMACS

  公认的世界上功能最多,最复杂的文本编辑器,其实也可以当作程序员用的编辑器。

  –Visual Slick Edit

  一个功能强大的程序员用编辑器。最值得一提的是其定制功能,很好用,可以和EMACS相比。自带了一套PCODE解释器,用c的语法,还可以挂接动态库。配合mingw一起使用很方便。从http://www.slickedit.com可以找到有关SlickEdit的详细信息。

  –IQEdit

  全功能的程序员用编辑器,界面很漂亮,从http://pwksoftware.com可以找到有关IQEdit的详细信息。

   UML/建模

  –Rational Rose

  强大的建模工具,早已”家喻户晓”,功过自然不必多加评说了。从http://www.rationalsoftware.com.cn可以找到有关Rational Rose的详细信息。

  –Visual Modeler

MS Visual Studio 6.0所附的小工具。属于Rational和MicroSoft合作的战略产品,是Rose的简化版。
–Visio

  Microsoft的建模工具,感觉更人性化一些,但功能没有Rose多、强、专,支持正向的代码生成,以及对代码的反向工程。

  –Together

  另一款功能强大的建模工具,用java编写而成,口碑不错,不过速度稍稍慢了一些。从http://www.togethersoft.com可以找到有关Togather的详细信息,另外,以下网址提供了一个有关Together的教程:    http://www.cc.puv.fi/~tka/kurssi … /together/TCCGuide6

  –Visual UML

  支持多种语言类型,比如:VC、VB、DELPHI、CORBA IDL等,可以直接从UML设计图生成代码,简单易用,完全适合Personal use,界面也很清爽。从http://www.visualObject.com可以找到有关Visual UML的详细信息。

  –SmartDraw

  通用图表制作软件,可以用来制作组织机构图、流程图、统计图表等。随带有图库,基本满足制作各类图表的需要。从http://www.smartdraw.com可以找到有关SmartDraw的详细信息。

  –PlayCase

  国产面向对象的建模软件,兼容UML和IDEF,轻量级软件,只是界面看起来有点简朴,乃是高展先生用Delphi完成的。

   版本控制

  –ClearCase

  Rational的版本控制管理软件,功能强大,可以控制多种类型的文档,甚至包括Word、Excel、PowerPoint文档。但使用复杂,不易上手,且不是免费软件。

  –CVS

  为基于Web的分布式协同开发提供了版本控制管理手段,且是免费软件,可以通过脚本定制功能。但在权限控制方面功能相对较弱。
–VSS

  微软的版本控制管理工具,功能相对简单,适合于小型团队开发,将其整合到微软的其他开发工具中,使用起来十分方便。

  –SourceOffSite

  微软为开发人员提供的远程访问VSS数据库的工具,使数据库得以远程更新,以支持远程办公。其他的版本管理工具还包括:PVCS、VCS、RCS等。

   XML

  –expat

  用于读取和处理XML文档的c函数库,最初是James Clark的个人作品,简单轻巧,且速度快。但支持的编码方式有限,最遗憾的是不支持中文。从http://expat.sourceforge.net可以找到有关expat的详细信息。

  –xml4c

  IBM的XML Parser,用c++语言写就,功能超级强大。号称支持多达100种字符编码,能够支持中文,适合于大规模的xml应用。若只是很小范围的应用,则非最佳选择,毕竟,你需要”背负”约12M左右的dll的沉重负担。从http://www.alphaworks.ibm.com/tech/xml4c可以找到有关xml4c的详细信息。

  –Xerces c++

  Apache的XML项目,同样是c++实现,来源于IBM的xml4c,因此编程接口也是和xml4c一致的。但是目前只支持少数的字符编码,如ASCII,UTF-8,UTF-16等,不能处理包含中文字符的XML文档。从 http://xml.apache.org/xerces-c可以找到有关Xerces c++的详细信息。

   测试

  –CppUnit

  一个c++的单元测试框架,可以通过派生测试类的方式,定制具体的测试方案。xUnit家族的一员,从JUnit移植而来,JUnit是Java语言的单元测试框架。从http://cppuint.sourceforge.net可以找到有关CppUint的详细信息。

–Rational ROBOT

  Rational的自动化测试工具,通过编写脚本的方式提供自动化测试特性。其GUI方式的脚本录制功能,有助于对GUI软件进行功能测试;其VU方式的脚本录制功能,有助于测试某些软件的数据通讯功能。

  –Rational Purify

  同样是Rational的自动化测试工具,不需要被测程序的源代码,可以用来检查内存访问错误、Windows API调用错误等,以完成软件的可靠性测试,属于白盒测试。

  其他的Rational测试工具还包括:TestFactory、PureCoverage、TestManager等。

   日志

  –log4cpp

  一个用于日志记录的c++函数库,可以将内容以定制的方式记录到不同的目的地,比如:文件、控制台syslog等,同时还可以通过控制记录级别来屏蔽掉某些无关记录。从http://log4cpp.sourceforge.net可以找到有关log4cpp的详细信息。

   注释

  –Doc++

  注释文档生成工具,根据源程序中的文档注释,可以输出TeX和HTML格式的文档。除了支持c/c++语言外,还支持IDL和java。仅提供命令行使用方式。从http://docpp.sourceforge.net可以找到有关Doc++的详细信息。

  –Doxygen

  注释文档生成工具,较之Doc++功能更为齐全,可以生成包括HTML、PDF、RTF在内的多种格式的文档,并有GUI界面,除了支持c/c++语言外,还支持IDL、java、PHP、c#等。从http://www.stack.nl/~dimitri/doxygen可以找到有关Doxygen的详细信息。