|
本帖最后由 yaodis 于 2014-4-13 20:51 编辑
本文讲述了 [英-英] 适合高阶英语学习者的 Vocabulary.com Dictionary 优美发布 的制作历程
,希望给有意制作词典的朋友们一点借鉴
关于我
为了和 O大Oeasy 交换词典,半年前萌生了制作自己词典的想法,或者说,谁没有制(zhan)作(you)一部自己的词典的想法,只是面对未知心有恐惧没有行动,这次使我下定决心开始搜集信息, mdict版制作方法和常用工具 )让我对mdict词典格式是什么样的有了认识,也就是说数据有了怎么组织大概知道了,但网页数据用什么方式抓取还是不知道,抓取了用什么方法提炼排版成mdict要求的那样的格式也不知道,[索引] 【2013.11.27】词库制作中可能有用的软件、技术整理 而这个帖子中python网络爬虫一文让我决定试试学习python,会了编程,再用程序排版应该很容易吧,而我之前又听说python很容易学,于是就这么愉快的决定了
寒假里断断续续看了一些 regular expression 视频和python的入门书,虽然如此,开头总是难的,还是不会如何下手,第一步就不会——python到底如何批量抓取网页内容呢,3月初看到 python培训_python爬虫.flv (这个视频我觉得很好)原来是这样,便开始动工,到3月底,已经把网站下好提取成型了,又花了十多天排版CSS,终于在4月初完成了,历时一个月
python学习
我主要看了三本书Hello World - Computer Programming for Kids and Other Beginners、Python for Informatics、dive into python和官方的文档,如果0基础可以从第一本看起,里面有很多章节关于GUI编程的都可以跳过,我就只看里面前几章和后面的几章,这本书让我知道了计算机都是从0开始数数的;第二本非常非常非常推荐,里面蜻蜓点水涉及了我们制作词典需要的所有东西,怎么用python下载网页,还简单介绍了regular expression怎么在python里应用,网页的数据结构XML,json都有,我这次制作这个词典里面就用到了json,因为网站就是用json储存wordfamily数据的;第三本侧重于python本身,我想如果看完了,那再去看官方文档就没问题了吧,这本书我没看完,所以官方文档我看起来很吃力,从这本书知道了if __name__ == '__main__':是什么意思,以后你会发现这很种看似有点吓人的东西python里很常见,所谓的面向对象编程,慢慢就接受了
语言上这三本书都是英文的,4、6级水平读起来就没问题了,难度上,这三本书都是入门级的,但是制作词典需要掌握的基本够了
开始实践
多亏了上面提到的那个视频,我迫不及待的想动手自己试试,此时这三本我现在觉得帮助很大书只看了第一本,不然的话,我还可能会按部就班的想——我先把python学的差不多再说吧,寒假里看得正则也忘的差不多了。因为这个视频一上来就实干,所以我也就干起来,边干边学,像视频里那样,分析了vocabulary.com是通过“http://www.vocabulary.com/dictionary/definition.ajax?search=”这个网址来传输词条数据的,我还得用python加个代理,不然连续下的话服务器会封我ip,视频里只教我这么多了,但发现自己下载10个单词就要1分钟多,近15万个单词全部下载完要10天10夜呢,我就想能不能快点,能不能多线程,又搜别的资料,python基础不牢,多线程看了4、5天也没头绪,主要是什么join啊,lock啊,因为线程可以多,但数据怎么保证完整XX,我放弃了,决定手工模拟多线程,把15万个单词分成了10个列表,分别运行10个程序,这样我1天就下好了
这期间当然还会有其他问题,比如最少得有100个代理吧(当然这么多代理是用python从代理网站抓取的)(因为有10个程序,每个得有10个代理供其随机选才够吧),这么多代理用免费的,质量肯定会参差不齐,实际上我从网上搜了一个检测的程序,结果上次运行的结果再次运行还是能发现坏链,所以,必须加上意外处理机制,我的方法是,10个代理里面如果有一个是坏的,那我1万个单词就有一千个下载失败,我把这一千个单词收集起来,再运行一次程序就只剩100个了,依此类推
下图就是我最终用来抓网页的程序(希望给还没接触过的人一个直观的认识,主体就只有这么多,50行不到,右边就是要下载的单词列表),代码就不贴了,我也是照葫芦画瓢,大概的意思日后懂点python了你就能看懂,也能自己写出来符合自己需求的了
下好之后就要提取需要的内容排版成符合mdict要求的格式了,这里需要懂点html(css)和正则表达式了,html(css),我觉得这个网站就挺好 http://www.w3schools.com/,正则,网上很多教学视频。什么都不懂的时候看视频快一点,懂一点之后动手尝试学的快一点,不要指望可以什么都懂就不会急了,总之慢慢来。而python此时只要会基本的文件读写,列表,词典等数据类型就可以干活了
下图是我从下载来的数据一站式生成可以直接被MdxBuilder使用的词典原格式的代码,虽然只截了一半,但无非就是反复运用正则,然后人为的组织下运行结果的结构,我里面同样为日后的CSS排版写入了class名,当然,这都不是一次就成型的,都是要反复打磨,不然怎么能用10天搞CSS啊,特别是我这种完美主义倾向的人,要了命了
结语
我所有的代码没有一次直接成功,都是反复修改,遇到问题、疑惑最好用英文单词罗列问题谷歌,国外的编程社区问答很健全,大部分解答很详细,我这样的新手也能看懂
同样,作为一个新手,很多更巧妙或更省心的方法(比如python的第三方库BeautifulSoup)或风格更专业的代码我都无瑕顾及,仅凭着一点三脚猫功夫就把词典做成了,可见词典制作也不是那么遥不可及,如果你也想试试,那么利用我在 vocabulary.com 网站文本数据下载 中提供的数据,通过正则提取全部音频的链接,然后制作一部发音版的词典或许是一个不错的选择,或者省去下载的麻烦,你也可以自己尝试制作完全版本哦(而不是我那样人为的分割成两部) |
评分
-
1
查看全部评分
-
|