华宇拼音输入法论坛

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 113909|回复: 164
打印 上一主题 下一主题

紫光词库整理系列工具

[复制链接]
跳转到指定楼层
1
发表于 2010-1-14 12:44:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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试着处理。

紫光词库整理工具.rar

2 MB, 下载次数: 1767

2
发表于 2010-1-14 13:36:31 | 只看该作者
先下后顶^_^
3
发表于 2010-1-14 13:49:58 | 只看该作者
收下备用,万一哪天心血来潮,说不定弄个自己常用的词库出来!
4
发表于 2010-1-14 14:34:41 | 只看该作者
感谢分享,
这个收下了,有空也试试看做自己的词库
5
发表于 2010-1-14 14:47:10 | 只看该作者
老左这些宝贝你都有啊。遗憾的是,我只用过其中的一小部分。
6
 楼主| 发表于 2010-1-14 15:37:47 | 只看该作者
原帖由 sunmd 于 2010-1-14 14:47 发表
老左这些宝贝你都有啊。遗憾的是,我只用过其中的一小部分。

这些工具都玩过,用得最多的是排序工具sort.exe、提取工具gawk.exe、筛选工具grep.exe(实际也是提取工具,可完成复杂条件条件提取,从海量熟语料库中提取,该工具很好用)。近日多位用户提出的去重复问题,其中就有带拼音、不同词频下的去重复功能之工具。其中还有个找多音词工具很好玩,建议有兴趣者用来自检词库。
拿掉最后一个工具,估计在文件包中这一版本的hzpy.dat下无法使用。

[ 本帖最后由 sanwsw 于 2010-1-14 20:26 编辑 ]
7
发表于 2010-1-14 15:40:38 | 只看该作者
原帖由 sanwsw 于 2010-1-14 15:37 发表

这些工具都玩过,用得最多的是排序工具sort.exe、提取工具gawk.exe、筛选工具grep.exe(实际也是提取工具,可完成复杂条件条件提取,从海量熟语料库中提取,该工具很好用)。近日多位用户提出的去重复问题,其中就 ...

每个工具的基本使用方法、问题回答,单独开帖,我们论坛必定能增加较多人气。
8
发表于 2010-1-14 16:39:58 | 只看该作者
支持一下,学习一下。
9
发表于 2010-1-14 17:02:56 | 只看该作者
不顶不行啊,学习下
10
发表于 2010-1-14 17:08:49 | 只看该作者
凑凑热闹!
11
发表于 2010-1-14 17:22:24 | 只看该作者
收下来了!呵呵!~学习学习,嘻嘻,谢谢了。
12
发表于 2010-1-14 18:06:26 | 只看该作者
收藏备用
13
发表于 2010-1-14 18:12:02 | 只看该作者
好~
14
发表于 2010-1-14 19:04:15 | 只看该作者
看看,是些什么好东东?
15
发表于 2010-1-14 19:11:50 | 只看该作者
游览了一下,似乎是个浩瀚复杂的鸿篇巨制……
16
发表于 2010-1-14 19:42:01 | 只看该作者
好东西,一定要。
没有wltool啊。

[ 本帖最后由 泡人 于 2010-1-14 20:25 编辑 ]
17
发表于 2010-1-14 20:35:08 | 只看该作者
说实话,很多我都不会用,我怕麻烦.
18
发表于 2010-1-14 20:51:22 | 只看该作者
看看,是些什么好东东?
19
发表于 2010-1-14 20:55:42 | 只看该作者
值得珍藏的备用工具,顶一下。
20
发表于 2010-1-14 22:19:39 | 只看该作者
到此一游 ^_^
凑个热闹,留个脚印
21
发表于 2010-1-15 05:22:58 | 只看该作者
我所欲也……
22
发表于 2010-1-15 08:03:37 | 只看该作者
下了看看,好了在顶。哈哈
23
发表于 2010-1-15 08:04:29 | 只看该作者
东西不错,不过应该简单化 傻瓜化,对词库的整理进一步的优化。
24
发表于 2010-1-15 15:35:58 | 只看该作者
看看先,应该还是用得着的
25
发表于 2010-1-15 17:28:56 | 只看该作者
回复看看
26
发表于 2010-1-15 19:12:03 | 只看该作者
看看,不看下载不了啊。。。。。
27
发表于 2010-1-15 20:16:50 | 只看该作者
回复为看贴
28
发表于 2010-1-15 21:29:08 | 只看该作者
收藏!收藏!
29
发表于 2010-1-17 16:20:49 | 只看该作者
楼上可是潜水高手啊……!!
30
发表于 2010-1-17 22:15:38 | 只看该作者
有空也试试看做自己的词库
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|华宇拼音输入法网站  

GMT+8, 2025-12-24 21:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表