【源代码与源程序与GIF动画指南】VBA开发的小型语料标注标签清除工具(Word文件形式)
浏览附件自动删除语料标注信息:主程序.doc
浏览附件自动删除语料标注信息:源代码.txt
浏览附件三合一的整包:李亮版自动删除语料标注的Word工具.rar[FONT=新細明體]
经常看到网上和身边有些语料库爱好者想要寻觅detagger,也有一些朋友准备自学语料库编程[/FONT],2011年7月22日的时候我做了个Word文件形式的小型语料标注标签清除工具,
它就是一个Word文件而已,你打开它,就能看到上面的菜单有<自动清除语料标注>,你把你需要处理的语料粘贴到这个Word文件的正文里面,点菜单的下拉中的4个菜单子项目就可以执行语料标注标签的清除(删除)了。在office 2003中,把语料文件txt弄到正文中也可以选择菜单上的“插入”的“文件”。
这款软件是VBA语言开发的,
VBA的全称是Visual Basic for Application,就是在Office文件中编程,让一个普通的Word文件也能做各种匪夷所思的事情,哈哈,当然,你也可以让你的ppt和xls文件做各种匪夷所思的事情。而一个Word文件通常直接存放的主要是有格式的文本或无格式的文本,都可以被
VBA语言进行各种各样的操纵(自动排版,自动删除某些内容,自动把某些文字或句子或段落进行染色而凸显,自动把当前文件中的某些单词或句子或段落输出到另一个文件中,自动计算平均词长呀句长呀,自动进行KWIC或Concgram之类的)。
在本帖的附件中,提供了“李亮版VBA开发的小型语料标注标签清除工具”的三个文件,包括“操作指南的GIF动画图片,VBA源代码,VBA主程序”。
这个VBA版的语料标签清除工具,适合小规模的语料,也就是10MB以下的语料,更大容量的语料处理任务就会导致Office Word的负担过重而陷入“假死机”,并不是本程序负担过重或处理不了,虽然跟本程序有关联,嘻嘻。
我的这个VBA版的detagger能清除4种标注标签,如下……
例如:I love you. (4种标签标注效果如下:)
(1) I <verb>love</verb> you.
(2) I love_verb you.
(3) I love/verb you.
(4) I love[verb] you.
一旦依次执行了4种标签的清除之后,这四句话都变成干干净净的”I love you.“了,哈哈
为了帮助编程初学者或对”基于VBA的语料库编程“有兴趣的朋友津津有味地阅读本程序的”运行机制“和”每行代码“,[FONT=仿宋体]
下面给大家提供源代码,我给每行的VBA代码都标注了“注释”的哟,VBA是VB的小弟(精简版),都是BASIC语法,很简单的英语单词的组合和逻辑,不涉及到C语言的“指针”或C++的“对象”或汇编语言的“寄存器”或Java的“从*.java到*.class的颠来倒去”,也无需专门的编程环境的安装或虚拟机的安装或EXE文件的编译之类的严肃概念或严肃手续,所以很清新,真正堪称“最容易入门且最容易战果累累的编程语言”[/FONT]。
########以下内容就是源代码########
Sub 删除所有的大于小于符号之间的内容()
Selection.HomeKey unit:=wdStory ' 备注:本行是跳到整个文件最前面位置。
Do
Selection.EndKey unit:=wdStory, Extend:=wdExtend
a = InStr(1, Selection.Text, "<")
Selection.MoveLeft unit:=wdCharacter, Count:=1 ' 备注:本行是检测是不是剩下的内容已经没有“<”符号了。
If a = 0 Then Exit Do
' 备注:以上4行是检测是否已经删除了全部的<>及其之间的内容从而可以退出无限循环了。
Selection.MoveUntil "<" ' 备注:本行是跳到下一个<之前。
Selection.MoveEndUntil ">", Count:=wdForward ' 备注:本行和下一行代码是选中下一个<和>之间的内容。
Selection.MoveRight unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Delete ' 备注:本行是删除被选中的<和>之间的内容。
Loop Until b = -1 ' 变量b只是用来实现无限循环的,没有赋值,所以永远为0而不能为-1。
End Sub
Sub 删除所有的左右方括号之间的内容()
Selection.HomeKey unit:=wdStory ' 备注:本行是跳到整个文件最前面位置。
Do
Selection.EndKey unit:=wdStory, Extend:=wdExtend
a = InStr(1, Selection.Text, "[")
Selection.MoveLeft unit:=wdCharacter, Count:=1 ' 备注:本行是检测是不是剩下的内容已经没有“[”符号了。
If a = 0 Then Exit Do
' 备注:以上4行是检测是否已经删除了全部的<>及其之间的内容从而可以退出无限循环了。
Selection.MoveUntil "[" ' 备注:本行是跳到下一个[之前。
Selection.MoveEndUntil "]", Count:=wdForward ' 备注:本行和下一行代码是选中下一个[和]之间的内容。
Selection.MoveRight unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Delete ' 备注:本行是删除被选中的[和]之间的内容。
Loop Until b = -1 ' 变量b只是用来实现无限循环的,没有赋值,所以永远为0而不能为-1。
End Sub
Sub 删除所有的下划线与空格之间的内容()
Selection.HomeKey unit:=wdStory ' 备注:本行是跳到整个文件最前面位置。
Do
Selection.EndKey unit:=wdStory, Extend:=wdExtend
a = InStr(1, Selection.Text, "_")
Selection.MoveLeft unit:=wdCharacter, Count:=1 ' 备注:本行是检测是不是剩下的内容已经没有“_”符号了。
If a = 0 Then Exit Do
' 备注:以上4行是检测是否已经删除了全部的_与空格之间及其之间的内容从而可以退出无限循环了。
Selection.MoveUntil "_" ' 备注:本行是跳到下一个[之前。
Selection.MoveEndUntil " ", Count:=wdForward ' 备注:本行和下一行代码是选中下一个_和空格之间的内容。
Selection.MoveRight unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Delete ' 备注:本行是删除被选中的_和空格之间的内容。
Loop Until b = -1 ' 变量b只是用来实现无限循环的,没有赋值,所以永远为0而不能为-1。
End Sub
Sub 删除所有的斜线与空格之间的内容()
Selection.HomeKey unit:=wdStory ' 备注:本行是跳到整个文件最前面位置。
Do
Selection.EndKey unit:=wdStory, Extend:=wdExtend
a = InStr(1, Selection.Text, "/")
Selection.MoveLeft unit:=wdCharacter, Count:=1 ' 备注:本行是检测是不是剩下的内容已经没有“/”符号了。
If a = 0 Then Exit Do
' 备注:以上4行是检测是否已经删除了全部的_与空格之间及其之间的内容从而可以退出无限循环了。
Selection.MoveUntil "/" ' 备注:本行是跳到下一个[之前。
Selection.MoveEndUntil " ", Count:=wdForward ' 备注:本行和下一行代码是选中下一个/和空格之间的内容。
Selection.MoveRight unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Delete ' 备注:本行是删除被选中的_和空格之间的内容。
Loop Until b = -1 ' 变量b只是用来实现无限循环的,没有赋值,所以永远为0而不能为-1。
End Sub
########以上内容就是源代码########
上面的全部源代码是4个独立运行的部分(子模块)组成的,每个子模块都可以单独运行的,每个子模块都是以“Sub 模块名称()”为开始,以“End Sub”为结束的。
Selection.HomeKey unit:=wdStory 这样的一句话也是独立运行的VBA代码呢,它也很容易理解的,wdStory就是整个正文内容,Selection就是正文中不断闪动的“插入点”,HomeKey就是点“Home”这个键盘上的键位,unit就是指明HomeKey的操作是抵达整个正文的最前面的位置。
Selection.EndKey unit:=wdStory, Extend:=wdExtend 这样的一句话也是独立运行的,它也很容易理解的,EndKey就是点“End”这个键盘上的键位,unit=wdStory就是指明EndKey的操作是抵达整个正文的最后面的位置,wd就是Word这个单词的(首尾字母的)缩写。Extend:=wdExtend 表示 是选中整个正文内容,而不是跳到正文的最后方。
Selection.MoveRight unit:=wdCharacter, Count:=1, Extend:=wdExtend 也是独立的Word操作且VBA代码,它的意思是从不断闪动的插入点向右选择一个字符(一个字母或一个汉字)。
读了以上,倘若大家希望轻松愉快地了解
VBA的“最简单动作就能实现的飒爽英姿”及其“小李飞刀般的强悍”,可以观赏我制作的
计算词典学的系列视频教程(在优酷网有专辑页面,都是
30分钟到90分钟之间,无需安装任何软件,只要你的电脑有Office 2003(必须包括Word 2003),即可让你实现人生中的第一次编程哟)。
以下标题都是超级链接,点击,即可跳转到对应的优酷网页面了……
计算词典学:写一行代码,让Word变成“在线词典” (认识IE的运行,认识IE的参数运行,认识词典网站的网址的灵活性,认识VBA的Shell命令及其最大化焦点的参数)
计算词典学:写一行代码,让Word变成“BNC检索工具” (认识语料库检索网站的网址,认识VBA的Shell命令及其最小化焦点的参数,一键查询多个语料库)
计算词典学:写一行代码,让Word变成一个世界上最小的英汉词典
计算词典学:写一行代码,让Word计算指定区域的句子数量(字符数量,单词数量,段落数量)
计算词典学:写一行代码,让Word为我们关机或定时关机或重启(认识shutdown及其参数,认识shell函数)
计算词典学:写一行代码,让Word给每个doc文件加上一个密码 (普通的打开权限密码和修改权限密码,document_open子程序的特殊功能)
计算词典学:5分钟制作出一篇数万汉字的文章的汉字频率排行榜
计算词典学:巧查藏身于大规模英语中的少量法语,杜绝乱码孳生 (英语中的法语是纯文本乱码的重要来源之一,录制一个宏,修改一下代码,运行宏)
计算词典学:比迅雷更强大的Word下载语料与转换语料之宏动作
计算词典学:如此简单的宏录制,竟然实现了Tokenlist和Typelist
计算词典学:反剽窃且自动断句的Word,你肯定大跌眼镜!(自动英英断句,自动汉汉断句,自动英汉断句。为平行语料库的建设者,为英汉语言对比研究,为反剽窃检测)