语言处理

2024-08-13

语言处理(共12篇)

语言处理 篇1

Java语言中出现的异常即用Java语言编写的程序每一个程序员都希望自己能写出一个没有出现任何错误的程序。Java语言异常处理技术即引入一系列的异常处理技术对Java语言编写的程序出现的异常进行处理。异常是指程序的运行的过程中, 出现的异常错误。如文件不存在、数组下标超出范围、除数是0等。Java语言异常处理技术不仅要求要能检测出这些错误, 并且能对这些错误进行处理修正。目的旨在处理运行过程中出现了什么问题, 问题在哪里发生, 为什么问题会产生以及问题该如何解决。

1 Java语言异常的结构与分类

Java语言异常的定义, 即因程序执行错误而产生的异常对象。往往与Java语言异常处理技术机制相互对映。Java语言异常处理技术机制可以用来辨别、筛选、和解决异常。Java语言异常处理技术机制工作效率较高。不仅可以让java语言编写的程序更加完善、可靠、健壮还有利于解决异常。其他以往的异常处理技术, 往往采用的是执行一条跳转指令或者结束程序的进程或者异常发生时调用级别较低的函数处理等来处理异常。

1) Java语言异常的结构。

在Java中的系统类Throwable的子类涵盖了系统中所有异常类, 项目Object产生Throwable, 然后Throwable相应产生了:Exception和Error两个子类。Exception主要是指, 程序在运行的过程中可能捕获的异常。Exception类派生的还有Runtime Exception这个极其重要的子类, 在Java中Exception类和Runtime Exception类一同被称作是Java程序运行时产生的异常。例如除数为零或者下标超出范围这类异常是运行过程中产生的错误。Error一般是由系统异常引起的, 不但不可恢复, 而且在一般情况下是不愿意被程序检查获取的。主要是指Java虚拟机 (JVM) 异常或者系统异常, 代表了严重的系统异常。

2) Java语言异常的分类。Java语言异常的种类有两种, 一是系统定义的, 一种是用户定义的。系统定义异常的种类有很多主要包括:非法的输入、输出引起的Io Exeeption异常、由数据类型匹配引起的Numbcr Fomat Exception异常、由算数错误, 比如除数为0引起的Arithmetic Exception异常、由下标超出范围引起的Index Out Of Bounds Exception异常、由中断引起的Interrupted Exception异常等。系统自定义的异常种类无法满足用户需求时, 用户就自己定义异常。该过程中的异常对象是由程序员依据程序的需要来创建的。为使程序可以自动抛出异常, 程序员在创建的过程中, 最先应当创建的是异常的种类。运用Exception建立新类, 通过继承来使创建的子类可以与父类拥有同样的处理代码和接口。

2 Java语言异常处理的种类和优势

Java语言异常处理的原则指的是java程序在运行的过程中会出现各式各样的运行错误, 这些错误会产生对应的异常的对象, Java语言异常处理技术则是把这些异常对象进行采集统一处理。把正确的代码和异常的代码分类处理。Java的异常处理可分为以下三个方面:第一、Java程序进行执行时, 若在此时产生了系统可查出的异常, 那么系统会自动产生一个和该异常相匹配的异常类的对象, 同时这个异常对象会被送到Java运行时所在的系统, 这个异常处理即抛出异常。第二、如果Java程序运行时所在系统接入到异常对象, 会自动查询能解决这一类异常的程序代码, 然后这类异常对象就统一由这一程序处理, 该异常处理就是捕捉异常。第三、假如Java程序运行时所在的系统不能查询到处理这类异常的匹配的程序, 则系统自动强制结束程序的运行, 然后采取利用处理缺省异常程序的方法来处理。

1) 处理种类。

抛出异常可以理解为:用Java语言编写的程序在运行的时候被检查到有可以查出的异常, 因此而产生了一个与之匹配的异常的类的对象。这个与异常匹配的对象中涵盖了错误的种类和发生异常时的程序所处系统的状态情况。抛出异常有两种:一是在程序执行过程中用throw语句指定抛出异常。二是系统自动抛出异常。在程序执行过程中用throw语句抛出异常是指在main函数中调用throw语句将异常抛出。系统自动抛出异常是指除了用户定义之外的异常均可由系统抛出。比如, 当数组下标超出范围时, 系统识别异常并且把异常抛出。此时, 系统把异常与系统中的预定义的错误种类进行匹配识别, 然后匹配成功来终止程序的执行。捕捉异常和终止程序结束异常是指在一些特殊的情况下, 系统不知道如何去处理错误, 会将异常向上抛。如果Java程序运行时所在系统接入到异常对象, 会自动查询能解决这一类异常的程序代码, 然后这类异常对象就统一由这一程序处理, 那么就会捕捉异常进行处理, 假如Java程序运行时所在的系统不能查询到处理这类异常的匹配的程序, 则系统自动强制结束程序的运行, 然后采取利用处理缺省异常程序的方法来处理, 那么就是终止程序结束异常。

2) Java语言异常处理的优势。与传统的异常处理方式, 比如:一条跳转指令、结束程序的进程、异常发生时调用级别较低的函数处理等相比, Java语言异常处理技术把异常进行了分类, 识别了异常的种类让程序员清楚地知道哪里发生异常, 发生了什么异常以及异常产生的原因, 还把错误代码和正确代码进行了分离, 利于处理, 提高了程序的可靠性和安全健壮性。不仅可以对异常进行分类管理还能使异常被系统捕获, 并且进行下一步的处理, 使程序员工作的效率得到提高。

3 结论

Java语言异常处理的技术把正确代码和异常代码进行分开处理, 体现了Java语言异常处理技术的优点和先进性。但是, Java语言异常处理技术会增加程序运算量, 给计算机带去处理Java语言异常的其他开销, 所以相关编程人员应当注意异常的处理, 在编程的过程中, 科学合理的使用Java语言异常处理技术对于编程工作者写出健壮可靠的代码是十分有必要的。Java语言异常处理技术不仅能提高程序整体的可靠性, 还能避免编程人员在工作上出现重大的错误, 有利于编程工作者的编程工作。身为一名编程工作者, 应当加强对Java语言异常处理技术的运用能力。

摘要:Java语言异常处理技术是Java语言的重要技术特点, 准确科学的处理Java语言中存在的异常, 这样做对于维持程序的健壮性和可靠性是特别关键的。Java语言异常处理技术分析的主要原理就是在理解了Java语言异常处理技术分析的主要思想之后, 在Java语言的所处环境中, 对Java中出现的异常进行有针对性的实质性的检查指导, 并且对这些异常加以处理, 使之得到解决。本人研究了Java语言异常处理技术的思想和概念, 并且对Java语言异常处理的技术进行了具体的分析, 找到了解决方法。

关键词:Java语言,异常处理,结构,分类,技术分析

参考文献

[1]袁小英.基于Java语言的异常处理机制的研究[J].计算机光盘软件与应用, 2011 (16) :115, 158.

[2]韩瑞峰.J a v a异常处理机制及应用研究[J].忻州师范学院学报, 2012, 28 (2) :25-27.DOI:10.3969/j.issn.1671-1491.2012, 02, 009.

[3]夏宇.基于JAVA常见异常处理研究[J].计算机光盘软件与应用, 2012 (8) :183, 182.

语言处理 篇2

教学语言除了要求具有科学性、准确性之外,还应该具有启发性和艺术性,导言也不例外。导言不仅是指每节课讲述新教材开始的一段引言,它还贯穿于教学过程的许多环节。这里仅谈一谈一课中的每一段知识的导言,即通常所说的过渡语言。正确认识导言的重要性

导言在教学中起着十分重要的作用。它可以造成学生的“悬念”,能使学生明确学习目的和内容,启发学生的学习积极性和主动性,造成追求答案的渴望心理,最终达到理解教材和掌握教材的目的。但是,有些教师仅在上课的开始有一段引言,而在一课内几乎不用导言,只是简单地说:“下面我们来学习⋯⋯”这样,不仅课堂气氛呆滞,而且不益于学生掌握知识的系统性,严重制约着学生科学思维能力的发展。认真钻研教材,弄清知识之间的内在联系

每门学科都具有严密的系统性,不仅每课的各项知识之间具有系统性,一册课本中的各章、各节以及整个初中生物学的5 个部分之间也是前后贯穿,相互联系的。例如第5 部分关于遗传的知识,与第1 部分和第3 部分的细胞的基本结构和细胞核的功能,以及第4 部分关于受精卵的形成等都有联系。又如教材分别在河蚌、沼虾和鱼的结构中由浅入深,依次讲述了鳃的结构和功能,最终使学生理解和掌握了关于鳃的知识。教师只有对知识之间的联系性和系统性做到了如指掌,才能在讲课过程中灵活自如地运用好过渡语言,使学生真正理解生物知识,而不是死记硬背一个个孤立的知识点。把生物看作活着的生物体来讲授

虽然人人都知道生物是有生命的,但是由于每节课的内容都是由若干知识点构成的,因此有些教师为便于讲述,往往只注重知识的条理性,却忽视了生物学研究的对象是生命物质,忽视了生命运动的延续性。例如讲述鲫鱼时,把“生活环境”、“外部形态”,“结构和生理”、“生殖和发育”一项项孤立地讲,把上述内容生硬地割裂开,使教学枯燥无味。正确的做法是把鲫鱼当作一只正在池塘中游来游去的活动物来讲,并以这个生动的现象及其发展为主线,让学生先观察它的外部形态,再提出一系列问题,如“鲫鱼是怎样吃食物的?它是怎样消化的?”、“为什么它的口和鳃盖后缘相互交替地开合?”等等,引导学生进一步去学习,使学生在不知不觉中获得鲫鱼的各项知识。根据具体内容,设计过渡语言

把前面提到的3 点贯穿于教学的具体内容,就能使过渡语言具有艺术性和启发性。下面列举几种处理过渡语言的具体方法。

1)从问题引入 针对学生已有的知识提出新的问题,并引导学生寻找答案。例如由问题“菊花是一朵花呢还是一个花序呢?”引出“头状花序”的知识。又如讲完异花传粉后,问:“一朵花的花粉怎样落到另一朵花的柱头上呢?”然后讲述虫媒花和风媒花。

2)利用实物、标本、模型和投影片等 通过引导学生观察而引入新内容,在生物教学中这是常用的方法,多用于讲述形态和结构等方面的知识。例如学生在学习了蚯蚓的形态结构之后,知道蚯蚓的身体好似两条管子套在一起,其中里面的管子是消化管。在此基础上演示模型,进一步引导学生观察蚯蚓的消化管由哪些器官构成,这样,自然过渡到蚯蚓的内部结构的内容。

3)运用归纳法,联系前后知识 列举学过的一系列相关知识,通过观察、抽象、概括、重组和综合等,最终导出结论。这一方法主要用于总结某类生物的主要特征。例如在逐一介绍过河蚌、田螺、蜗牛和乌贼以后,对学生说:“请大家比较这4 种动物的形态结构,想一想它们具有哪些共同特征?”自然引出软体动物门的主要特征。这种方法也可以用于其他内容。如通过让学生观察各种叶序相邻两片叶的相对位置,指出无论哪种叶序相邻的两片叶总是不相重叠的,从而由“叶序”过渡到“叶镶嵌”的内容。4)创设“矛盾情节”,引起学生寻求答案的欲望 先向学生提出似乎不合理的事实,然后让学生思考其合理的原因。这样能吸引学生的注意力,并调动和启发学生去思维。例如学完种子萌发的条件后,向学生讲述“有些植物的种子已经同时具备了种子萌发的自身条件和外界条件,却没有立即萌发,这是什么原因呢?”从而过渡到种子休眠的知识。

