使用perl构造自己所属的专用词库
2011-03-03 22:02
281 查看
1.文章目的及背景介绍:
前几天购买的英语词汇书中附赠了一款软件,能够按照书中的每一章的词汇进行考查,提供的考查方式有'看英文选中文'、'听音选中文'、'看中文选英文'和'单词拼写'这几项,很是符合我的需求。但是在使用了几个单元之后,发现了一个很重要的问题:该软件的词库和词汇书中的词库不一致,每个单元的词汇并不像他宣称的那样一一对应的。
囧,要是这样,这款软件就完全没有意义了。后来转念一想,能不能以此软件为基础构造适合于自己的词库呢?本文将整个摸索的过程记录下来,用于以后自己参考.
需求及可行性分析:
软件的目录结构如下:
/..
|——data/
|——sound/
|_skin
.
其中,sound中存放的是各个单词的发音;data中存放的是软件词库,而且,词库不出所料的以xml格式存储;-),看到这里,不禁精神一振,觉得修改它的词库是可行的.
词库格式:
思路如下: 词汇书的赠品中还包括了每个单元的MP3及对应的lrc文件,只要从lrc文件中取出所有单词,按顺序地在原来的词库中找到该单词相对应的项并取出。这样,就能得到新的词库,到那时,只需要吧WID的值更改一下即可。
2.工作环境及经验要求:
工具:perl,UltraEdit,MS_dos,Cygwin easy
操作系统:windows xp
经验要求:熟悉基本的linux命令,熟悉正则表达式,熟悉perl语言即可.
3.过程:
1.从LRC文件中取出所有的单词。
正如上图所示,lrc文件分别在cd文件夹下面的5个一级文件夹30个二级文件夹中,采用 find . -name "*.lrc" > lrcnamelist.txt,并将其处理成 cp ./核心词汇/Word List 05/Word List 05.lrc ./LRC 然后当脚本处理即可。
然后再用 cat *.lrc > wordlist.txt 得到新词库
从这一步获得的wordlist.txt中的内容如下:
abroad
accord
ache
across
2.从旧词库中取出单词项。
将wordlist.txt中的单词用正则表达式处理成
E="abroad"
E="accord"
E="ache"
E="across"
E="act"
E="address"
E="advance"
创建get_word_info.pl文件,代码如下:
用命令 ./get_word_info > new_word.data,得到新词库
对于旧词库中没有的单词,需要剔除这些单词.
3.最后将WID的值修改成升序即可。
4.总结
(没了)
前几天购买的英语词汇书中附赠了一款软件,能够按照书中的每一章的词汇进行考查,提供的考查方式有'看英文选中文'、'听音选中文'、'看中文选英文'和'单词拼写'这几项,很是符合我的需求。但是在使用了几个单元之后,发现了一个很重要的问题:该软件的词库和词汇书中的词库不一致,每个单元的词汇并不像他宣称的那样一一对应的。
囧,要是这样,这款软件就完全没有意义了。后来转念一想,能不能以此软件为基础构造适合于自己的词库呢?本文将整个摸索的过程记录下来,用于以后自己参考.
需求及可行性分析:
软件的目录结构如下:
/..
|——data/
|——sound/
|_skin
.
其中,sound中存放的是各个单词的发音;data中存放的是软件词库,而且,词库不出所料的以xml格式存储;-),看到这里,不禁精神一振,觉得修改它的词库是可行的.
词库格式:
<PACKAGE> <ITEM WID="1" E="abroad" FN="" P="[?'br?:d]" C="ad.①到国外,在国外②传开,到处" TFN="abroad.mp3"/> <ITEM WID="2" E="accord" FN="" P="[?'k?:d]" C="n.①一致,符合②(尤指国与国之间的)谅解,协议vi.(with)相符合,相一致,相和谐vt.授予,赠与,给予" TFN="accord.mp3"/> ... </PACKAGE>
思路如下: 词汇书的赠品中还包括了每个单元的MP3及对应的lrc文件,只要从lrc文件中取出所有单词,按顺序地在原来的词库中找到该单词相对应的项并取出。这样,就能得到新的词库,到那时,只需要吧WID的值更改一下即可。
2.工作环境及经验要求:
工具:perl,UltraEdit,MS_dos,Cygwin easy
操作系统:windows xp
经验要求:熟悉基本的linux命令,熟悉正则表达式,熟悉perl语言即可.
3.过程:
1.从LRC文件中取出所有的单词。
F:. │ │ ├─核心词汇 │ ├─Word List 05 │ │ Word List 05.lrc │ │ │ ├─Word List 06 │ │ Word List 06.lrc │ │ │ ├─Word List 07 │ │ Word List 07.lrc ... │ ├─次常用词汇 │ ├─Word List 21 │ │ Word List 21.lrc │ │ │ ├─Word List 22 │ │ Word List 22.lrc
正如上图所示,lrc文件分别在cd文件夹下面的5个一级文件夹30个二级文件夹中,采用 find . -name "*.lrc" > lrcnamelist.txt,并将其处理成 cp ./核心词汇/Word List 05/Word List 05.lrc ./LRC 然后当脚本处理即可。
然后再用 cat *.lrc > wordlist.txt 得到新词库
从这一步获得的wordlist.txt中的内容如下:
abroad
accord
ache
across
2.从旧词库中取出单词项。
将wordlist.txt中的单词用正则表达式处理成
E="abroad"
E="accord"
E="ache"
E="across"
E="act"
E="address"
E="advance"
创建get_word_info.pl文件,代码如下:
#!/usr/bin/perl -w if(!open WORDPOOL, "<" , "Word.dat") { print "open file error/n"; } while($srcline=<STDIN>) { chomp($srcline); print $srcline; while(<WORDPOOL>) { if(/.*$srcline.*/) { print $_; } } close WORDPOOL; if(!open WORDPOOL, "<" , "Word.dat") { print "open file error/n"; } } close WORDPOOL;
用命令 ./get_word_info > new_word.data,得到新词库
E="accord" <ITEM WID="5" E="accord" FN="" P="[?'k?:d]" C="n.①一致,符合②(尤指国与国之间的)谅解,协议vi.(with)相符合,相一致,相和谐vt.授予,赠与,给予" TFN="accord.mp3"/> E="ache" <ITEM WID="2462" E="ache" FN="" P="[eik]" C="vi.痛,疼痛" TFN="ache.mp3"/> E="across" <ITEM WID="6" E="across" FN="" P="[?'kr?s]" C="prep.①横越,穿过②在…对面,与…交叉ad.①横过,穿过,横断②…宽,阔" TFN="across.mp3"/> E="act" <ITEM WID="7" E="act" FN="" P="[?kt]" C="vi.①行动,做事②(on)起作用③表演n.①行为,动作②法令,条例③(一)幕" TFN="act.mp3"/> E="writhe"E="yacht"E="yearn"E="yolk"E="zenith"E="zest"E="zoology"
对于旧词库中没有的单词,需要剔除这些单词.
3.最后将WID的值修改成升序即可。
4.总结
(没了)
相关文章推荐
- C#发现之旅第十一讲 使用反射和特性构造自己的ORM框架
- 使用RxJava自己构造一个三级缓存的实例
- 使用Tangram构造你自己的软件开发平台(一)
- 使用jquery构造自己的多级菜单
- 使用Tangram构造你自己的软件开发平台(一)
- 使用Tangram构造你自己的软件开发平台(二)
- 使用Keras由零开始快速构造自己的深度学习模型
- 使用jquery构造自己的多级菜单
- 使用Tangram构造你自己的软件开发平台(二)
- 如何创造自己的数据字典(词库转换工具的使用)
- 使用FTPClient构造自己的FTP类
- 使用gtype构造的一个简单学生管理程序其他属性自己加
- 使用NetworkStream发送自己构造的http数据包总是读取数据超时
- 使用反射和特性构造自己的ORM框架 转载自:http://www.cnblogs.com/xdesigner/archive/2008/06/24/1228702.html
- 使用Tangram构造你自己的软件开发平台(一)
- python第18篇自己构造一个模块使用
- 使用Tangram构造你自己的软件开发平台(二)
- 使用JCplayer在自己的网站上播放视频
- UISlider的简单使用,一年不用一次,我是真怕自己忘了怎么用
- oracle共享模式与专用模式使用上的区别