NLTK-lite class Tree的实现(1)

来源:互联网 发布:江苏省教师网络培训 编辑:程序博客网 时间:2024/05/08 06:55
Nltk是由美国宾夕法尼亚大学人员用python开发的一套自然语言开发包,提供自然语言处理过程中的基本组件,如:分词,词性标注,句法分析等,用于教学及实验。其官方连接为:http://nltk.sourceforge.net/,由于其是开源的,因此也是一套python编写大型项目的良好教程,我们可以参考。
最近正在系统地重温Python中类的概念、机制、应用。结合NLTK中class Tree的实现来加深理解。
class Tree,在nltk中主要用于句法分析树的表示及操作,由于Treebank是一个十分有名的、权威的语料,因此,掌握class Tree的实现对我们实验过程中编写代码十分有益。
 
1.构造函数
class Tree(list):
     …
这是Tree的定义,可以看出,Tree是对列表的继承,列表是基类,Tree为子类。显然,list提供的各种函数,如:append(),__init__(), __getitem__()等等,Tree也全部继承来了。
这是Tree的构造函数,每次调用Tree()的时候,都会自动的调用__init__()函数来初始化Tree对象。
其参数有三个,分别为:self,node,children。通常来说,self是类内部函数必有的一个参数,是具体对象实例的引用,用于在实例化的时候保证函数处理的数据是当前正在处理的对象实例的数据;node,是一个字符串,表示句法树中的句法符号,如:‘S’表示句子的根节点,‘VP’表示是一个动词短语,等等;children是一个列表,其元素可能是Tree类型实例,也可能是字符串表示叶子节点,这也比较好理解,因为tree都是递归定义的。因此,我们基本可以知道一个Tree的大体结构:一个句法标记,以及一个孩子列表。
__init__()调用list的构造函数list.__init__(),用childred来初始化Tree实例。继承是一种is a关系,所以Tree本身就是一个列表,Tree也继承了list的构造函数,但由于其本身也有一个构造函数,因此必须显式的调用list的构造函数,其方法便是调用baseClassName.__init__()。通过这个例子,就清楚了继承的子类应如何调用基类的构造函数。node初始化子类自身的数据self.node,这是list实例所不具有的属性,属于子类对基类的扩展。