5)从生活生产实际引入 这样引入使学生易于接受,印象深刻。例如先向学生讲述“在两棵小树之间拴铁丝晾衣服,日子长了会在铁丝上方形成瘤状物”这一现象,让学生思考这是为什么?然后经过教师的提示,而引出关于有机物的输导的内容。又如针对花丛中蜜蜂飞来飞去忙着采蜜这个学生非常熟悉的现象,问学生“是不是所有的蜜蜂都能够采蜜呢?”进而引出有关蜂群的组织的知识。

6)运用类比法,通过比较引入新知识 只有新、旧知识的结论是近似的内容才用这种方法。例如猪肉绦虫和蛔虫都是寄生虫,因此在讲述蛔虫时可以这样引入:“蛔虫和猪肉绦虫一样也是寄生虫,那么蛔虫的形态结构是怎样与寄生生活相适应的呢?”

7)再现旧知识,引入新知识 把与将要讲述的内容有关的旧知识再现,为引入新知识做准备。例如通过再现动脉、静脉的概念,加强学生对动脉和静脉中血流方面的认识,以引入“出血的初步护理”。

除了以上方法之外,还可以利用课本中的“看一看,想一想”、“动动脑”和“课外读”等设计过渡语言。总之,在生物教学中,必须以运动的和联系的观点看待生命活动,才能使过渡语言具有艺术性和启发性,才能使学生轻松愉快地获得生物知识。

语言学习中的语法处理策略 篇3

关键词:语言学习 语法 处理

在实际生活中处理语言输入的能力对于成功习得一种语言至关重要,然而目前对于语言学习者如何理解或是产生语言仍然知之甚少。

首先,语言学习者与成人本土语者相比可能在处理在线不同信息来源的融合方面有些困难,成人本土语者已经能够迅速整合在线处理中的词汇、语篇层面、韵律以及结构信息。研究已表明,孩子分析暂时的模糊句子主要依赖结构信息,却会忽视词汇--语义及语篇暗示,这和成人本土语者却不同。相反模式已发现成人第二语言学习者在解析模糊的句子时似乎更多的依靠毫无结构的信息。晚期第二语言学习者似乎在使用韵律暗示来解释时也不如成人本土语者那么高效率(Akker & Cutler, 2003)。目前,在分析中被破译这种情况,是如何用这种明显的困难来整合不同类型的信息还不清楚。他们可能被视为语言学习者和成熟的本土语者处理系统的定性差异,或源于在语言学习者中更普遍的认知局限,比如在儿童和非本土理解者中的工作记忆资源的减少。

第二,语言学习者在处理目标语时较之成人本土语者可能较慢,而这可能反映了自动化的缺乏(Segalowitz, 2003)。有几项研究利用时间进程敏感的措施,比如事件相关脑电位,表明第二语言处理中的延迟。事件相关脑电位的研究在第二语言学习者中探究了词汇--语义的处理,这对语义反常现象已获得400个效应,可读的非词类(McLaughlin, 1999)与本土语者相比已有延迟的最高潜伏期。同样的,词素句法的违反诱发了之后的发作或者说成人第二语言学习者比本土语者的语言学习事件相关脑电位成分更持久。

第三,第二语言学者本土语言的特性可能会影响他们处理第二语言输入。如果学者把不正确的第一语言处理策略用来处理他们的第二语言,这可能会是获得完整的、像母语一样的能力的一道障碍或说是在第二语言中的流利。然而,实验结果目前对这个问题还远远不能确定。尽管一些研究探究了在第二语言中在线句子处理已发现对第一语言解析的证据,其他研究也不能找出学习者第一语言背景任何影响第二语言处理性能的因素。

第四,语言处理机制对成熟的本土语者有效,可能只是部分接近语言学习者。一个具体的假设即为如何使得第二语言的语言处理不同于Ullman (2001)所提出的第一语言处理。他认为,尽管一个人母语的语言表达和处理涉及两个不同的大脑记忆系统, 所记忆单词的储存一直根植于暂时的脑叶结构,而一个程序记忆系统参与处理组合规则则植根于额部的大脑结构, 第二语言处理及表现很大程度上依赖词汇的记忆系统。

很显然,这四种假设都需要进一步的鉴定。尽管,从使用第一语言的小孩和使用第二语言的成人的过程研究这一结果来看可能已远远达到语言习得理论和模型的意义,当然目前也有没有基于经验的模型,而它在语言学习者中区分了语法处理过程如何不同于成熟的本土语者。

第五,语言学习者对于歧义句的处理不同。成人的单语句子处理速度快、效率高、高度自动化。语法结构是在理解过程中逐渐建立的,每个新进来词或短语被尽快整合到当前的部分展示中。分析器如何处理多于一种语法分析兼容的输入?调查读者或听众在实时中如何解决结构歧义能告诉我们一些关于语法启发式算法和句子处理中的信息类型。

曾研究已证明,成人本土语者可以进入不同的知识来源及迅速整合两个自下而上和自上而下的信息,在处理他们的母语时没有困难(see, e.g., Pickering, 1999)。句子处理的模块化或是多级模型的支持者认为,语法信息在处理过程中比其他信息使用的更早。 例如,The log oated down the river sank.引起著名的误入歧途效应。在这里,动词“floated”最初是主要动词而不是作为一个引入减少相关条款的分词,一种错误直到很久以后才显现,这需要实质性的再分析。相反,概率或基于经验的模式,如调谐假设,声称歧义选择是首先取决于一种特定语言模式下个人过去曝光的历史 。

虽然研究使用时间过程敏感方法,如事件相关电位(参见Friederici,2002)或速度准确性交易程序,他们都为第一语言句子处理的句法第一模型提供了支持,并发现本土语者的歧义决定偏好受多种因素包括个人工作记忆约束、词汇-语义信息如动词论点结构和主题需求,韵律、语篇层面、概率信息也是如此(Gibson & Pearlmutter, 1998)。

只有一小部分的研究检验了孩子或第二语言学习者如何在实时中解决结构歧义。虽然儿童语法发展通常在6岁左右被认为是完整的,但他们的处理系统可能更受其相对有限的认知能力,如减少工作记忆广度,而不是成人处理系统。如果这是正确的,那么我们可能会以为孩子们在进入不同的知识来源和评价不同类型的信息并行时比成年人有更多困难,儿童慢速的词汇准入和检索相对于成年人可能会引起短暂延误的歧义决定。

相比之下,青春期后第二语言学习者的认知发展通常在他们开始习得一门第二语言时就是完整的,他们已经拥有充分发展自己母语的处理系统。但是,考虑到由在非本土语言中区别单词和短语的增加处理需求,第二语言歧义决定可能延误,这与与第一语言中歧义决定想关联。工作记忆资源的额外流失也可能导致各种不同类型信息的低效率的融合(Kilborn, 1992)。第一语言词汇的内容或是语法影响第二语言的处理,这是需要进一步来想象的,或者特定第一语言处理策略可转化到第二语言中,将导致非本土的解析决定。不完整的语法习得是另一个第一语言或是第二语言处理差异的潜在来源。成功的解析依靠有关语法知识的可用性,学习者的语际语语法的非目标性特性可能会导致非本土性处理行为。基于经验模式的语言习得及处理,也预测第一语言歧义决定选择的转移,但将这些归因于第二语言中与语言模式相关的过往不足暴露。

总之,尽管程序记忆系统无法很好地解释二语与母语加工的不同,仍有一些研究结果对这种说法提出质疑。具体说来,这种模式无法解释二语词汇与句法处理加工过程的不同,儿童学习母语者与成人二语学习者间句法加工处理过程的不同。尽管在加工母语的过程中儿童与母语者一样,但他们很少或没有利用词汇-语义及相关参考信息。在加工词汇时,儿童与成人一样都会受到词汇量及词汇解析的影响。

试析Java语言异常处理技术 篇4

1 Java语言异常化处理的优势

Java语言对于程序中的异常问题的处理,往往首先在于对异常进行分类,借助不同结构和层次分类后能够对单项异常进行准确处理。异常处理实现了程序代码中出现错误段与正常段的分离,对于程序的可读执行性增强。错误在发掘后,会被传递到执行事件管理的调用堆栈中。异常处理技术能够主动捕获未发觉的错误并进行处理。这些技术优势确保异常处理的准确性大大提升。

Java语言的异常处理一般借助5个关键字“try、catch、throw、throws、finally”完成。基本思想为:先用try语句对存在疑问的局域进行监管,当try语句内有异常,则会及时被抛出,程序代码随着catch语句块的执行得以实现异常捕获并处理;通过throws语句方法声明并执行抛出,后在内部完成throw抛出异常;finally语句一般在return实现执行前处理,一般结构如下:

2 Java语言的异常分类

Java语言一般会根据特殊性的层次结构来进行对象化分类。首先看Java语言的类层次结构,异常类语言基本出自Throwable的子类,而可以按照逻辑错误Error类和Exception类来扩展Throwable子类分支。

在两类分支中,Error及其子类体系基本围绕程序运行错误及系统资源消耗殆尽等异常进行展示,语言编译单元不会直接检查整个Error及其子类体系。而Exception类又可以直接扩展为3类分支:运行时异常(Runtime Exception)、输入输出流异常(IO Exception)和用户自定义异常类,最后一类分支可以用图式**Exception表示。运行时异常(Runtime Exception)属于程序编写运行的错误,语言编译单元不会直接检查,因此与逻辑错误Error类一同可以称之为未被检测的异常。当出现未检测异常后,大多数依靠程序员的个人能力挖掘错误并及时修改。而输入输出流异常(IO Exception)和**Exception用户自定义异常类,则属于已经接受检查的异常。当程序员要对这些异常展开处理时,需使用“try-catch”来完成语句的捕获,当然也可以使用“throws”语句产生申明行为,完成异常部分的抛出,以便完成最后的编译工作。

通过上述的结构层次划分,可讲Java语言的异常分为用户自定义类或系统定义两种。用户自定义的异常一般就是由程序编译人员对程序的内在逻辑进行解读,根据需要创建特有异常对象,这些异常都与程序中的异常错误积极对应。在对自定义异常进行创建或抛出阶段,第一步应该使用Exception的子类创建方式定义异常类,并有效延续Exception类逻辑得以实现。Java语言是面向对象的语言,因此用户自定义的异常类与Exception类都有相同的面向对象相接的端口,也在这些端口中能够解析中定量的代码。通常,自定义用户异常的格式如下表示:

如下列代码段:

而由系统定义的异常类别,则可以包含在系统运行或程序数据处理过程中可自行预见的异常错误。系统条件中的类的定义同时也囊括了程序运行的错误信息,并附有合理的解决处理方案。如表1所示,可以将相应的系统自定义异常标识与异常缘由一一对应。

当然,无论是系统定义异常类还是用户自定义异常类,都不能单独成为描述系统全部异常状况的概括,同时也就无法准确地返回到用户需要了解和获知的详细信息。

3 Java语言的异常处理应坚持的原则

3.1定义异常位置的层次感

