李亮1975重庆
语料库快乐军政委
《语料编程空手道:从VBA,到VBS,到HTA》
谈到语料,典型的存在体是足够统计学意义的一系列文本文件;如果语料都导入了数据库管理系统(例如Microsoft Access或MySQL或SQLite),那么我们的语料库也叫做数据库了,因为语料是“野生的”或“随机的”或“抽样的”,数据是“驯化的”或“人造的”或“附加的”。谈到编程,典型的产出物是制造一个双击就能运行或开始安装过程的EXE文件;为何编程?是因为能实现自动处理与高速处理与个性需求,是因为语料库往往像个大森林,是因为任何自动处理都不会太低速。用何编程?这是选择编程语言(例如Ruby或Java或VBA),也是选择编程工具(例如Turbo C或Eclipse或Visual C++ 6.0或Zend Studio或Delphi),也是选择与编程语言匹配的辅助编程技术(例如sql或xpath或COM或正则表达式或javascript)。
其实,在编程与不编程之间还存在较广的“过渡地带”:(1)你可选择DOS命令(例如findstr来检索,copy来批量合并,rename来批量重命名)来实现一些语料加工的功能;(2)你也可选择Office组件(MS Excel或MS Access或MS Word)的宏录制与宏播放来实现自动处理或自动转换;(3)你也可采用UltraEdit之类的通用型文本处理工具来实现语料加工,从而避免了语料编程的高深,也避免了不语料编程的尴尬。
正常的编程都是把某种编程语言在某种编程工具中进行“数据定义”、“函数调用”、“模块编制”、“消息处理”、“流程控制”这一系列实践,最终诞生了一个软件。但是,“语料编程空手道”提倡的是“借助Office或Windows的脚本运行机制,摆脱专门编程工具,无需生成独立程序,依然实现对语料加工的自动高速且个性化的处理”。
“VBA编程空手道”,是新建一个Office文件,然后点菜单“工具”中的“宏”的“Visual Basic编辑器”就可以在一个空白的Word文件或Excel文件或Powerpoint文件中实现从简单的文本处理,到丰富的数据库查询,到多样化的网页抓取,到常用的统计分析的种种功能。如果你希望有“窗体”呀、“按钮”呀、“文本框”呀、“菜单”呀之类的与用户互动的构件,也可以点“插入窗体”而开启你的“界面打造之旅”。
“VBS编程空手道”,是新建一个文本文件或TXT文件,按照VBScript语言的规范与知识写出从简单到复杂的代码,然后保存退出,然后更改当前文件的文件扩展名为vbs(原本是txt的),就实现了在“记事本”中也能编程且立即双击运行你的新软件的“奇迹”。如果当前电脑已经安装了Office,那么你用VBS也能控制Word呀Excel呀这些Office组件。为什么VBS比VBA更加空手道呢?因为VBScript就是来实现Windows系统管理、Office组件管理、数据库存取、动态网页生成的编程语言。
“HTA编程空手道”,也是新建一个文本文件或TXT文件,然后用HTML语言和CSS表达式来构造主体代码和丰富的用户交互界面,混入javascript和vbscript代码,也可以调用jQuery来大幅度提升javascript的编程效率,也可以调用jQuery来生成统计图表,从而写出从简单到复杂的代码,然后保存退出,然后更改当前文件的文件扩展名为hta(原本是txt的),也就实现了在“记事本”中也能编程且立即双击运行你的新软件的“奇迹”。本质上,一个HTA文件就是一个网页,但是它的javascript是基于IE的,这种情况下的javascript不仅可以读写本地硬盘,也能与vbscript实现互通有无,而vbscript可以调用“组件对象模型(Component Object Model,COM)”,所以HTA几乎是“万能”的。
从空手程度与灵活性来说,VBA是语料编程空手道的初级,因为VBA要依赖Office的安装与正常运行。而VBS是语料编程空手道的中级,因为它不仅可以在Office已经安装的情况下调用Office组件,也可以在Office尚未安装的情况下直接写出极为丰富的语料库应用软件。而HTA是混合语言编程,是语料编程空手道的最高级,因为它不仅具备VBS和VBA的合成优势,也具备快速构建丰富的图形用户界面的能力,也混入且具备了javascript语言的功能,从而站在了一系列javascript扩展库以及一系列基于jQuery的扩展库的丰富天地之中。
在语料编程空手道的初级或中级或高级,你并不孤独,你随时可以与其他编程语言并肩战斗或互通有无的:你可以“引用”或“调用”已经注册的DLL文件、你可以“运行”或“传递参数给”某个位置上的EXE文件、你也可以让你运行的EXE文件随时“隐身”或随时“显身”。当然,如果电脑中已经正常安装了ruby或perl或python的脚本解释器,你从一个doc文件或xls文件或ppt文件或vbs文件或hta文件,也能运行一个ruby脚本或perl脚本或python脚本。
在语料编程空手道的初级与中级与高级之间,是互生互助互通互控互灭互改互嵌的和谐关系。本质上,vba程序体现为一个doc文件或xls文件或ppt文件,一个vbs程序体现为一个vbs文件,一个hta程序体现为一个hta文件。但是,这三种形式的程序都具备文件新建与读写能力,所以,一个doc文件可以随时自动产生一个xls文件,一个xls文件也可随时自动产生一个ppt文件,一个vbs文件也能随时自动产生一个doc文件或xls文件或ppt文件或hta文件,一个hta文件也能自动随时生成一个vbs文件或doc文件或excel文件或ppt文件。说完了“随时自动生成与相互生成”,我想说“语料编程空手道的初级程序与中级程序与高级程序之间也能相互删除,或者自动更改文件名”,我把这叫“互灭互改关系”。那么,什么是互嵌呢?互嵌就是相互嵌入,就是“vba代码中,一开始就含有vbs代码或hta代码”,就是“三种语料编程空手道程序都可以一开始就不是纯粹的,而是其中两个品种甚至三个品种的混合代码的状态”。
从学习难度上说,vbs是最容易理解与最容易上手的,因为vbs代码可以只进行字符串计算和数值计算,而不必控制什么,而只是弹出一个”呈现计算结果的“消息框。从学习成果上说,vba是最轻松跨入字词句的自动处理的最生动阵地的,你会发现一两三行代码就实现了”句子切分、句子提取、单词切分、单词提取、中英文识别“这些原本非常复杂的语料处理任务,而你用其他编程语言是无法单独地轻松地实现这些效果的,因为vba是office内置编程,office已经内置了字词句的智能识别。从学习生动上说,hta是最鲜艳最动态最彻底的,但hta需要至少懂HTML语言的入门知识,并且你还需要懂vbs或javascript才能在HTML中制造出各种程序效果。总之,vba和vbs是几乎同等难度的,hta并不是一种语言而是把多种语言混合在一起的技术,而vba和vbs的本质都是微软公司的专利"Visual Basic"的迷你版。
从教程教材的从浅入深的推进来说,语料编程空手道的入门是学习”Visual Basic语法“,也就是学习VB,而VB的图文教程和视频教程简直是满天飞或随便捡。学完了”VB语法“,你就该学”特色任务“,就是MS Word中vba如何控制字词句,就是vbs如何创建与删除文件(夹),就是hta如何混入vba和vbs和javascript代码。学完了”特色任务“,你就该学”跨境作战“。”跨境作战“就是vba与vbs与hta之间的互动互生互灭的联合作战,而更高程度的”跨境作战“就是掌握用vba或vbs或hta来控制与配合其他编程语言及其开发的软件。总之,学语料编程空手道,要先学”基本语法“,再学”特色任务“,最后学”跨境作战“。
Last edited: