|
推荐
楼主 |
发表于 2015-8-26 20:53:13
|
只看该作者
本帖最后由 goldmonkey 于 2015-8-27 16:26 编辑
Oxford Reference Online里面有很多词典,至于账号和密码Google能搜到
Oxford Dictionary of Accounting(4 ed.) 不算太厚,大概4000条不到的样子
我观察了下,发现这个网站的链接大概有这个规律
http://www.oxfordreference.com/v ... ef-9780199563050-e-(*)
9780199563050应该是ISBN号码
*代表从1到未知的一个数字
为什么说是未知呢?因为索引表的最后一个单词不一定是在数字最大的那个页面里。这个网站有点奇怪的地方在于,它的索引表的链接并非完全连续的,100个里面可能有五六个的链接里面的数字是跳到其他地方的。
比如3000到3100里面
http://www.oxfordreference.com/v ... 780199563050-e-3013
http://www.oxfordreference.com/v ... 780199563050-e-3027
http://www.oxfordreference.com/v ... 780199563050-e-3042
http://www.oxfordreference.com/v ... 780199563050-e-3043
http://www.oxfordreference.com/v ... 780199563050-e-3057
http://www.oxfordreference.com/v ... 780199563050-e-3059
http://www.oxfordreference.com/v ... 780199563050-e-3079
http://www.oxfordreference.com/v ... 780199563050-e-3096
http://www.oxfordreference.com/v ... 780199563050-e-3097
这些都是page not found
所以应当还是用索引表来下比较好
但是我不会python,全是用Firefox的DownThemAll下载的,这个扩展可以在下载地址里面加入批量描述符,比如:
http://www.oxfordreference.com/v ... ef-9780199563050-e-[1:5000]
取5000是因为不知道最大的数字有多大
page not found的页面DownThemAll会提示404
下载来以后提取词典正文的工作我是用autohotkey完成的,代码如下
- FileEncoding, UTF-8
- SetWorkingDir %A_ScriptDir%
- Loop, *.htm
- {
- validity=0
- ;validity用来判断这个htm是不是page not found
- newfile=%A_ScriptDir%\shorten\%A_LoopFileName%
- ;须预先建好文件夹
- FileAppend, <div class="entryContent">, %newfile%
- FileAppend, `r`n, %newfile%
- deletestring1=<dl class="metaInfo"><dt class="source">Source:</dt><dd class="source">A Dictionary of Accounting</dd></dl>
- ;去掉source部分
- deletestring2=/view/10.1093/acref/9780199563050.001.0001/
- ;修改跳转链接
- ;msgbox, %deletestring1%
- ;上面一句是调试用的
- Loop, read, %A_LoopFileName%
- {
- IfInString, A_LoopReadLine, headword
- {
- copyline=%A_LoopReadLine%
- StringReplace, copyline, copyline, %deletestring1%
- StringReplace, copyline, copyline, %deletestring2%, , All
- ; All之前那个选项如果没有必须用逗号表示,不能跳过
- StringReplace, copyline, copyline, #, .htm, All
- FileAppend, %copyline%, %newfile%
- validity=1
- }
- }
- FileAppend, `r`n, %newfile%
- FileAppend, </div>, %newfile%
- If validity=0
- {
- ;FileDelete, %newfile%
- ;把page not found的给删掉
- }
- }
复制代码
这个ahk脚本现在觉得缺陷很大,有个别页面正文内容不在htm源代码的同一行上,就会导致处理后的htm缺少正文部分。解决办法是对文件夹下htm大小进行排序,那些特别小的就是有问题的,我只能手工处理
接下来要对htm文件进行处理,以符合Mdict的要求
这部分我是用EmEditor里的在文件中替换功能做的
先加上正文结束的符号
我先是把所有换行符先去掉的(Mdict要求关键字、正文和结尾各占一行),便于提取关键字
把所有\n都替换掉
这里用的是转义符,不知道为什么正则表达式不行
修改跳转链接的规则
先得把#
替换成.htm
再把/view/10.1093/acref/9780199563050.001.0001/全删掉(前面的脚本里也有)
这时不能勾选正则表达式,然后
把- <a href="acref-9780199563050-e-\d+\.htm" id="ref_acref-9780199563050-e-\d+">(.+?)</a>
- 替换成<a href="entry://\1">\1</a>
复制代码
像acref-9780199563050-e-13.htm这个页面下面这个规则就行不通了
所以用另外一个修改跳转链接的规则
- <a href="entry://<span class="sc"><span class="sc">(.+?)</span></span>"><span class="sc"><span class="sc">(.+?)</span></span></a>
- 替换成<a href="entry://\1">\1</a>
复制代码
下面是提取关键字
- <div class="entryContent"><div id="contentRoot"><h1 id="pagetitle" class="oxencycl-title"><span class="oxencycl-headword">(.+?)</span>
- 替换成\1\0
复制代码
再把换行符加上去
- ^(.+?)<div class="entryContent">
- 替换成\1\n<div class="entryContent">
复制代码
以及
去掉source部分(前面的脚本里也有)
- <dl class="metaInfo"><dt class="source">Source:</dt><dd class="source">A Dictionary of Accounting</dd></dl>
复制代码
到这里原以为差不多了
htm批量重命名为txt我是用Total Commander做的
合并txt我也用了ahk脚本,代码如下
- FileEncoding, UTF-8
- SetWorkingDir %A_ScriptDir%
- Loop, *.txt
- {
- newfile=%A_ScriptDir%\combine\combine.txt
- ;须预先建好文件夹
- Loop, read, %A_LoopFileName%
- {
- FileAppend, %A_LoopReadLine%, %newfile%
- FileAppend, `r`n, %newfile%
- }
- }
复制代码
一开始MdxBuilder提示Keyword is longer than 1024 at position
于是用^\w.{80,}来搜索合并好的txt,发现有些关键字和内容没有分开
到GoldenDict里面发现有的词条关键字被夹在<i></i>里面
于是用
有的关键字中&替换成&,还有’我换成了',不知道这两者有何区别
又发现有的词条关键字漏了缩写或别名,但是词典正文有,比如current ratio (working-capital ratio) 和Bank for International Settlements(BIS)以及directors' remuneration (directors' emoluments)等等
于是用- ^(.+?)\n(.+?)\(<span class="oxencycl-headword">(.+?)</span>\)
- 替换成\1 \(\3\)\n\2\(<span class="oxencycl-headword">\3</span>\)
复制代码
注意\1 \(\3\)有个小空格
这么做是有风险的,因为我看了下比如current ratio词条里面有current assets的跳转链接,如果把关键字加上缩写或别名的话,跳转起来也不方便,所以后来想想还是不要这么做好
图片怎么办呢
提取出下载地址(还需补充)
<img src=.+?\.gif.+?class="math">
复制即可
下载地址大概是这种格式
http://www.oxfordreference.com/d ... -math-0008-full.gif
修改图片地址
- "/doc/10.1093/acref/9780199563050.001.0001/(acref-9780199563050.+?gif)"
- 替换成\1
复制代码
再小修一下
- gif alt=".+?" class="math"
- 替换成gif
复制代码 |
|