Java语言出现异常情况后需要处理,应先定义异常类,按照不同的类别将异常的实际反应与不同的目标对象进行对照例化。可以将定义Java语言的异常类当作是构建一棵大树的主要躯干部分,同时大树的每个部位可以对应在程序中出现的异常,这些树干部位都已经提前做好定义。当没有找到树干的定义异常部位后,就需要按照增添方面完成对新的异常树干位置的补充。异常分类的不同定义,因此具有了层次化的位置处理,在后期的程序代码维护中便于处理,同时其一一对应的关系能够帮助用户更快地通过异常找到导致的原因。

3.2声明异常的精准化原则

在对异常进行声明时坚持精准化原则,能够更快对应找准异常产生的缘由。例如,当输入输出流异常IO Exception类的体系运行时,往往在定义My Read方法中,需要声明其属于输入输出流异常IO Exception类,而不会因为IO Exception类属于Exception类的子类分支,将声明改为Exception类,具体的语句格式可见:

通过精准的声明定位,能够将语句后部分的抛出位置指定的更加具体。

3.3异常try语句块的简易原则

Java语言的异常处理中,常需要将各种异常可能性置于较大容量的try语句块中,这样整合的做法就是非常有利于程序的编写。不过也会导致很多的不利结果:try语句块容量加大后,相应的异常数也会增多,在海量数据中挖掘报错的原因无疑增加了难度。同时,大容量的运行容易导致系统在解读和运行程序时内存或CPU处理超负荷损毁的风险加剧,无疑为程序编码的运行效率产生不小的制约。

3.4避免异常遮掩

容纳语言异常的try语句块在接受处理并抛出后,如果同时伴随catch或finally语句块中出现已检查异常抛出,就有会部分异常因间隙的存在被遮掩。处于被遮掩状态的异常将无法及时传播,而最后阶段的外围异常则会传递到调用堆栈。这样的情况下,程序很可能在运行中因异常的遮掩累积而出错停止。而且,想要重新寻找异常的导致原因,还需要让异常不受遮掩,也就是避免在try语句块抛出后立即伴随catch或finally语句块抛出。

3.5异常段自动隔离

很多Java程序语言都存在可循环的执行语句。当执行语句在运行中持续循环后,一旦产生异常,那异常就会在这样的循环结构中反复执行,从而直接影响到其他程序语言,出现更多的异常。异常处理技术中常会采用中断跳转模式,即程序运行中出现异常会中断运行,并跳转到其他位置。如果在循环中大量出现异常段,只会让程序的运行频繁跳转,不仅增加运行消耗,使得程序的执行速度降低,而且特别容易出错,还无法有效查询到错误发生的原因,一般上如果不把异常段与循环结构体主动隔离,则主程序的报错很难实现有效恢复。

3.6异常事件的资源清理

在Java语言中,异常事件产生后会产生包括操作痕迹的资源,常用finally块来完成清理。finally块的使用应在开始资源释放前就得到更为准确的应用,要采用一对一的形式。若因两个以上资源同时定义一个finally块,则可能存在其他资源出现申请错误或释放错误,这样就不太利于第一资源的积极释放。异常事件处理中,必然要注意finally块与资源申请语句的对应呈现,才能让资源得到有效利用。

4常见两种异常处理方式

Java对于异常出现后的处理,往往将可识别的错误包装成对应的类对象,统一集中在对象程序段中实现处理。对于异常代码一般有两种处理办法:

4.1 try...catch语句

try...catch语句方法的使用,便于捕获并及时处理异常事件。catch语句可实现多个排列,以便保障不同异常的对应,例如:

4.2 throws语句

在Java语句中存在很多异常有时较为难处理,可以借助方法声明,由throws语句完成异常事件的抛出。例如:

当然,并不是所有的方法都只要简单抛出就行。若某方法可以简单抛出异常事件,则在用于方法调用的多层次嵌套结构中采用调用,Java虚拟机就能够主动在有异常状况出现的代码块中重复地读取扫描往返寻找,一直待异常代码块完成最终处理为止。异常快被找出后将由catch语句执行处理。

当然,如Java程序存在的系统要采用方法调用直接追溯到堆栈最底层后,调用main()方法寻找异常时,若尚且未找到异常处理码,就需要按照下列步骤完成处理:

(1)调用print Stack Trace()方法。这一方法可以将调用栈的出现异常的信息数据直接打印。

(2)若异常线程认定为主线程,程序运行就会直接受影响被终止;但如果认定为非主线程的异常,则单线程的终止不会影响其他线程的运行。

5结语

Java语言异常处理技术可以正确识别出错与正常的代码,并分离式处理,具有一定的优越性。在异常处理同时,要注意随着程序运算量的增加可能导致计算机的运行变慢。因此,对于广大编程人员而言,采用什么方法来完成异常处理应该需要慎重对待,要在异常处理工作中保持科学合理性。

参考文献

[1]夏宇.基于Java常见异常处理研究[J].计算机光盘软件与应用,2012,(8):182-183.

[2]夏先波.Java JDK实例宝典[M].北京:电子工业出版社,2008.

Go语言常用字符串处理方法实例 篇5

代码如下:

package main

import (

“fmt”

“strings”

//“unicode/utf8”

)

