|
|
本帖最后由 sanwsw 于 2012-10-7 06:55 编辑
综合说明
2008年下半年,收到老左寄来的紫光词库整理用系列工具,都是些DOS下使用的小工具。为方便使用,将各工具帮助文件整理成统一的Readme.txt放在Readme文件夹内,该文件夹内还收有各工具默认帮助文件。上月有人讨要,希望该网友看到本帖。老左如觉不妥,请直接删除本帖。
安装使用
解压后,将所有文件存放在同一文件夹内即可。如不知或忘了某一工具使用方法,请查看Readme.txt并复制相关命令,在DOS窗口下采用复制法以减少输入差错。
工具使用介绍
[hide]■■CygWin系列软件
一组从Unix、Linux平台移植到Windows平台的几个词库整理、加工实用工具:*.exe全部是命令行工具,*.dll是*.exe所依赖的动态链接库文件。
1.全是命令行工具,在Windows系列平台下,需要打开【“命令提示符”窗口】,键入命令以及相应的参数来执行,查看用法,则键入【命令 --help】,如wc --help,sort --help等。
2.为在工作路径中都可用,把它们解压到一个目录,如C:\CW,然后设置环境变量PATH,在最前面添加C:\CW,之所以要在最前面,是因为sort.exe在windows\system32也有一份MS出品的排序工具,我们期望CygWin的sort首先被找到;如果也想有时候用用MS的sort,可以复制其sort.exe为wsort.exe,执行wsort就是MS的。
3.处理非当前目录而需给出路径时,路径分隔符是Unix风格的/,而非DOS或Windows的\,如c:/temp/*.txt表示C:\temp\*.txt。
4.参数中用通配符(*、?)来处理多个文件时,能够匹配到的文件名称大小写是敏感的,如*.txt不能匹配abc.TXT。
5.输入改向:本应从标准输入设备(键盘)读取内容,通过在命令及参数后面附加【<文件名】,则从指定的文件中读取内容。
6.输出改向:本应输出到标准输出设备(屏幕)上的内容,通过在命令及参数后面附加【>文件名】,则把内容写入到指定的文件中;如果想追加指定文件的尾部,用两个大于号,如【>>文件名】,如:
mkSpell err-2.txt <02.txt >all.txt,输出改向是“覆盖模式”
mkSpell err-3.txt <03.txt >>all.txt,输出改向是“追加模式”。
7.引用系统环境变量,要用一对%,举例如下:%PATH%,引用环境变量PATH;%TEMP%,引用环境变量TEMP。
8.管道(|):|符号,同时对输入和输出进行改向,俗称“管道”;一般是多个程序联动时用在后面的程序上,对于该程序,把前面程序的输出作为输入源;采用管道模式,和分两步实施的输出到文件、从文件中读取相比,只是减少了中间临时文件的生成和销毁。如:
mkSpell std <02.txt |sort -k3 -n -r |u2d >02-new.txt,即为把对两字词的注音结果按照词频倒排序之后,再转换为DOS风格的文本,最后保存到02-new.txt中。
■sort.exe
◆功能:排序。较之windows\system32\sort.exe更强,速度快,占用内存少,功能选项丰富,性能超级卓著。比较有用的是按“指定列”排序,这里的“列”缺省是指按照空格或TAB对每行分割出多个字符串,详见例子。不能制定多项排序因子。
◆参数:
-k 用于指定排序因子是第几列,如不提供此参数,则以整行为排序因子;列分隔符的缺省是空白字符,已经满足我们的要求,如果对其它格式的文本进行排序,可以通过参数-t来指定。
-n 按照数值大小决定顺序,如不提供此参数,则按照字符顺序。对词频排序,应当采用数值模式,即在命令行提供-n参数。
-r 倒序。
-t 指定列分隔符,如“毛泽西,男, 1970年生人……”,拆解该行内容,应该以逗号为列分隔符;我们的文本词库的列分隔符已经是最经典的空白字符,与缺省相同,故无需设置此参数。
-u 在排序之余,捎带消除重复行
-o 指定结果输出文件;如不提供此参数,则输出到标准输出设备即屏幕,但通过操作系统的改向机制,也能达到把结果存入文件的目的,即在命令行尾部加“ >目标文件”。参数-o也可以指定输出文件,但是结果文件中的行分隔符(回车)是Unix风格的单字符(ASCII为0x0A),而DOS风格的回车是两个字符(0x0D+0x0A),许多文本编辑工具能够识别并进行转换。0x0D——原名是CarriageReturn,简称CR;本意是“四轮马车返回”,原生操作是“把打字机的打字头移动到最左端”,译为“回车”,虽词不达意却已约定俗成,在计算机的文本处理中,意思是“把光标移动到行首”,在编程语言或者某些工具中常用“\r”来代表它;0x0A——原名是LineFeed,简称LF,意思是“行加”,原生操作亦来自打字机,动作是“把打字头向下移动一行”,译称“换行”其实并不精准,“换”字一并未指示方向,二未说明数量,故“进一行”之意才贴切,在计算机的文本处理中,意思是“把光标移动到下一行”,在编程语言或者某些工具中常用“\n”来代表它。
-T 临时目录,处理大文件时才需要,在技术上的原因是“如果文件很大,不能一次性地通过内存装载,则需要将它分解为小块,每个小块暂存为一个临时文件,一一排序完成后,再采用外部归并排序算法,形成最终的结果,然后清除临时文件”。
◆应用:
①sort abc.txt | u2d >abc-c.txt 对当前目录abc.txt按第1列进行排序,并通过u2d.exe将输出文件转化为DOS风格的文本文件
②sort -k2 abc.txt >abc-y.txt 对当前目录abc.txt按第2列进行排序,把结果输出到文件abc-y.txt中
③sort -k2 abc.txt | u2d >abc-y.txt 对当前目录abc.txt按第2列进行排序,并通过u2d.exe将输出文件转化为DOS风格文本文件
④sort a*.txt 对当前目录以a开头的.txt文件进行排序,结果输出到屏幕,排序因子是ANSI字符串
⑤sort –k3 –n –r c:/temp/abc.txt 对c:\temp\abc.txt按第3列词频数倒排序,把第3列理解为数字(-n)
⑥sort -u abc.txt >abc-1.txt 对当前目录abc.txt进行排序,排除重复行(-u)。
■gawk.exe
◆功能:对文件进行脚本处理,允许自己按照类C语言进行脚本编写。
几个重要的内部变量定义:
$0 当前处理的行
$1 当前行的第1列
$n 当前行的第n列
NF 当前行拆分后的列数,Number Of Field
NR 当前行的行号,Number Of Record
◆应用:
①gawk '{print $1'} abc.txt >abc-c.txt 从abc.txt中拆分出第1列,输出到abc-c.txt——词
②gawk '{print $2'} abc.txt >abc-y.txt 从abc.txt中拆分出第2列,输出到abc-y.txt——音
③gawk '{print $3'} abc.txt >abc-p.txt 从abc.txt中拆分出第3列,输出到abc-p.txt——频
④gawk '{if ($3 ==0) print $0}' abc.txt >abc-p0.txt 挑出abc.txt中词频为0的,输出到abc-p0.txt
⑤gawk '{if ($3 !=0) print $0}' abc.txt >abc-pN.txt 挑出abc.txt中词频不为0的,输出到abc-pN.txt
⑥gawk -f abc.awk abc.txt >abc-p.txt 挑出词频超过1000的,输出到文件abc-p1000.txt中。
【>和<不能直接用在命令行,操作系统将把它们理解为输出、输入改向,一定需要>和<的逻辑时,可把脚本写到单独文件中,然后执行gawk时,告诉它脚本是在某个文件中,而不是在命令行参数中,如:创建一个abc.awk文件,其内容是:{if ($3 >=1000) print $0}】
⑦gawk '{print NF "\t" $0'} abc.txt >abc-n.txt 给abc.txt添上一列行号(第一列),输出到abc-n.txt;\t表示制表符
■grep.exe
◆功能:提取符合某些特征的字符串,将其认定为“词”,则grep.exe是首选利器
◆应用;
①提取形如“第*届”特定字符串: grep -P "^第.*(?:届|节)\t" F3.TXT F4.TXT
②提取形如“AABB”的四字词: grep -P "^(.{2})\1(.{2})\2\t" F4.TXT
③提取形如“ABAB”的四字词: grep -P "^(.{4})\1\t" F4.TXT
④提取形如“A与B”“A和B”“A同B”三字词: grep -P "^.{2}(?:与|和|同).{2}\t" F3.TXT
⑤提取形如“A不A”的三字词: grep -P "^(.{2})不\1\t" F3.TXT
通过操作系统支持的IO改向机制,在命令尾部,追加“>文件名”,即可将结果改存到文件中。
■wc.exe
◆功能:
统计文件中的字节数、字符数、行数、词数,以及看看最长的行究竟有多长
◆应用:
①wc –l abc.txt 查看当前目录中文件abc.txt有多少行
②wc –l a*.txt 查看当前目录中以a开头的.txt文件有多少行,并报告总行数
③wc –l c:/temp/*.txt 查看子目录c:\temp中所有的.txt文件分别有多少行,并报告总行数
■u2d.exe
即UnixToDOS也。u2d.exe从标准输入设备(键盘)读取数据,结果输出到标准输出设备(屏幕),通过操作系统输入输出改向机制中的管道,可以构造一个生产线,我们关心的只是末端的成品,该生产线是“sort加工→u2d加工→收集成品”,在命令行上表达这个生产线,就是“sort …… | u2d >结果文件”。
■d2u.exe
即DosToUnix。
■MkSpell.exe
◆功能:命令行版注音工具。本工具所在目录中有hzpy.dat(存储各个汉字的读音和有关汉字属性)。纯绿色方案:把hzpy.dat文件拷到MkSpell.exe所在目录即可。
◆应用
①mkspell 没有参数,则显示用法,直接退出
②mkspell std <abc.txt 为abc.txt注音或检查拼音,结果输出到屏幕,不能确定唯一拼音的或其它错误的词条,也输出到屏幕。
③mkspell std <abc.txt >abc-1.txt 为abc.txt注音或检查拼音,结果输出到文件abc-1.txt,不能确定唯一拼音的或其它错误的词条,输出到屏幕。
④mkspell err.txt <abc.txt >abc-1.txt 为abc.txt注音或检查拼音,结果输出到文件abc-1.txt,不能确定唯一拼音的或其它错误的词条,输出到文件err.txt;如果没有其它错误(词太短、词太长、包含不支持字符等),则err.txt实际上就是包含尚未确定唯一拼音的词条。
⑤mkspell err.txt 100 <abc.txt >abc-1.txt 基本同④),差别在于生成前100个音节,由于最长的词是32个字,所以凡是大于32的数字,都表示生成完整的拼音。
■getDupW.BAT
◆功能:“命令提示符”窗口提取一个文本词库中多音词的批处理工具,delWLH.awk、getDupW.awk是配套文件,须与getDupW.BAT放在同一文件夹。
◆使用
①打开“命令提示符”窗口,转到getDupW.BAT所在目录;
②键入:getDupW 文件名.txt >多音词.txt,回车即可。
■twlMerge.exe
◆功能:合并两个文本词库文件,求并集。
词条相同,字串相同&拼音相同——采纳高频者;
词条不同,字串不同|拼音不同——二者均采纳
◆使用
①获取帮助信息,直接运行twlMerge
②求并集,twlMerge 文件1.txt 文件2.txt 结果文件.txt
■twlSub.exe
◆功能:求文本词库差集,即文本词库#1中有&文本词库#2中无。
词条不同(字串不同|拼音不同),采纳词库#1的;
词条相同(字串相同&拼音相同),不予采纳。
◆使用
①获取帮助信息,直接运行twlSub
②求并集,twlSub 文件1.txt 文件2.txt 结果文件.txt
■twlIntersection.exe
◆功能:求两个文本词库的交集,即计算两个词库中都有的
词条相同——字串相同 且 拼音相同——采纳高频者
词条不同——字串不同 或 拼音不同——二者均忽略
◆用法:twlIntersection 文本词库文件#1 文本词库文件#2 结果保存文件[ -Q]
◆说明:
①最后一个参数-Q为可选,表示静默方式,不显示信息
②因算法简陋,【文本词库文件】的长度应小于 64M
③若【结果保存文件】存在,将被覆盖,没有提示,必要时请提前备份
■twlSpByL.exe
◆功能:依据词的长度,将文本词库拆分为多个文件
◆使用:
①获取帮助信息,直接运行twlSpByL
②按词长拆分:twlSpByL 【文本词库文件】 【忽略的文本行转储文件】
◆说明:拆分后的若干文件为02.txt、03.txt、04.txt、05.txt……
■twlWinW.exe
◆功能:根据词频的少量差异,分析“词中有词”(类似“有限公”和“有限公司”并存)的情况,
◆使用:
①获取帮助信息,直接运行twlWinW
②twlWinW 文本词库文件#1 文本词库文件#2[ 频差上界 [频差下界]]
◆说明:
①【文本词库文件】的长度应小于 64M;
②【频差上界】和【频差下界】为百分比数值,可以省略,上界的缺省值为 5%;下界的缺省值为 0;
③执行分析前,必须将文本词库按照“字数”拆分为多个小库,字数接近的两个文本小库进行比较,分析结果最有价值。例如:将原始文本词库拆分为2.txt、3.txt、...8.txt,然后进行2字与3字、3字与4字、3字与5字等的分析。
■DelByLN.exe
◆功能:删除指定文本文件中的指定的行(列举行号,从1开始)
◆使用:
①获取帮助信息:直接运行DelByLN
②删除指定行:DelByLN 原始文件 保存文件[ 行号文件]
说明:
①【原始文件】的长度应不超过 64M;
②【保存文件】若已存在,则将被覆盖,请提前备份;
③【行号文件】为选项参数,缺省从键盘读取行号,如果提供,则其长度也必须不超过 64M;
④需要结合twlWinW.exe的输出来看:
1)复制紫光词库文件到某个目录(假设是c:\temp\CiKu),假设名称叫做sanwsw.txt吧,这是个接近80万条词的大库;
2)在c:\temp\CiKu中,执行twlSpByL sanwsw.TXT,将产生02.txt、03.txt、...、32.txt;
3)在c:\temp\CiKu中,执行twlWinW 03.txt 04.txt,则两个小库中存在“词里套词”、并且两者的词频差异在5%之内的,会保存到03-04.txt中,这个文件中的行结构是“【短词】 【短词的词频】 <【词频差值】≈【差值占频高者的百分比】> 【长词的词频】 【长词】 | 行号:【短词在小库中的行号】, 【长词在小库中的行号】”,例如第二行为:阿拉法 0000030464 <00001000≈%3.3> 0000029464 阿拉法特 | 行号:000247, 000305。实施肉眼鉴别后,在文本编辑器(推荐UE)中,把那些不准备剔除的词所在的行删掉,例如第110行为“打招呼 0000400000 <00000000≈%0.0>0000400000 打招呼了 | 行号:029689, 033461”,只留下准备剔除的行,鉴别完毕后,用“列模式”把行号选择复制下来,另存到文件LaJi.txt;如果想看看两个小库中所有的“词里套词”对儿,只要执行twlWinW时,第三个参数给100,含义是100%,即可。
4)在c:\temp\CiKu中,执行DelByLN 03.txt 03-ok.txt wangDel.txt,将读取03.txt,删除由wantDel.txt中列举行号的词条,并保存到03-ok.txt,这就完成了“通过4字词来鉴定3字词”的活儿。其它相互鉴定的办法,请参考从02)到04)这个步骤。
■小词库合并成大词库的DOS命令
1.要求:保证所有的“最终的”小库的文件名都是两个字符(数字),并且,其它非小库文件名称,都多于两个字符,这两个条件其实是要求“??.txt”会匹配所有的小库文件,并且不匹配非小库文件。
2.键入命令:for %f in (??.txt) do type %f >>BigLib.TXT,各小库累加为大库BigLib.TXT。
■紫光华宇拼音输入法V6外部词库工具V0.5 2007年5月10日
◆功能
1. 将词库文件导出成文本文件
2. 将文本合并到一个词库文件
3. 基于文本创建新的词库文件
4. 基于j2f文件生成j2f转换数据文件
5. 将V5的词库导入到用户词库中
6. 测试新词获取以及删除功能
◆命令行参数
wltool /Export wordlib_file text_file
/Import wordlib_file text_file
/Create wordlib_file text_file
/GenJ2F j2f_data_file j2f_text_file
/Upgrade wordlib_file
/Export 将词库中的词条导出到文本文件。
如:wltool /Export sys.uwl abc.txt
/Import 将文本文件导入到词库中。
对于不合法的词条,不进行合并,输出到ci_err.txt中。
如:wltool /Import user.uwl abc.txt
/Create 通过文本文件创建新的词库。
对于不合法的词条,输出到err.log中。
如:wltool /Create new-wl.uwl abc.txt
/GenJ2F 通过J2F文本文件,生成j2f.dat文件。用于
输入法简体词到繁体词的转换。
如:wltool /Genj2f j2f.dat j2f.txt
/Upgrade 将V5的词库文件导入到用户词库中。
只对用户词汇进行本操作。
如:wltool /Upgrade userwl.dat
如在Windows 7使用出错,参看http://bbs.unispim.com/redirect. ... 03751&fromuid=17977试着处理。 |
|