Windows自带的find.exe就可以批量闪电提取你当前的XML文件了
(1)把你的文件命名为1.xml,放在C盘根目录(其实,不需要扩展名为xml也同样能执行下面的操作的,只不过文件名变成非常简单的“1.txt”或“1.xml”且放在C盘根目录就便于准确无误地输入下面的非常简单的命令);
(2)打开开始菜单的“程序”的“附件”的“命令提示符”;或者在开始菜单的“运行”的对话框输入“cmd”,回车(Windows XP呀,Window Vista呀,Windows 7呀,都是这样的操作步骤);
(3)在弹出的DOS窗口,输入如下一行的DOS命令(是针对且调用system32文件夹的find.exe这个文件的)
find "<method>" c:\1.xml
就会在黑乎乎的DOS窗口显示出提取的“黑底白字”的结果,速度闪电般的快!以此类推,需要提取<conclusion>标签的时候就是……
find "<conclusion>" c:\1.xml
当然输入</conclusion>来代替上面一行的“<conclusion>”也是可以的,也是相同的执行效果。
进一步,你需要保存这些DOS输出的批量提取结果的话,就稍微修改一下上面的DOS命令而输入如下:
find "<method>" c:\1.xml > c:\output.txt
这样,就把结果静静地输出到C盘根目录的output.txt了。这里新增的“大于符号”是DOS的重定向功能,就是把默认在屏幕上输出的结果输出到另一个文件中。
注意:当你不在屏幕上呈现处理结果而是重定向到另一个文件的时候,find.exe的执行速度就成倍提高了(1GB的XML只需要24秒,在我的2009年的中档配置的笔记本电脑上)!
system32文件夹的find.exe支持很大的文件的,甚至4GB的文件也是轻松地检索的,而不用担心这个find.exe是不是太简陋了,哈哈
注意:本方法适合需要处理的标签都是每个自然段的开头和每个自然段的结尾的XML标注情况。
因此,如果你的某个txt或xml文件的xml标注并没有进行“每个标签排版的自动批量格式化(每个XML标签的开始标签和结束标签占一个自然段的首和尾)”的话,你可以下载一个小工具来进行所谓的“XML格式化(也叫:XML美化)”,例如:
http://www.duote.com/soft/42391.html
当然,XML文件的实际文本格式的美化(格式化/排版)往往也能被最简单最常见的XML工具来进行,例如微软公司推出的免费工具“XML Notepad 2007”,你用这个无需安装的小工具(1.8MB)打开你的文件,然后另存为一个XML,就被自动地进行了XML的格式化了美化了,也就能被我上述的find.exe进行轻松处理了。例如我有如下的这些XML内容是一个文件中的全部内容:
<dic><price></price></dic>
我把仅仅含有上面这行XML内容的文件用“XML Notepad 2007”另存为另一个XML文件之后,用NotePad(“记事本”)重新打开,就发现了如下的“自动变化”……
<?xml version="1.0" encoding="utf-8"?>
<dic>
<price></price>
</dic>
如果你兴趣大增而希望深入了解find.exe的更多运用,你可以在DOS命令窗口输入如下,然后回车:
find /?
这里的"斜线+问号"就是让dos系统告诉你当前的这个DOS命令的具体用法说明。这里,我也提供我得到的关于find.exe的详细使用说明……
-------------————————————
C:\>find /?
在文件中搜索字符串。
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
/V 显示所有未包含指定字符串的行。
/C 仅显示包含字符串的行数。
/N 显示行号。
/I 搜索字符串时忽略大小写。
/OFF[LINE] 不要跳过具有脱机属性集的文件。
"string" 指定要搜索的文字串,
[drive:][path]filename
指定要搜索的文件。
如果没有指定路径,FIND 将搜索键入的或者由另一命令产生的文字。
------------------------
这里,提醒一下,find.exe的执行方式是一次读取整个文件内容到物理内存中的,这种方式的优点是分析速度特别快,但是也很占用物理内存。一旦开始执行,你在任务管理器中观察,(把任务管理器调用出来的方法是同时点下ctrl与alt与del这三个键)就会发现:find.exe的物理内存占用正在持续地攀升,直到与它正在处理的txt或xml文件的整个文件体积大小(字节数)相同了,才停下来,迅速下降,直至消失退出。所以,当你的(物理)内存为1GB,而安装的是Windows XP的话,你最好一次处理的数据不要超过500MB哟,因为Windows XP本身要占用230MB左右,其他应用软件们还要占用250MB左右呢!以此类推,如果你的物理内存为2GB且是Windows XP的话,你就可以一次处理1500MB(1.5GB)的txt或xml了。
谈到这里,也要提醒一下,在使用上述提到的“XML Notepad 2007”的时候也是存在相同的问题,就是当你让这个XML Notepad 2007处理大型文件的时候,它就要占用与它所处理的文件一样大的物理内存,所以,当你进行大型txt或xml文件的美化或格式化的时候,要注意自己的物理内存与操作系统类型版本与即将读取的文件体积之间是否是匹配的。
现在,很多朋友(尤其是新电脑购买者)都是安装了或被赠送了Windows 7操作系统,这个东西占用物理内存在1GB左右呢,一般人的新电脑也只是2GB或3GB而已,也千万要注意自己不要一次用“XML Notepad 2007”或“find.exe”处理大于500MB或1GB的文件哟,就算要冒险冲闯,也最好暂停你的杀毒软件和其他的稍微显得更加占用内存的一些软件哟(尤其是Internet Explorer正在浏览网页的话,就赶紧把窗口都关闭掉)。
所以,我们在准备建立大型的XML标注的语料库的时候,如果整个库的单个文件的体积超过了500MB的话,最好是构建为多个500MB及更小的XML文件,这样就能减轻大部分的XML通用工具对我们的XML语料库的检索或提取所带来的瞬间的“内存洪峰”。所以,XML标注的语料库的一个小小的毛病就是“体积偏大,标签冗余,因为每个标签都是有头有尾”。不过呢,平时存储的时候,可以用WinRar和WinZip这样的压缩软件进行压缩,根据我的经验,往往就变成了5%到10%的原来的体积了,吼吼
倘若不喜欢XML的标注标签的话,可以用我开发的免费的强大的闪电般处理速度的“Bright Corpus Detagger 2011.rar”来进行“XML标签的彻底清洗”,毕竟眼不见就心不烦了。如果无法从这里的“附件”下载我开发的“Bright Corpus Detagger 2011”的话,可以发送邮件给我邮箱:492130980@qq.com
这个软件的中文版已经在本论坛发布过了,具体见
http://www.corpus4u.org/forum/showthread.php?t=7985
中文版的索取也是
492130980@qq.com