func main() {

fmt.Println(“查找子串是否在指定的字符串中”)

fmt.Println(“ Contains 函数的用法”)

fmt.Println(strings.Contains(“seafood”, “foo”)) //true

fmt.Println(strings.Contains(“seafood”, “bar”)) //false

fmt.Println(strings.Contains(“seafood”, “”))   //true

fmt.Println(strings.Contains(“”, “”))          //true 这里要特别注意

fmt.Println(strings.Contains(“我是中国人”, “我”))    //true

fmt.Println(“”)

fmt.Println(“ ContainsAny 函数的用法”)

fmt.Println(strings.ContainsAny(“team”, “i”))       // false

fmt.Println(strings.ContainsAny(“failure”, “u & i”)) // true

fmt.Println(strings.ContainsAny(“foo”, “”))         // false

fmt.Println(strings.ContainsAny(“”, “”))            // false

fmt.Println(“”)

fmt.Println(“ ContainsRune 函数的用法”)

fmt.Println(strings.ContainsRune(“我是中国”, ‘我‘)) // true 注意第二个参数,用的是字符

fmt.Println(“”)

fmt.Println(“ Count 函数的用法”)

fmt.Println(strings.Count(“cheese”, “e”)) // 3

fmt.Println(strings.Count(“five”, “”))   // before & after each rune result: 5 , 源码中有实现

fmt.Println(“”)

fmt.Println(“ EqualFold 函数的用法”)

fmt.Println(strings.EqualFold(“Go”, “go”)) //大小写忽略

fmt.Println(“”)

fmt.Println(“ Fields 函数的用法”)

fmt.Println(“Fields are: %q”, strings.Fields(“ foo bar baz  ”)) //[“foo” “bar” “baz”] 返回一个列表

//相当于用函数做为参数,支持匿名函数

for _, record := range []string{“ aaa*1892*122”, “aaataat”, “124|939|22”} {

fmt.Println(strings.FieldsFunc(record, func(ch rune) bool {

switch {

case ch > ‘5‘:

return true

}

return false

}))

}

fmt.Println(“”)

fmt.Println(“ HasPrefix 函数的用法”)

fmt.Println(strings.HasPrefix(“NLT_abc”, “NLT”)) //前缀是以NLT开头的

fmt.Println(“”)

fmt.Println(“ HasSuffix 函数的用法”)

fmt.Println(strings.HasSuffix(“NLT_abc”, “abc”)) //后缀是以NLT开头的

fmt.Println(“”)

fmt.Println(“ Index 函数的用法”)

fmt.Println(strings.Index(“NLT_abc”, “abc”)) // 返回第一个匹配字符的位置,这里是4

fmt.Println(strings.Index(“NLT_abc”, “aaa”)) // 在存在返回 -1

fmt.Println(strings.Index(“我是中国人”, “中”))    // 在存在返回 6

fmt.Println(“”)

fmt.Println(“ IndexAny 函数的用法”)

fmt.Println(strings.IndexAny(“我是中国人”, “中”)) // 在存在返回 6

fmt.Println(strings.IndexAny(“我是中国人”, “和”)) // 在存在返回 -1

fmt.Println(“”)

fmt.Println(“ Index 函数的用法”)

fmt.Println(strings.IndexRune(“NLT_abc”, ‘b‘)) // 返回第一个匹配字符的位置,这里是4

fmt.Println(strings.IndexRune(“NLT_abc”, ‘s‘)) // 在存在返回 -1

fmt.Println(strings.IndexRune(“我是中国人”, ‘中‘))  // 在存在返回 6

fmt.Println(“”)

fmt.Println(“ Join 函数的用法”)

s := []string{“foo”, “bar”, “baz”}

fmt.Println(strings.Join(s, “, ”)) // 返回字符串:foo, bar, baz

fmt.Println(“”)

fmt.Println(“ LastIndex 函数的用法”)

fmt.Println(strings.LastIndex(“go gopher”, “go”)) // 3

fmt.Println(“”)

fmt.Println(“ LastIndexAny 函数的用法”)

fmt.Println(strings.LastIndexAny(“go gopher”, “go”)) // 4

fmt.Println(strings.LastIndexAny(“我是中国人”, “中”))     // 6

fmt.Println(“”)

fmt.Println(“ Map 函数的用法”)

rot13 := func(r rune) rune {

switch {

case r >= ‘A‘ && r <= ‘Z‘:

return ‘A‘ + (r-‘A‘+13)%26

case r >= ‘a‘ && r <= ‘z‘:

return ‘a‘ + (r-‘a‘+13)%26

}

return r

}

fmt.Println(strings.Map(rot13, “‘Twas brillig and the slithy gopher...”))

fmt.Println(“”)

fmt.Println(“ Repeat 函数的用法”)

fmt.Println(“ba” + strings.Repeat(“na”, 2)) //banana

fmt.Println(“”)

fmt.Println(“ Replace 函数的用法”)

fmt.Println(strings.Replace(“oink oink oink”, “k”, “ky”, 2))

fmt.Println(strings.Replace(“oink oink oink”, “oink”, “moo”, -1))

fmt.Println(“”)

fmt.Println(“ Split 函数的用法”)

fmt.Printf(“%qn”, strings.Split(“a,b,c”, “,”))

fmt.Printf(“%qn”, strings.Split(“a man a plan a canal panama”, “a ”))

fmt.Printf(“%qn”, strings.Split(“ xyz ”, “”))

fmt.Printf(“%qn”, strings.Split(“”, “Bernardo O‘Higgins”))

fmt.Println(“”)

fmt.Println(“ SplitAfter 函数的用法”)

fmt.Printf(“%qn”, strings.SplitAfter(“/home/m_ta/src”, “/”)) //[“/” “home/” “m_ta/” “src”]

fmt.Println(“”)

fmt.Println(“ SplitAfterN 函数的用法”)

fmt.Printf(“%qn”, strings.SplitAfterN(“/home/m_ta/src”, “/”, 2)) //[“/” “home/m_ta/src”]

fmt.Printf(“%qn”, strings.SplitAfterN(“#home#m_ta#src”, “#”, -1)) //[“/” “home/” “m_ta/” “src”]

fmt.Println(“”)

fmt.Println(“ SplitN 函数的用法”)

fmt.Printf(“%qn”, strings.SplitN(“/home/m_ta/src”, “/”, 1))

fmt.Printf(“%qn”, strings.SplitN(“/home/m_ta/src”, “/”, 2)) //[“/” “home/” “m_ta/” “src”]

fmt.Printf(“%qn”, strings.SplitN(“/home/m_ta/src”, “/”, -1)) //[“” “home” “m_ta” “src”]

fmt.Printf(“%qn”, strings.SplitN(“home,m_ta,src”, “,”, 2))  //[“/” “home/” “m_ta/” “src”]

fmt.Printf(“%qn”, strings.SplitN(“#home#m_ta#src”, “#”, -1)) //[“/” “home/” “m_ta/” “src”]

fmt.Println(“”)

fmt.Println(“ Title 函数的用法”) //这个函数,还真不知道有什么用

fmt.Println(strings.Title(“her royal highness”))

fmt.Println(“”)

fmt.Println(“ ToLower 函数的用法”)

fmt.Println(strings.ToLower(“Gopher”)) //gopher

fmt.Println(“”)

fmt.Println(“ ToLowerSpecial 函数的用法”)

fmt.Println(“”)

fmt.Println(“ ToTitle 函数的用法”)

fmt.Println(strings.ToTitle(“loud noises”))

fmt.Println(strings.ToTitle(“loud 中国”))

fmt.Println(“”)

fmt.Println(“ Replace 函数的用法”)

fmt.Println(strings.Replace(“ABAACEDF”, “A”, “a”, 2)) // aBaACEDF

//第四个参数小于0,表示所有的都替换, 可以看下golang的文档

fmt.Println(strings.Replace(“ABAACEDF”, “A”, “a”, -1)) // aBaaCEDF

fmt.Println(“”)

fmt.Println(“ ToUpper 函数的用法”)

fmt.Println(strings.ToUpper(“Gopher”)) //GOPHER

fmt.Println(“”)

fmt.Println(“ Trim 函数的用法”)

fmt.Printf(“[%q]”, strings.Trim(“ !!! Achtung !!! ”, “! ”)) // [“Achtung”]

fmt.Println(“”)

fmt.Println(“ TrimLeft 函数的用法”)

fmt.Printf(“[%q]”, strings.TrimLeft(“ !!! Achtung !!! ”, “! ”)) // [“Achtung !!! ”]

fmt.Println(“”)

fmt.Println(“ TrimSpace 函数的用法”)

fmt.Println(strings.TrimSpace(“ tn a lone gopher ntrn”)) // a lone gopher

}

语言处理 篇6

关键词:自然语言处理;特征提取;语法;语义;语用

中图分类号:TP391.4 文献标识码:A文章编号:1009-3044(2007)16-31112-03

Feature Selection Research of the Chinese Technology Text based on Natural Language Processing

CHEN Pin

(Automation Department, Xiamen University,Xiamen 316005,China)

Abstract:With the development of China’s technology and economy, Chinese technology texts are full of the whole Net in the form of electronic text. So, Chinese technology text classification research has become a hot theme in the information domain. This paper set up a new feature selection model based on natural language processing. And based on this model, analyses in terms of syntax , semantics and pragmatics .

Key words:Natural Language Processing; Feature Selection; Syntax; Semantics; Pragmatics

1 引言

从50年代的机器翻译和人工智能研究开始,自然语言处理(Natural Language Processing,简称NLP)已有长达半个多世纪的历史。自然语言处理是研究如何让计算机理解和生成人们日常所使用的语言(如汉语,英语等)。目的在于建立起一种人与机器之间的密切而友好的关系,使之能进行高度的信息传递与认知活动。[1]

本文基于自然语言处理理论及方法[1][2],以及中文科技论文文本其自身较强的领域特征,建立了文本特征提取模型,并从语法、语义和语用三个层面来分析处理,同时也用于解决自然语言中的多义、同义和相关性问题。

2 基于自然语言处理的特征提取模型

本文研究的对象是中文科技论文文本,很自然会遇到自然语言的各种问题。因此构建一个优秀的自然语言处理模型[3],是我们有效处理自然语言的关键所在,具有深刻的意义。基于自然语言处理的特征提取模型由词汇层特征向量输入、语法分析、语义分析、语用分析和概念层特征向量输出等部分组成。模型结构如图1所示。

基于自然语言处理的特征提取模型过程如下:首先输入词汇层特征是已经经过预处理后的词汇,包括词性标注、句子编号等等。然后对相同句子编号的词汇采用分而治之的方法进行语法分析,即组块分析。再是利用已经经过处理的语料库中的词汇建立领域概念树,并基于领域概念树进行概念语义分析。最后是语用分析,利用词间相似度和关联度进行语境分析。整个模型中,随着语法层面到语义层面再到语用层面,语言的处理程度逐步趋于细化,其精度也随之提高。

图1 基于自然语言处理的特征提取模型

3 语法分析

语法分析虽然经过几十年的研究和发展,但仍然是一个瓶颈问题。因此目前通常采用“分而治之”的原则,来降低完全句法分析的难度,进行部分的句法分析,我们也称之为组块分析。因此,本文结合Abney组块描述体系[4],定义汉语语法基本成分为各组块形式。并在此基础上提出了一种基于词性判断规则的组块分析策略,用于解决中文科技论文文本分类过程中的自然语言问题。

其中,组块标记集如表1所示。

表1 组块标记集

词性标记集如表2所示。

表2 词性标记集

在本论文中,我们分析组块的方法主要是采用基于词性判断规则的组块分析策略(Chunk Analysis base on Part of speech Rule,简称CABPos):

设组块标记(Chunk Sign)记为CS;词性标记(Pos Sign)记为PS;->表示前后标记符,如s->p表示主语组块在谓语组块前;每一个进行语法分析的句子(即词串),记为Seni=ti1ti2…tim,其中seni为第i个句子,tij为第i个句子中的第j个词汇;把每个句子等分为前、中、后三部分,分别记为Ti1,Ti2,Ti3;关联词表为RT。

判断规则如下:

4 语义分析

目前,比较成熟的语义分析手段主要有格语法,语义网络,义素分析法,优选语义学和蒙塔格语法等等[6]。本文将结合中文科技论文文本的强领域特征在原有概念树模型的基础上创建一个领域概念树模型,并在此基础上进行概念语义分析。从而很大程度上解决了自然语言的同义现象和相关性问题,提高了文本分类的准确率。

4.1 领域概念树

从语义角度上分析,中文科技论文文本往往具有强的领域特征。比如说,“禅宗”、“僧人”等词汇就明显地带有强烈的“人文科学-宗教-佛教”领域的词汇色彩;而“中超”、“切尔西”、“角球”等词汇就明显地带有浓郁的“人文科学-体育-足球”领域的词汇色彩。因此,本文在传统概念树基础上结合中文科技论文文本强领域特征构建一个新的语义模型——领域概念树。如图2所示。

图2 领域概念树

4.2 基于领域概念树模型的概念语义分析算法

向量空间模型是文本分类特征提取中用得最多的特征模型,因为它够简单,而且特征提取的效果也不错。那么在VSM中,如何才能把领域概念树中的概念反映到特征项中,我们是这样处理的。

在数学上,词汇层映射到概念层,可用下式表示:

(8)

式中,T0为词汇层特征向量,Ts为概念特征向量,T可以用标题名B、作者情况Z、中文摘要W、关键词G、正文ZW和参考文献CK等替代。

基于领域概念树的概念语义分析算法主要包括下列操作:

设概念领域树中各概念词汇集,标记为CDS。

Step1 输入词汇层特征向量:

(9)

式中Fi表示特征向量中的第i个特征项。该特征项函数主要变量是ti、wi和CS(ti),也可以包含其他特征项信息;其中ti是特征词汇;wi是特征词汇的权重,CS(ti)是词汇ti的组块标注。

Step2 对词汇层特征向量中各特征词汇,通过领域概念路径以及组块标注归并属于同一概念层次的特征词汇。

式中T′i表示属于同一概念层次的词汇;ci表示归并后Ti概念层次代码标记。

Step3 计算属于同一概念层次的特征词汇T′i所对应的概念权重。

式中ρi表示同一概念层特征词汇T′i的概念权重。

Step4 输出基于领域概念树的概念层特征向量:

由此可见,基于领域概念树模型的概念语义分析,如果特征项中参数词汇属于领域概念树中的某领域层的概念词汇,那么该词汇就能增强它在该领域层的权重系数,极大地解决了同义词等语义问题,提高了分类的精确度。

5 语用分析

语用分析可以理解为词汇的上下文语境的分析。本文中,自然语言处理在语义、语用层面上所描述的词汇是基于领域概念树中的概念词汇。因此,本文基于词汇间相似度和关联度,提出了一种语境分析方法。

从数学角度上来分析,基于词汇间相似度和关联度的语境语用分析过程,可以用下式来表示:

式中Ts是概念语义分析后的特征向量,Tr是语境语用分析后的特征向量,T可以用标题名B、作者情况Z、中文摘要W、关键词G、正文ZW和参考文献CK等替代;ξ是词汇间相似度的阈值;η是词汇间关联度的阈值。

基于词汇间相似度和关联度的语境分析算法主要包括下列操作:

Step1输入概念语义分析后的特征向量:

Step2对概念层中的词汇进行词间相似度计算,如公式(16)和(17):

Step3对概念层中的词汇进行词间关联度计算,如公式(18)-(20):

Step4通过实验获得词汇间相似度的阈值ξ和词汇间关联度的阈值η,取词汇间相似度Simlexical(ti,tj)>ξ和关联度Relaxical(ti,tj)>η的词作为新的特征项。

Step5 输出经过语境语用分析后的特征向量:

此算法主要是通过词间相似度和关联度来判断同一概念层次上词汇间的相关性,从而进一步改善了自然语言处理过程的性能,来提高文本分类的准确率。

6 举例

为了具体说明该方法,以某标题名来举例说明,如下所示:

标题名:计算机病毒防治的协同理论与法律对策

设t1="计算机",t2="病毒",t3="防治",t4="协同",t5="理论",t6="法律",t7="对策"。B0表示标题名原始特征向量;Bs表示标题名经过语义分析后的特征向量;Br表示标题名经过语境分析后的特征向量。

首先语法分析(组块分析):

表3 组块分析结果

然后语义分析:

标题中词汇在领域概念树模型中所对应的概念,如表4所示。

表4

所以该标题名的原始特征向量B0为:

最后语用分析:

词间相似度关系(a=2),如表5所示。

表5 词间相似度

词间关联度关系(K=4),如表6所示。

7 结论

本文利用自然语言处理的理论与技术,构建了基于自然语言处理的文本特征提取模型,并从语法、语义和语用三个层面分析,使自然语言的处理程度逐步深化。语法层面上,我们利用了基于词性判断规则进行组块分析;语义层面上,则结合中文科技论文文本的强领域特征创建了领域概念树模型,并在此基础上进行了概念语义分析;语用层面上,基于概念层上词汇间的相似度和关联度,进行了语境语用分析。

参考文献:

[1]刘颖.计算语言学[M].北京:清华大学出版社,2002.

[2]张春霞,郝天永.汉语自动分词的研究现状与困难[J].系统仿真学报,2005(17),1:138-145.

[3]Mladenic D, Grobelnik M.Feature selection for unbalanced class distribution and Na?ve Bayes [A].Proc of 16th Inter Conf on Machine Learning ICML-99[C].San Francisco, CA: Morgan Kaufmann Publishers, 1999:258-267.

[4]王怡,盖杰,武港山等.基于潜在语义分析的中文文本层次分类技术[J].计算机应用研究,2004,8:151-154.

[5]姚天顺.自然语言理解[M].北京:清华大学出版社,1995.

[6]王晓龙.自然语言处理的若干问题研究.哈尔滨工业大学,2004

[7]刘挺.语言模型.哈工大信息检索研究室,2004

[8]Abney Steven, Parsing by Chunks, In: Robert Berwick, Steven Abney and Carol Tenny (eds.), Principle-Based Parsing, Kluwer Academic Publishers, 1991:257-278.

自然语言处理中的模型 篇7

“自然语言处理”是指利用计算机对自然语言的各级语言单位进行的自动处理, 包括对字、词、句、篇章等进行转换、分析与理解等[1]。自然语言的处理模型如图1所示[2]。

最早的自然语言理解方面的研究工作是机器翻译, 机器翻译设计方案于1949年首先被提出。20世纪60年代曾开展大规模的研究工作, 但由于当时技术限制, 所以进展不大。大约90年代开始, 自然语言处理领域才发生了巨大的变化, 而这种变化至今还在持续着。

1 自然语言处理中的问题及原因

自然语言处理包括自然语言处理技术和自然语言处理资源。多年来人们一直致力于自然语言处理技术的研究, 但并没有取得令人满意的结果。主要有以下几方面的原因:仍然缺乏理论基础, 尽管目前有许多理论应用于自然语言处理, 但还没有一种理论能很好地解决自然语言处理中的复杂问题。这些理论都是在自然语言这一领域的近似应用, 准确率都没有达到满意[3];由于自然语言的复杂多变, 无法通过对词、句等的分析准确得到内容的真实含义, 词汇、句法方面的问题尚未解决;另外, 语义、知识等深层次的问题更是一个巨大的挑战。迄今, 人们还没有一种较完善的理论来进行自然语言处理, 而是在进行着各种尝试和研究, 因此应用于NLP的知识非常复杂;还由于理解语言的过程是动态的而不是静态的, 不能通过简单的逻辑推理或公式完全得到自然语言的真实含义, 因此NLP需要的知识大多是归纳的而不是演绎的, 同时还是一个非确定性过程。要进行准确的归纳, 就要有足够的信息, 否则很难得到充分准确的领域词典。

另外NLP的困难还体现在自然语言的歧义 (Ambiguity) 和病构 (Formedness) 上。歧义包括:注音歧义、分词歧义 (交集歧义、组合型歧义) 、短语歧义、词义歧义、语用歧义;而病构主要是由于真实文本的语言现象非常复杂, 不规范, 不干净, 具体来说:未知词 (Unknown Words) 、已知词的新用法、不合乎语法的句子、不合乎语义约束的搭配、由于作者疏忽造成的错误等。自然语言处理是一个多层次的问题, 包括语言学家们的资源建设、研究人员的基础研究和应用研究到最上层的应用系统, 如图2所示, 其中最主要的工作就是基础研究和应用研究。

语音识别中采用的统计语言模型推动了NLP的发展;目前的统计模型在向语言深层发展, 本体论 (Ontology) 在自然语言处理中的应用受到普遍重视[4,5,6,7], 并逐渐成为研究热点。通过计算机进行自然语言处理的难点在于其复杂性, 这种复杂性来源于自然语言本身。目前很多研究人员主要从语言本身的复杂性来探讨这些问题, 找到了其中的许多原因[8,9], 这些研究成果对于人们进一步掌握自然语言的特点、改进机器处理的性能等都会有一定的促进作用。

自然语言处理模型可分为三大类:基于规则的方法即分析模型, 基于统计的方法即统计语言模型, 还有就是混合模型, 下面将分别进行叙述。

2 分析模型

分析模型是对客观事物或现象的一种描述, 是被研究对象的一种抽象。客观事物之间存在着相互依赖又相互制约的关系, 要分析其相互作用机制, 揭示内部规律, 可根据对观测数据的分析, 设计一种模型来代表所研究的对象。建立模型时, 将重点放在实际事物最本质的东西上面, 这是对实际事物的一种简化, 以便于利用计算机进行模拟研究。

自然语言处理中的分析模型是一种理性主义方法, 主要的基础是语法理论, 是将人们制定的有限的语法规则应用于有限词汇上, 通过各种组合产生了无限的语言。80年代应用于分析模型的语法理论主要有广义的短语结构语法、词汇功能语法和功能合一语法等。但这些基于规则的分析方法还无法很好地处理整个段落或整篇文章。其中的语义分析方法极大地依赖于特定语言的语法结构, 如果遇到俚语或语法不当的句型, 或是人为地在特定情境下的灵活运用, 语义分析模型的处理效果会大打折扣, 准确率会大大下降。要想提高准确性, 就要求系统能够灵活地调整其分析结果, 理解每个新词的含义或词义的变化, 要做到这一点并不是很容易, 因而系统的扩展性不佳。这类系统一般只能支持很少的几种语言。

分析模型曾经对自然语言处理产生过深刻的影响。但是由于自然语言是很随意的, 在自然语言的表达和理解上, 从语音层 (Phonetic Level) 、词法层 (Morphological Level) 、句法层 (Syntactic Level) 、语义层 (Semantic Level) 、语用层 (Pragmatic Level) 以及话语层 (Discourse Level) 的各个层次上都存在着歧义, 决定了自然语言是很难形式化的。因此, 这种模型对于较小规模的自然语言处理具有一定的效果, 而对于整段的、整篇的、大规模的自然语言处理还不能达到很好的效果。随着对自然语言研究的深入, 出现了基于语料库的方法。这类方法主要是通过词法、句法、语义等多层次的加工处理, 从生语料中获取各种语言知识, 然后利用相应知识对语言进行分析、理解, 主要包括统计的方法、基于实例的方法等。语言分析方法和语料库方法的结合是自然语言处理发展的一个趋势。

3 统计模型

有些过程通过理论分析方法导出的模型不能很好地反映该过程的本质, 于是研究者想到了可通过试验或直接由其发生过程测定数据, 然后应用数理统计法求得各变量之间的函数关系, 得到相应的模型, 就是统计模型 (statistical model) , 这是从真实的数据中学习的方法。

自然语言处理中的统计模型是一种经验主义方法, 用到了多个学科的知识和技术, 涉及到语言学、计算机科学、数学等。其中数学是自然语言处理的基础, 尤其是数学中的概率统计方法。通常, 统计方法不需先验知识, 关键是语料库中有足够的信息量, 以确保在学习过程中模型能够学习到足够的知识。统计语言模型首先要进行训练, 当达到一定要求后便可应用。具体来说, 大致经过这样几个步骤:首先, 要建立大容量的语料库, 并对语料进行不同深度的标注;然后, 设计模型和学习算法, 根据不同的目的, 选择不同的语言特征集, 用设计的模型和算法学习和表达这些特征;进行模型训练, 根据学习的效果对模型和算法进行必要的调整, 并重新学习, 直至得到预期的结果;将得到的模型植入应用系统, 进行具体应用。典型的统计模型主要有:N-Gram语言模型、指数语言模型、支持向量机语言模型和神经网络语言模型。

3.1 N-Gram语言模型

N-Gram是大词汇连续语音识别中常用的一种语言模型。当两个历史最近的N-1个词 (或字) 相同时, 映射这两个历史到同一个等价类, 在此情况下的模型称之为N-Gram模型。N-Gram模型被称为一阶马尔科夫链。模型利用上下文中相邻词间的搭配信息, 计算出具有最大概率的句子, 从而实现对语言信息的处理, 无需用户手动选择。N-Gram模型基于这样一种假设:第N个词的出现只与前面N-1个词相关, 而与其它任何词都不相关。整句的概率就是各个词出现概率的乘积, 这些概率可以通过从语料中统计N个词同时出现的次数直接得到。N的值不能太大, 否则计算量仍然太大, 常用的是二元的Bi-Gram和三元的Tri-Gram。

3.2 指数语言模型

指数语言模型包括:最大熵模型 (ME, Maximum E-ntropy Model) 、条件随机域模型 (CRF ConditionalRandom F-ield Model Model) 、最大熵马尔科夫模型 (Maximum Entropy Markov Model) 和支持向量机 (SVM, Support Vector Method) 等。最大熵来源于热力学, 如今在信息学等许多领域得到了广泛的应用, 在自然语言处理方面也是一种主要的处理方法。自然语言处理中, 最大熵模型的原理是根据语料信息的最大熵估计Ngram概率, 得到的是满足约束集条件的、所有模型中熵最大的模型。其优点是融合多种知识源, 根据多种知识源的信息量来得到相应的概率;缺点是训练算法的时间复杂度过高, 数据稀疏问题比较严重, 不适合处理大标记集问题;最大熵马尔科夫模型是概率及随机过程理论在自然语言处理中的应用, 是基于统计机器学习的信息抽取方法。MEMM根据最大熵原理估计HMM中的发生概率和转移概率, 优点是适应性好, HMM易于建立, 不需大规模的词典集与规则集, 抽取精度较高, 因而得到研究者的关注[10], 其缺点是局部概率归一化, 即标记偏置问题。最大熵模型和最大熵马尔科夫模型都存在标注偏差的缺点;而条件随机域模型则克服了这一问题。CRF是根据Markov随机域相关理论描述语言序列, 对整个序列的联合概率建立一个统一的指数模型。其优点是全局归一化, 从而避免了MEMM标记偏置问题;但也有一定的缺点, 即时间复杂度过高。

3.3 支持向量机语言模型

进行信息抽取时, 基于特征的表示方法会产生对象表示的局部性, 造成计算的不可行;而支持向量机 (Support Vector Machine, SVM) 的方法, 则能较好的解决这类问题。支持向量机在解决小样本、非线性及高维模式识别中表现出许多特有的优势, 是建立在统计学习理论和结构风险最小原理基础上的, 构造的模型具有很好的预测性能, 不存在过学习问题。SVM已经广泛应用于手写体数字识别、文本分类等领域。采用支持向量机进行自然语言处理, 需要选择或构造一个核函数, 核函数的引入可以避免“维数灾难”, 大大减小计算量, 并且比基于特征的算法能够搜索更大的空间。SVM方法将焦点从特征选择问题转移到核函数的构造问题。具体来说, 涉及核函数构造、核函数类别选择以及核函数参数选择统。

3.4 神经网络语言模型

神经网络语言模型的理论基础是仿生学, 通过构建的人工神经网络来对自然语言进行处理, 通过模仿人脑神经元的结构和功能来模拟人对自然语言的处理过程, 从而建立自然语言处理系统。神经网络分为前向和反馈两种类型。前向多层神经网络是最常用到的网络模型, 神经网络语言模型就是利用多层神经网络计算得到Ngram概率。优点是能够避免高阶Ngram模型面临的维数灾难问题, 避免数据稀疏引起的估算结果不准确的问题;缺点是模型构建及学习过程中计算量过大, 通常需要大规模并行机群支持, 才能得到较好的效果。

随着IT技术的发展, 人们将人工智能及机器学习的研究成果应用在自然语言处理之中, 从而出现了多种统计模型[11,12,13,14]。统计语言模型在实际应用中取得了一定的效果, 现在在自然语言处理领域中占统治地位, 并且由统计语言模型还产生了一些相关的分支学科领域, 例如语料库语言学 (Corpus Linguistics) 等。统计语言模型已经成功地应用于拼写纠正、机器翻译、语音识别和信息检索等许多自然语言处理领域。近年来, 基于语料库和面向统计学的自然语言处理技术得到了很大发展[15,16]。语料库语言学研究的基础是机器可读的大容量语料库和一种易于实现的统计处理模型, 其中涉及大量的概率统计知识。

4 混合模型

自然语言的处理是一个极其复杂的过程, 涉及到自然语言的多个层次、多种依存关系和多门学科的专业知识, 既需要理性分析, 也需要感性经验。基于规则的方法虽然较准确, 但适用范围小;而统计的方法则适用范围较广, 所以仅仅通过理性主义中基于规则的演绎方法或经验主义中基于统计归纳的方法, 都不能达到理想的效果, 必须将多种思想方法相结合, 才能取得较好的效果, 这就产生了混合模型。混合模型就是统计与规则相结合的方法, 用统计的方法解决共性的东西, 用规则解决个性的东西。目前, 研究人员已研究出一些混合模型[17,18], 取得了一定的成果。

5 结束语

语言处理 篇8

关键词:ArcGIS,制图,数据流,GIS,脚本

0 引言

Arc GIS是由ESRI (美国环境系统研究所) 研发的一款用于地理空间信息采集、加工处理、进行空间分析并为人们生产提供决策的GIS软件, 目前已广泛应用于自然资源管理、自动制图、设施管理、城市和区域规划、交通管理等领域。现如今空间数据处理批量化、流程化已成为GIS发展趋势, Arc GIS中的Model Builder模块为空间数据处理自动化提供了平台, Model Builder为用户提供了创建、编辑和管理模型的界面。用户可以将空间数据、以及Arc Tool Box中的几百个的处理工具拖拽到模型窗口中, 并用连接线将他们串起来, 最终得到的就是针对某个问题的一系列的空间分析处理操作, 模型构建器也可以被认为是一个构建工作流的可视化编程语言。但是在实际应用中Model Builder无法满足所有的需要, 这时需要借助Python语言编写脚本来完成复杂的处理。Python是一种解释型、面向对象、动态数据类型的高级程序设计语言, 它提供了简易的帮助文档, 简单易学且完全免费。在Arc GIS 9.X之后ESRI开始将Python语言引入, 将Arc GIS中绝大部分的空间分析工具封装到Arcgisscripting站点包中, 而从Arc GIS10.0开始, 站点包更变为Arcpy, Arcpy很好的继承了Arcgisscripting, 用户可以借助Python语言调用站点包中的所有工具, 用于自动化处理脚本的开发。

1 Arc GIS Model Builder

许多经验丰富的地理信息系统用户可以通过图形编辑器构建数据流图重复处理数据。某些地理信息系统软件具备扩展程序模块以便设计批量数据处理。与GIS可视化语言相比, 本文则进一步深化阐述地理信息系统可视化编程语言。欧特克 (Autodesk) 公司的Auto CAD三维地图软件可提供工作流设计器用于图形编辑程序。在Arc GIS中, 数据流处理模块名为“Model Builder” (建模工具) 。其真实用途就是把地理数据处理工具按顺序连接起来, 使得前一个工具的输出结果作为下一个工具的输入来源。“Arc Tool Box”是一个工具集, 几乎包括所有空间处理操作。“Geo Processing”作为核心编程模块包含了全部功能 (函数) 。Model Builder (建模工具) 中的数据流模型可以轻易的通过从工具箱 (Arc Tool Box) 界面拖放空间对函数及数据进行设计。Arc GIS中具备了500多种应用工具。当用深灰/浅灰椭圆表示数据时, 则用白色盒子表示空间函数。椭圆表示空间函数的输入和输出数据。图1为一个简单的数据流模型例子。

上述例子的作用是为了改变输入的多边形的数量和形状。首先, 制图模型聚合多个多边形成为一个多边形, 输入的多边形代表该区域过去三年检测到的传染疾病 (图2) 。制图员需要合并代表全部时间的多边形。此外, 地图中所示的多边形边缘比原来的边缘平滑。这项操作在制图学中较为常见。这个任务由制图工具箱操作两个多边形实现。简化、平滑操作应用于输出聚合多边形。

一般来说, 任何输入数据都可以由该模型处理。该模型可处理批量数据。用户最终可获得一个适合于地图的多边形。图2显示了输入3个多边形后最终如何变化成一个为地图所用的光滑图形。

2 地理信息系统中Python语言脚本

Python脚本语言是一种免费软件的编程语言。Python是一种解释型的、通用的高级编程语言。设计理念强调代码可读性。因此, Python有非常清晰的语法。最新版本的Arc GIS 10.1支持2.7版本的Python。尽管它不是Python的最新版本, 但它在Arc GIS里是稳定的脚本。所有的方法在地理处理器模型和手册中都有详细的记录。这使得Python对于终端用户极其方便。在建模工具中, Python比模型具备更多优势, 例如循环 (for, while) 、决策 (条件) 这样的基础程序结构都可以得到较好的运用。此外, 它可以避免程序运行过程中产生错误。所有意想不到的错误几乎可以通过在Python结构中编程“尝试排除”来避免。此外, 可添加通知消息到用户窗口反应批量数据处理进程。事实上, 输出信息里可将重点标注出来。

在Arc GIS中可通过两种方式创建Python脚本。第一种方式是将建模工具现有模型输出为Python脚本, 第二种方法是直接在一个集成开发环境中创建一个脚本。对于初学者而言, 第一种方法相对第二种方法来说更为简单。

2.1 输出模型

图3显示将图1中模型导出Python脚本。自动输出的Python程序附带导出时间以及一些简单的注释以及程序调用接口名称, Arcpy包含所有地理处理方法的程序库。随后, 自动化输出创建代码以便脚本输入参数 (输入和输出特征类的名称和位置) 。最后, 添加地理数据处理方法与参数:

arcpy.Aggregate Polygons_cartography () ,

arcpy.Simplify Polygon_cartography () and

arcpy.Smooth Polygon_cartography () .

其优势在于脚本涵盖了全部函数, 它可作为其他Python扩展的基础。

2.2 集成开发环境中创建脚本

在集成开发环境中编写脚本。集成开发环境优势在于语法突显, 命令自动化执行, 智能缩进以及综合调试功能 (步进, 开启断点检视窗口) 。局部脚本的结果显示在集成开发环境的互动窗口。Python Win是脚本集成开发环境的另一个例子。图3是脚本编辑器窗口。地理编辑器中某些方法只能通过脚本实现, 例如列举法。Python列举法返回的所有文件名或栅格数据集在硬盘上的一个目录。这是直接在集成开发环境中编写脚本的一个原因。

3 运行Python脚本

Model Builder创建的数据处理模型及Python编写的脚本程序都可以添加到Arc Tool Box工具箱里形成用户自己的工具集。自定义工具的名称可以按照需求来定义。一个工具箱可包含若干个模型及脚本。建模工具里的模型以扩展工具的模式储存在自定义工具箱里。Python被单独储存为PY文件。工具箱通过链接路径将他们联系起来。如图4所示, 将用户自定义的Python脚本程序添加到系统工具箱Arc Tool Box里面。

如图5所示的界面, 是用户将数据处理程序添加到Arc Tool Box时根据需要设置的工具参数。具有帮助用户在使用该工具时能快速阅读工具的属性, 以及需要设置的参数, 而且可以了解每个参数的值域。

4 修正Python脚本

建模工具虽然方便高效, 但是不能满足所有需求。而脚本语言可充分利用Python的程序命令和函数。可以解决Model Builder不能处理的问题。当进行数字高程模型研究时, 可自动创建480多种的测试数据集。这样一来各种插值方法的输入参数就必须从文本文件中读取。这些操作对于脚本语言来说是很容易实现的。

Arc GIS对DEM名称字数限定为12位。我们需要对每组实验数据进行命名, 如果手动来处理会变得非常麻烦, 使用Model Builder来处理也是非常繁琐, 这时使用脚本语言来处理该问题就变得十分简单, 只需通过一个变量来控制每组数据最后的编号即可实现。

建模工具Model Builder可以实现Arc GIS数据批量处理功能。并且导出的模型代码可广泛应用于地理数据处理方法。但是这样一来运行效率变得较低。Python在脚本运行时需要对每个命令进行解释。因此, 脚本运行速度相对而言不如模型快。Arc GIS的基本功能也可以基于Arc Objects以另一种方式进行开发, 通过使用应用程序接口中将产生:COM、.NET、Java和c++。

5 结论

使用Arc GIS处理空间数据时可以通过模型设计器 (Model Builder) 来创建流程化处理模型。也可以使用Python语言编写脚本来进行系统工具的优化。这两种方式对于数据量较大、重复性工作较多的情况十分有效。将设计好的模型转换为Python语言可以用于后续更复杂的处理程序。Python脚本除了要求用户具备一定的编程能力外, 还应当具备对一些特殊地理处理方法的理解。Python具有非常清晰的语法并且提供了一个集成开发环境。文章中从地图学领域举了三个例子, 说明脚本在Arc GIS软件的可用性。Python脚本未来对Arc GIS用户非常有用。此外, 脚本可大幅度减少手动处理数据。

参考文献

[1]Z.Dobesova."Visual programming language in geographic information systems", NAUN/IEEE.AM International Conferences, WSEAS Press, Prague, 2011, in press.

[2]What is Python?Executive Summary.Python documentation[N].Python Software Foundation, 2011-08-1.

[3]ESRI.Geoprocessor Programming Model Arc GIS 9.3 2009[M].2010, 8 (19) .

[4]Z.Dobesova, “Automatic generation of digital elevation models using Python scripts”, Conference Proceedings SGEM 2011, 11th International Multidisciplinary Scientific Geo Conference.STEF92 Technology Ltd., Sofia, Bulgaria, 2011, ISSN 1314-2704, pp.599-604.

[5]Z.Dobesova, T.Valent, “Program Extension for Diagram Maps”.Geodesy and Cartography, 37 (01) , Taylor&Francis, 2011, pp.22-28.ISSN:2029-7009.

[6]孙广磊.征服Python——语言基础与典型应用[M].北京:人民邮电出版社, 2007.

[7]王亚卿, 方龙.浅析Python在地图处理中的应用[J].华东森林经理, 2008 (1) :83-84.

[8]彭海波, 向洪普.基于Python的空间数据批量处理方法[J].测绘与空间地理信息, 2011.

SQL语言信息处理中的执行效率 篇9

我国高等教育快速发展的今天, 利用计算机技术管理数据已成为数据管理的必然趋势。结构化查询语言SQL是英文Structured Query Language的缩写。按照美国国家标准协会 (ANSI) 的规定, SQL被作为关系型数据库管理系统的标准语言, SQL语言是功能很强的、公认的数据库管理系统的检索工具, SQL语句可以用来执行各种操作。目前, 绝大多数流行的关系数据管理系统 (DBMS) , 如Oracle, Sybase, SQL Server, Visual Fox Pro等都采用了SQL标准语言。尽管查询数据是SQL最重要的功能之一, 但它绝不仅仅是一个查询工具, 它还为用户提供了用于控制数据库管理系统的所有功能, 包括数据定义、数据操纵、数据控制等功能。使用SQL语句来处理数据, 不仅方便了编程, 而且注重SQL语言不同实现方式之间执行效率性能上的差异, 还可以提高数据处理的速度。

“实验室信息管理系统”是为适合高等院校实验室需求及管理特点而开发的一套具有综合管理功能的系统软件。而在基于结构化查询语言SQL语言对实验室信息管理系统的信息处理应用中, 对SQL语言的索引、临时表、谓词嵌套、SQL语言开发应用系统技术等功能, 不仅在执行速度和效率问题上进行探析, 而且在对其各功能实现的分析研究中, 可以很方便地实现对数据库的浏览、修改、查询和报表输出, 以减轻管理人员的基础工作量, 从而更好地完成实验教学任务, 提高实验室教学管理效率。同时对处理其他数据库管理系统也具有实用性。

2 实验信息管理系统

“实验室信息管理系统”开发中, 数据库采用SQL Server 2000, 设计上采用了Java, ASP.NET, VB.NET多种软件完成, 各模块的划分与设计基于B/S和C/S体系结构实现。

2.1 实验室管理系统

根据系统设计的目标, 实验室管理系统所具备的主要功能有:学生可以查阅与自己相关的实践课程信息, 教师与系统管理员可以实现对学生与教师基本信息、实验室课程教学计划、学生实验成绩信息的录入修改删除查询、数据库的管理操作, 并可以实现按照用户自定义条件进行查询统计生成报表。本文讨论的问题涉及以上一部分功能。

2.2 系统的数据库

在实际管理中, 用到许多由SQL Server 2000建立的实验室信息管理系统的数据库中的数据表, 以下是本文研究中所涉及的数据表, 内容如下:

(1) 实验教师科研信息表 (kyxx) : (tch_ID) 、 (xueke) 、 (kytm) , (cbs) 、 (fbrq) 、 (kyfz) 。

(2) 教师基本信息表 (tch_info) : (tch_ID) 、 (tch_name) 、 (zhicheng_ID) 、 (tch_age) 。

(3) 学生实验成绩数据表 (stu_achieve) : (stu_ID) 、 (stu_su) 、 (stu_ax) 、 (stu_at) 、 (stu_bx) , (stu_as) 。

(4) 实验课程表 (course_info) : (lab_ID) 、 (tch_name) 、 (class_name) 、 (time_name) 、 (tutorship ID) 。

(5) 实验室基本信息表 (lab_info) : (lab_ID) 、 (lab_name) 、 (lab_computornum) 、 (lab_introducton) 。

(6) 学生基本信息表 (stu_info) : (stu_ID) 、 (stu_name) 、 (class_ID) 。

3 SQL语言信息处理中的执行效率

以下探讨SQL语言在SQL Server 2000中如何提高执行效率, 快速实现实验室信息管理信息处理的具体应用。

3.1 用视图整理多个实验系统数据表

在实验教学应用中往往需要查询的数据, 分别放在实验室管理系统的多个数据库表中, 将实际需要的属于同一类数据的表做成视图。视图是由基表或其他视图导出的虚表, 当使用建立好的一个视图时, 就如调用一个自由表。利用视图限制对特定行或列的访问, 可以增强系统的安全性, 利用视图连接相关的表, 可以简化程序员的工作, 提高编译效率。

如从教师基本信息表 (tch_info) 、实验教师科研信息表 (kyxx) 中查询教师科研的信息。

在实验室这个大的信息管理系统中, 从视图中取出数据往往要读所有的表, 实际应用中是采用将查询结合起来综合考虑, 适当建立视图的方法。

3.2 用联合 (UNION) 查询实验课内容

在实际应用中, 用OR子句可以分解成多个查询, 但OR是低效率的子句。为提高效率可通过UNION连接多个查询。OR与UNION, 两者的速度都与使用索引有关, 如果查询需要用到联合索引, 用UNION all执行的效率更高。

如对于学生实验成绩数据表 (stu_achieve) , 查询平时成绩或考勤成绩不合格的学生的学号。

在实验室管理系统的应用中, 以上所采用的OR子句与UNION子句中, 通常使用联合 (UNION) 可以加速执行效率。但如要在stu_info这个大表上执行这种查询, 在请求下会建立大量数据的临时表以保留每一步的查询结果, 如果这个临时表很大, 就有可能占满所有的临时存储空间, 会影响执行效率。

3.3 查询实验成绩使用聚集函数与相关子查询

实验室管理系统用到聚集函数与相关子查询, 内部函数SQL标准中只使用COUNT、SUM、AVG、MAX、MIN函数, 称之为聚集函数 (Set Function) , 当一个子查询涉及一个来自外部查询的列时, 称为相关子查询 (Correlated Subquery) 。使用聚集函数中避免相关子查询, 由于一个列的标签同时在主查询和where子句中的查询中出现, 很可能当主查询中的列值改变之后, 子查询必须重新查询一次。实际应用中, 在子查询中过滤掉尽可能多的行, 同时尽量避免使用子查询处理实验室管理系统中的数据。

如查询各实验课程的平均成绩, 按课程号分组且只选择考勤成绩合格的学生成绩。

其中HAVING子句用于在计算出聚集之后对行的查询进行控制。

3.4 合理使用索引查询实验室排课信息

在SQL的查询语句中, 使用索引这一重要的数据结构, 目的就是为了提高查询效率。在对经常进行连接, 但是没有指定为外键的列上建立索引, 而对不经常连接的字段则由优化器自动生成索引。在频繁进行排序或分组 (即进行group by或order by操作) 的列上建立索引。不可简单使用index, 进行耗空间的全文索引也不可取。对CHAR类型查询时, 查询耗时和字段值总长度成正比, 所以不能用CHAR类型。而对VARCHAR类型.对于字段的值很长的要建立全文索引。

如对课程进行查询, 对课程表的lab_ID字段建立了index索引。返回某一实验室的排课信息。

在SQL语句的子查询的条件where子句中使用了表course_info的索引字段lab_ID, where子句, 它不仅指出查询的条件, 同时它的编写方法、编写次序和编写方案直接关系到整个查询的效率。因此对表course_info的扫描只在与索引有关的范围而无须对整个表扫描, 执行效率很高。

3.5 使用临时表查询全院学生的成绩信息

SQL语句查询为了减少对公共数据的访问, 提高系统的运行效率, 在系统中只对公共数据进行一次查询, 将查询结果保存到系统临时表中, 当系统中其他模块需要该数据时, 直接从临时表提取, 查询结束清除变量和关闭临时表即可。在实验室管理关系系统中建立临时存放公共数据的临时表student1, 将从课程表中查询的数据放入student1中的SQL语句如下:

如在全院学生信息这一很大的事务表中, 包含了百万以上行, 而要查询其中的几百条数据, 且执行多次, 这时可创建一个临时表, 并在临时表的一个子集建立必要的索引, 这样能加速查询, 提高执行效率。它有助于避免多重排序操作, 还能简化优化器的工作, 临时表创建后不会反映主表的修改, 但防止频繁修改主表数据以免丢失数据。

例如: (1) 查询全院学生的实验成绩信息。

(2) 将2008级学生的成绩找出来放在一个临时表achieve_temp中, 并按学生的学号进行排序:

(3) 在临时表中查询:

临时表中的行要比主表中的行少, 而且物理顺序就是所要求的顺序, 减少了磁盘I/O, 查询工作量可以得到大幅减少, 提高执行效率。

3.6 使用谓词嵌套查询

使用谓词嵌套查询使得查询求解层次分明, 有结构化程序之特征, 如果要用子查询, 那就用EXISTS替代IN、用NOT EXISTS替代NOT IN。因为EXISTS引入的子查询只是测试是否存在符合子查询中指定条件的行, 效率较高。NOT IN都是最低效的。因为它对子查询中的全表执行。

例如:查询实验课中“程序设计基础”不及格的学生的学号, 姓名。

使用谓词EXISTS的嵌套查询。

3.7 SQL编程中存储过程的使用

使用SQL编程来访问和管理数据库中数据的方式主要有:嵌入式SQL, PL/SQL, ODBC, JDBC以及OLEDB编程等方式。现仅对经常使用的嵌入式SQL和PL/SQL来做分析。PL/SQL是编写数据库存储过程的一种过程语言, 存储过程允许预定义通用数据库操作, 只需要调用存储过程就可以启用这些操作, 这种方式可有效地提高执行效率并减少可能出现错误的机会。开发存储过程, 可以提高软件的可维护性和系统的运行速度。

例如:定义一个存储过程用于向学生基本信息表 (stu_info) 中插入新记录。

四、结束语

实验室教学管理是学院教学工作的重要组成部分, 通过以上分析, 用SQL语言来完成对实验室管理系统信息数据库的信息处理, 是可以采用多种SQL语句的编写策略来提高查询对象的执行效率, 因此在SQL语言功能实现的同时, 探讨SQL语言不同实现方式之间的执行效率的性能上的差异, 要根据数据库应用系统的实际情况给出适当的调整来满足系统的运行要求, 同时还要采取适当的数据策略, 尽量减少查询范围, 减少计算机系统需要计算的数据, 编写优化的SQL语句, 既可以提高效率, 又可以提高信息的正确度, 随着大型数据库的使用, SQL语言将不仅用于实验室信息管理, 而且会被广泛地应用于各种信息处理领域。

摘要:本文以SQL Server2000为数据库实验平台, 基于结构化查询语言SQL这一综合通用的、功能极强的关系数据库语言功能, 从应用角度, 探析合理利用SQL语言功能快速实现实验室信息管理系统的信息处理, 并对如何提高其执行效率给出具体分析与处理方法。此应用过程对处理其他数据库管理系统也具有通用性。

关键词:SQL语言,执行效率,数据库系统,实验室信息管理系统

参考文献

[1][美]詹姆斯·R·格罗夫 (James R Groff) , 等.SQL完全手册[M].第2版, 王丽敏, 等译.北京:电子工业出版社, 2006.

[2]王寅永, 李降宇, 等.SQL Server深入详解[M].北京:电子工业出版社, 2008.

[3]韩景田, 陈小义.完善实验室管理的方法探究[J].中国科技信息, 2005 (10) .

[4]罗运模, 王珊.SQL Server数据库系统基础[M].北京:电子工业出版社, 2005.

语言处理 篇10

一.藏汉谚语中语言文化的对应

在两族谚语的对应关系中, 主要有这四种对应关系。第一是完全对应, 自唐太宗时两族建交, 已经有一千三百多年的历史了, 在汉藏两族的交流中, 出现了民族的融合, 藏族对汉文化的研究的学习也达到了一定的境界, 两族的一些谚语在比喻的喻体、所表达的含义都是一样的, 两个谚语除了文字不一样, 都是相同的。如泥菩萨过河, 自身难保;君子报仇, 十年不晚。第二种是部分对应, 两族由于自身民族文化的关系, 在谚语中所使用的喻体是在本族历史文化的积淀作用下形成的, 虽然两种谚语在意思上是一样的, 但在喻体上无法相互对应。如表达“行家面前卖弄本事, 自不量力”的谚语中, 汉人使用的是“班门弄斧”这与汉族的历史人物鲁班具有重大的关系, 而藏族的谚语“佛前显识字, 灯前点松关”藏族由于深受佛教影响, 信仰佛陀, 与汉族信仰儒家忠君爱民不同。第三是文化空缺, 在两族的历史长河中, 有一些历史是本族独有的, 不为他族所熟知的。如汉族的“三个臭皮匠, 赛过诸葛亮”, 诸葛亮是汉族的历史人物, 被藏族使用不太合适。藏族的谚语在针对同一含义的时候, 将喻体换成了藏族小说《格萨尔王传》中的人物超同和格萨尔。第四是完全不对应现象, 由于两族对于某一意象的观点不同, 这就造成了谚语中理解的不同, 例如, 在汉族中狗是一种很低贱的动物, 如“狼心狗肺”、“狗腿子”“狗汉奸”等, 但是在藏族, 狗是人类的朋友是忠诚的象征, 受到人类的尊敬。然而在藏族, 驴是最为低贱的动物。汉族谚语“狗嘴里吐不出象牙”在藏族则是“驴嘴里吐不出金子”。

二.藏汉谚语语言翻译的具体分析

在谚语翻译中, 为了保持民族的历史文化, 让谚语中的喻体能够反映民族的风俗习惯及人文风采, 同时为了文化的宣传就必须要做好谚语的翻译工作, 在对谚语进行翻译的过程中, 针对上述四种不同对应形式, 各自有不同的处理方法。

第一, 就是藏汉谚语中的完全对应关系, 这只需要直接翻译即可。因为在千百年来的民族融合过程中, 藏族在对汉族的文化学习过程中, 对于一些谚语都进行过翻译, 这种情况只需要直接翻译即可。第二, 藏汉谚语中部分对应的关系, 可以采用直译加补充。第三, 针对完全不对应的, 可以采用意译和套译, 在对“狗嘴里吐不出象牙”进行翻译, 如果直译, 对藏族会表现出不尊重, 因此只有采用意译的方式。第四是文化空缺的对应关系, 针对这种情况, 可以采用直译加注解的方法, 例如在对“三个臭皮匠, 顶个诸葛亮”如果考虑到藏族人的理解问题, 就会翻译成“一个人的主意没有三个人的主意好”这样虽然通俗易懂, 但是失去了谚语的最基本特点, 如果用藏族文化中具有相似的故事进行翻译, 则达不到传递文化的作用。

三.建议

语言处理 篇11

关键词 Java 数据库 Mysql 数据库连接

一、java.sql类与其方法的理解

首先我们需要引用系统所提供创建语句和管理连接属性,建立与驱动程序的连接,在访问数据出问题时抛出和用于发送准备好的基本SQL语句的方法。由于系统有提供关于sql的方法,我们就可以直接拿来用,只需要去查看API中相应的介绍,API对于开发人员来说就相当于是一部学习的字典,当我们对某个方法和属性不太清楚或者不记得了,就可以来查阅API文档。如下引用的包。

import java.sql.Connection ;

import java.sql.DriverManager ;

import java.sql.SQLException ;

import java.sql.PreparedStatement ;

import java.io.File ;

import java.io.FileOutputStream ;

import java.sql.ResultSet ;

import java.io.InputStream ;

import java.io.InputStream ;

import java.io.OutputStream ;

而io这个包主要是对文件的输出输入流的方法。在这里我们主要用到引用的sql类包,有连接用的有驱动管理器,有对sql语句进行执行和一些数据容器类,这些数据容器可以来接受从数据库中获取的各种形式的数据,比如DataTable类和DataSet等

二、对Mysql数据库进行连接

对不同的数据库,所提供的驱动都是不一样的,对Mysql首先我们需要写一个公共类mysql,定义公共的静态字符串Driver ="org.gjt.mm.mysql.Driver";URL = "jdbc:mysql://localhost:端口号/mldn";User = "用户名";Pass = "密码"。然后就可以方便在主函数中写出连接的说sql语句和方法了。数据库参数一个为空的初始值,初始值的给予是为了给予内存资源,以下就一定要给出初始值。

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

之后只需要写出你所要的sql语句比如字符串sql = "SELECT name,photo FROM ?(表) WHERE id=?";读取数据库地址用户名和密码Class.forName(Driver),连接字符串有三个参数分别是地址、用户名和密码conn=DriverManager.getConnection(URL,User,Pass);再调用它的方面来运行sql语句,conn.prepareStatement(sql)。

三、对数据库中文件进行处理

执行SQl语句进行查询就要调用方面executeQuery() ;如果数据库中一直存在这里写一个判断语句if(rs.next()),获取字符串用getstring();这里可以简单的用System.out.println("用户名:" + name)来检测正确。当然我们还可以写的复杂一点,把文件读取出或者存入数据库中,首先定义一个文件类File f = new File("C:" + File.separator + "名字.gif"),这里是一个图片文件,再定义输出流OutputStream out = null,out = new FileOutputStream(f) ;如果一直有数据,不为空就边读边写出来while((temp=input.read())!=-1),out.write(temp)。最后关闭输入输出close()。并且关闭数据库连接,对数据进行操作后,需要关闭数据库,释放内存空间。

参考文献:

[1]郑瑛.JDBC与数据库应用程序的开发[J].内蒙古民族大学学报(自然科学版), 2004(02).

[2]张作宸.JDBC原理及操纵数据库方法[J].科技信息, 2009(02).

[3]赵丽敏.浅谈JAVA连接数据库[J].科协论坛(下半月) , 2008(01).

[4]陈卫荣.浅谈Java的数据库接口JDBC[J].宁德师专学报(自然科学版), 2002(04).

语言处理 篇12

1. 省略人称

人称省略是日语教学中遇到的首要问题。与日本相比,中国幅员辽阔、民族众多,且各民族的性格各异,在一般的生活场合很难达到完全的统一,因此在表达中注意强调人的个性,说话时“你、我、他”等人称代词必不可少。相反,日本民族结构单一,除比方的“阿依努”族外,绝大部分都为大和民族,并且岛国的地域性使得日本人必须团结一致以抵御外敌,求得发展,所以日本人重视集团性,不强调自身的个性。并且日语有一套完整的敬语体系,说话的对象及方向性全靠谓语的不同来区分,所以初学者在使用日语表达时,首先要克服的是必须去掉“私、あなた”等人称代词。比如:

(1)———先週、休みましたか。(你上周休息了吗?)

———いいえ、休みませんでした。(不,我没有休息。)

正如例(1)中所表现的,在日语表达中,疑问句的主语如果是第二人称,陈述句的主语如果是第一人称,则一般都被省略。看似没有明确的人称,其实是约定俗成的。由于第二人称“あなた”一般是家庭中妻子对丈夫的亲密称呼,等同于“老公”或“亲爱的”,因而在工作场合尤其需要避免使用,如果非要使用称呼,则应采用“姓名/姓氏+さん”的表达方式,称呼对方为“××先生”或“××小姐”。

(2)明日の午後、ご連絡します。(明天下午我跟您联系。)

(3)———どちらからいらっしゃったんですか。(您从哪里来?)

———中国の北京から参りました。(我从中国北京来。)

例(2)中,“ご…します”是典型的自谦表达方式,虽然没有人称及对象,但是因为使用了自谦语,主语只能是自己或己方人员,所以意思就一目了然。例(3)中的两句话都没有提及人称及姓名,但是因为“いらっしゃる”和“参る”分别是“来”的尊他语和自谦语,所以人称关系也很明确。

2. 暧昧的表达方式

日本人行事比较谨慎,讲话时一般不会对事情作出绝对的判断,只是用推测的语气说“大概是……吧”。这一特点在播报天气预报时,表现得尤为突出。例如:

(4)「では、明日の全国の空模様です。沖縄、九州地方は雨でしょう。四国、近畿、そして中部地方は午前中は晴れますが、午後からは雨でしょう。関東、東北地方は晴れでしょう。北海道は曇りでしょう。」(现在介绍明天的天气情况。冲绳及九州地区预计有雨。四国、近几以及中部地区上午天晴,下午起有雨。关东及东北地区,晴。北海道,阴天。)

正如例(4)中所表现的,在日本播报天气预报时基本上使用的是带有推测语气的「……でしょう」,即使对未来天气的预测比较有把握,预测得非常准确,也要使用这一句型。相反,中国播报天气预报时,无论准确与否,都使用肯定语气的句子。

3. 委婉的拒绝

日本是重视“面子”的国家,在社交场合,不论发生任何情况,都尽量为对方着想,不让对方丢掉颜面,给人一种彬彬有礼的感觉。即使是拒绝别人的场合,也绝不直接说“不”或者“不行”,而是一直强调不能同意的原因,间接地表达拒绝的意思。例如:

(5)―明日、プールへいかない?招待券を持っているの。(明天去游泳吗?我有免费票。)

―行きたいけど、明日、アルバイトがあるの。(我想去来着,但是明天我有兼职。)

(6)―今日、映画を見に行きませんか。

(今天一起去看电影吧?)

―今日ですか…。行きたいんですが、明日までに作文を書かなくてはいけないので…。(今天吗?我想去呢,但是明天之前必须写完作文……)

如例(5)、(6),在受到别人邀请时,即便不能答应,也不能直接说「いいえ」(不),因为日本人觉得如果直接拒绝对方,则会让对方很没有面子,在说话时应该充分考虑到对方的感受,无论发生什么情况,都要给足对方面子,不能让别人觉得难堪。教师必须在教学中及时向学生渗透这些表达习惯,使学生更透彻地理解这些对话的深层含义,从而更准确地掌握日语交际方法。

虽然「いい」意思是“好”,但是「いいです」也不能片面地理解为“好”或者“好的”,比如:

(7)先生:プリント、持って来ましたか。

学生:すみませんが、忘れてしまいました。すぐ取りに行きますから、少々お待ちください。

先生:いいです。

例(7)是我在上大学期间,发生在同学和老师之间的对话。当时同学忘记了把老师的复印原件带来,当课间休息老师问起时,同学才想到忘在宿舍了,于是说马上回去取,但是老师觉得马上就要上课了,没必要专门跑一趟,于是说「いいです」。同学以为是说“好的”,赶快飞奔返回宿舍,当满头大汗跑回来时,课已经进行了一半。老师很不解地问道:

「何をしたの?」(你干什么去了?)

同学气喘吁吁地答道:

「プリントを取りに来ました。」(去拿复印原件了。)

老师大吃一惊:

「そんなことをしなくてもいいですよ。」(不用这么做的呀。)

(8) A:お電話番号、教えてもらえませんか。(能告诉我你的电话号码吗?)

B:いいです。(不用了。)

A:はい、どうぞ。(好的,请讲。)

B:いいえ、教えなくてもいいです。(不告诉你也行。)

例(8)中,B想要A的电话号码,结果被A用「いいです」拒绝,但是B误以为「いいです」的意思是“好的”,还在期待着A的回答,结果闹出了笑话。由此看来,虽然只是简单的一句「いいです」,但是由于语言文化的差异,在日语中表达的意思与中文大相径庭。

从以上的例子中可以看出,语言教学并不只是单纯直白的词汇、语法的讲授与记忆,就日语教学而言,不能仅仅停留在听、说、读、写等基本能力的培养上,必须与文化背景紧密结合,更多地将文化教学导入日常教学之中。

参考文献

[1]林娟娟.论日本语言与文化交叉研究的必要性[J].日语学习与研究, 2005, (1) .

[2]秦明吾.中日习俗文化比较[M].中国建材工业出版社, 2004.

上一篇:单片机模拟开关下一篇:桩基质量检测