19
简易性
提供一个直观的框架和大量模块,使用户获取NLP知识而不必陷入像标注语言数据那
样繁琐的事务中。
一致性
提供一个具有一致的接口和数据结构并且方法名称容易被猜到的统一的框架。
可扩展性
提供一种结构,新的软件模块包括同一个任务中的不同的实现和相互冲突的方法都可以
方便添加进来。
模块化
提供可以独立使用而与工具包的其他部分无关的组件。
对比上述目标,我们回避了工具包的潜在实用性。首先,虽然工具包提供了广泛的工具
,
但它不是面面俱全的。它是一个工具包而不是一个系统,它将会随着NLP领域一起演化。
第二,虽然这个工具包的效率足以支持实际的任务,但它运行时的性能还没有高度优化。这
种优化往往涉及更复杂的算法或使用C或C++等较低一级的编程语言来实现。这将影响工
具包的可读性且更难以安装。第三,我们试图避开巧妙的编程技巧,因为我们相信清楚直白
的实现比巧妙却可读性差的方法好。
教师请看
教师请看
教师请看
教师请看
自然语言处理一般是在本科或研究生层次的高年级开设的为期一个学期的课程。很多教
师都发现,在如此短的时间里涵盖理论和实践两个方面是十分困难的。有些课程注重理论而
排挤实践练习,剥夺了学生编写程序自动处理语言带来的挑战和兴奋感。另一些课程仅仅教
授语言学编程而不包含任何重要的NLP内容。最初开发NLTK就是为了解决这个问题,使
在一个学期里同时教授大量理论和实践成为可能,无论学生事先有没有编程经验。
算法和数据结构在所有NLP教学大纲中都十分重要。它们本身可能非常枯燥,而NLT
K提供的交互式图形用户界面能一步一步看到算法过程,使它们变得鲜活。大多说NLT
K
组件都有一个无需用户输入任何数据就能执行有趣的任务的示范性例子。学习本书的一个有
效的方法就是交互式重现书中的例子,把它们输入到Python会话控制台,观察它们做了些
什么,修改它们去探索试验或理论问题。
本书包含了数百个练习,可作为学生作业的基础。最简单的练习涉及用指定的方式修改
已有的程序片段来回答一个具体的问题。另一个极端,NLTK为研究生水平的研究项目提供
了一个灵活的框架,包括所有的基本数据结构和算法的标准实现,几十个广泛使用的数据集
(语料库)的接口,以及一个灵活可扩展的体系结构。NLTK网站上还有其他资源支持教学
中使用NLTK。
我们相信本书是唯一为学生提供在学习编程的环境中学习NLP的综合性框架。各个章
节和练习通过NLTK紧密耦合,并将各章材料分割开,为学生(即使是那些以前没有编程
经验的学生)提供一个实用的NLP的入门指南。学完这些材料后,学生将准备好尝试一本
更加深层次的教科书,例如:《语音和语言处理》,作者是Jurafsky和Martin(PrenticeHal
l
出版社,2008年)。
本书介绍编程概念的顺序与众不同。以一个重要的数据类型:字符串列表(链表)开始
,
然后介绍重要的控制结构如推导和条件式等。这些概念允许我们在一开始就做一些有用的语
言处理。有了这样做的冲动,我们回过头来系统的介绍一些基础概念,如字符串,循环,文
件等。这样的方法同更传统的方法达到了同样的效果而不必要求读者自己已经对编程感兴
趣。