没有合适的资源?快使用搜索试试~ 我知道了~
自然语言和计算机编程语言的比较.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 196 浏览量
2022-07-08
10:54:22
上传
评论 1
收藏 63KB DOC 举报
温馨提示
试读
19页
自然语言和计算机编程语言的比较.doc
资源推荐
资源详情
资源评论
1 / 19
自然语言和计算机编程语言的比较
周锡令
2000年3月23日
2001/2/3 修改
摘要:
计算机在处理编程语言方面的巨大成功 和 在自然语言处理方面的举步维
艰 形成了巨大的反差。“比较”是观察和分析事物的有效方法,把自然语
言和人工设计的语言进行一番比较也许能给我们一些工作上的启示。
作为信息传递的媒介,目前的计算机语言 和 自然语言 虽然在外表上有
很大差异,但是在实质上的确有不少相通或者互相对应的地方。从最初的
比较简单的计算机语言(例如初期的 Basic)到后来越来越复杂的
Fortran, C, C++,我们可以看到把自然语言中的一些机制逐步添加到计算
给语言中的迹象。
计算机处理自然语言遇到重大困难,而人却能应付如裕,是因为人拥
有知识(包括社会生活常识以与各种专业知识),并且具有应用这些知识
来“解读”语句的能力。
自然语言是千百年以来为人际交流的目的而发展起来的。现在,人们
越来越多地“上网”,计算机越来越成为这个语言社会中的一个重要的参
与者。人们就会自觉、不自觉地根据计算机的“能力”去总结汉语的规律,
反过来影响,甚至改造人们的语言习惯。
一方面,技术向自然语言的深层冲击,另一方面,自然语言向现代技
术靠拢,这两方面的发展趋势会和起来,将会是解决“基于语义,基于理
解的自然语言处理”这一战略任务的过程中的一个重要特征。
自然语言与编程语言之间的相似点
序言
经过几十年的全球性的努力,以机器翻译为代表的计算机自然语言处理工作始终
没有达到人们预想的境界。于是我们竟不住要问:为什么电脑处理起“编程语言”
来那样轻松自如,可以作好多非常复杂的事情;而在一句普通的自然语言面前却
显得像一个大笨蛋呢?自然语言和编程语言的本质区别到底在哪里?
自然语言和编程语言显然有很多地方不同。但是作为“语言”,两者都面临语言
使用这所需要的一些要求:
(1)有强大的表达能力(能够把事情说清楚)
(2)结构化。人的短时记忆容量不多,信息如果不分层次,无论听说还是阅读
都会造成困难。
(3)具有简洁、浓缩表达的机制(使听说双方都不觉得罗嗦)。
2 / 19
在这两种要求的驱动下,两种语言都会发展出一些机制,这些机制在两种语言中
的表现可能大不相同,但是会存在某种对应关系。
在文科领域有所谓“比较文学”的行当。考虑到不同民族,不同文化发源地发展
出来的文学作品既有各自的特色,又有互通的共性,可以对它们的异同加以比较。
事实证明,从这种比较中,可以得到许多有益的启示。“比较”既然是观察和分
析事物的有效方法,把自然形成的语言和人工设计的语言(计算机编程语言就是
应用最为广泛的一种人工语言)进行一番比较也许能给我们一些工作上的启示。
语言的设计者
自然语言是在无数多人群之间的碰撞和交流之间产生、发展、筛选、淘汰之后形
成的,好比是“市场经济”的产物。
计算机编程语言(以下简称“编程语言”)则是“计划经济”的产物。它所使用
的词汇、规则都是事先由一位“上帝”(语言的设计者)策划好的。
词汇与其分类
“词”是自然语言中的基石,它们是具有语义的最小独立单位。
在编程语言中对应的东西就是 token。Token 是编译程序中的术语,它包括外形
像英语单词的 Word,以与“=, +, -, *, /, ==,>, <, (, ), ……” 之类的符号。
从信息处理的角度来看,“词”和 token 都是“符号(Symbol)”,它们可以被我们
“用来”映射到各种实体或者概念上去。根据一个符号所映射到各种实体或者概
念的性质来把它们进行分类。
语言学家把自然语言中的词划分为许多类:名词、动词、形容词、副词、数词、
连接词、感叹词、………。我们应该注意到,它们不是在同一级别上的。
名词 和 动词:是最重要的。它们直接反映了我们对世界上形形色色的事物以与
这些事物之间的相互作用。
形容词、副词、数词、则是第二级的。它们只对事物以与这些事物之间的相互作
用起修饰作用。
剩下来的连接词、感叹词、………则是第三级的。它们主要起语法的作用。(用
来提示语句部的结构性信息,起连接作用、用来表述“词”与“词”之间的关系)
与之对应,在编程语言中,可以把 token 划分为:
命令:运算符、子程序名。它们对应于自然语言中的动词。动词的“价”则
相当于编程语言中的命令、运算符、子程序所需要的“变元(arguments)”
的个数。在编程语言中,有时某些“变元”可以省略不写,而用预先规定的
“缺省值”代替。在自然语言中,也有类似的情况,但是缺省的东西要根据
3 / 19
上下文来补充。自然语言中存在一些“泛义动词”,例如汉语中的“打”,
“搞”,“干”……,英语中的“get”,“take”等。它们的进一步的具体含义
要由这些动词所涉与的对象来确定。例如:“打毛衣”中的“打”应理解为
“编织”, “打篮球”中的“打”应理解为“玩”, “打开水”中的“打”
应理解为“取得”,等等。
在面向对象的编程语言中,也有类似的“动态绑定(Dynamic Binding)”机
制:一个函数名或者子程序名字的具体含义要在“运行时”依据所涉与对象
在当时的指的类型来决定。
数据:常数、变量名。它们对应于自然语言中的名词。
其他:起连接作用、用来表述 token 之间的关系的符号,例如 if, then 等等。
它们对应于自然语言中的连接词、感叹词等等。
动词和名词之间的互换性
在自然语言中,有一个引人瞩目的现象,那就是“名词和动词之间的呼唤
性”。这是因为,“词”或者 token 是用来表达“概念”的,而一个概念往往有多
种侧面。所以自然语言中常常出现用同一个“符号”来表达不同的侧面的现象。
举例来说:
“钉”本来是名词,但是可以转化,作为动词来使用:我把画钉在墙上。
“锁”本来是名词,但是可以转化,作为动词来使用:我用锁把门锁上。
古汉语中这样的例子更多。“叔”可以转化为“认……为叔叔”,“尘”可以当作
“弄脏”,“污染”的意义来使用。
反过来,动词也往往可以转化为名词使用。比如,“偷”是动词。但是在“偷
是不对的。”这句话中的“偷”却是一个名词,因为这句话也可以说成:“偷这种
行为是不对的”
在计算机编程语言中,也有类似情况。在 declaration(声明)中,函数、子
程序名表现为“名词”,但是在执行语句中,他们就成了动词。例如在 C 语言中:
double x,y;
double sqrt(double); /* sqrt 在这里以名词的面貌出现*/
…………….
x = sqrt(y); /* sqrt 在这里以动词的面貌出现*/
词类的判断
从语法分析的角度看,对词或 token 进行分类的依据是它的语法功能。从语言
使用者的角度看,则是他们的使用方式。因此如何对词或 token 所属类别进行判
断乃是一件至关重要的事情。
不管在自然语言中,还是在编程语言中,判断一个词或者 token 的类别的办法
基本上是两种:词典 和 词本身所携带的形态标志。
4 / 19
词典中提供的信息
在编程语言中,为判断一个 token 的类别而提供的“词典”有两种:
1. 一种是语言中“先验地”规定好了的外部词典。例如关键字和一些保留字。
2. 另 外 一 种 是 编 程 人 员 ( 用 户 ) 临 时 定 义 的 部 词 典 , 这 就 是 程 序 中 的
declaration.
在自然语言中,基本上只使用外部词典。(在某些文件 [特别是有关技术标准的
文件] 中,有时也在文件的开头部分定义一个“术语”集合,但是很少涉与词性
的问题)。
例如中,市面上提供的英语词典对其中所收罗的词的词性都给出了说明。与编程
语言不同的地方是:有相当一部分词具有多种词性。例如:字符串“increase”
既可以当作名词来使用,又可以当作动词来使用。
奇怪的是,汉语词典基本上都没有给出词性方面的信息。其主要原因大概是由于
汉语部分的词都允许以多种方式使用,也就是说具有不止一种词性。这种现象在
古汉语中标显得尤为明显。汉语中的这种“传统”的来源可能如下:
汉语是象形文字,最方便给有形的对象起名字。所以至少在汉语中“名词”最优
先地得到发展。在古汉语中,由于为抽象的动作设计象形字比较困难,所以往往
就把名词直截了当地转化为动词使用:“老”指老年人,老年人应予以“尊重”,
所以就把它当作现代汉语中的“尊重”这一动词来使用。“幼”指婴幼儿,婴幼
儿需要“爱护”,所以就把它当作现代汉语中的“爱护”这一动词来使用。于是
就出现了“老吾老以与人之老,幼吾幼以与人之幼”以与与之类似的“君君臣臣
父父子子”这类令现代人费解的句子。
词类划分的形式标志
如果能够从词或 token 的外形(形式上的)特征就能判断出他是属于哪一类,那
么无论从“书写者撰写”的角度,还是从“阅读者理解”的角度,都能够大大减
少出错的机会。
在某些编程语言(例如 Visual Basic)中,如果一个变量没有在任何地方加以声
明,也可以从变量名字的外形上看出它的类型。例如:名字以%结尾的变量是‘整
数’, 名字以&结尾的变量是‘字符串’,名字以&结尾的变量是‘浮点数’等等。
英语中,在某种程度上也有类似的机制,例如:以 tion, ing 结尾的基本上是名词。
以-lize 结尾的基本上是名词。以-ful 结尾的基本上是形容词。以-ly 结尾的大概
是副词。
汉语使用方块字,没有办法添加尾缀,所以没有这样的形态标志。因此大家认为,
这一现象给汉语的计算机处理增加了困难。不过话不能说得太绝对。在某些情况
下,汉语还是有“形态标志”的。例如,在名词的前面加“很”“还”之类一般
剩余18页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3605
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功