TA的每日心情 | 开心 2019-8-21 08:44 |
---|
签到天数: 163 天 [LV.7]常住居民III
|
本帖最后由 mikeee 于 2019-2-6 22:50 编辑 ; z* _8 Q- C7 l: [' p
# \$ D0 ^! u$ V% z/ Y再来用 PDF 做个 mdx,Dictionary of Cliches的pdf文件论坛里可以搜到。大致看了一下,估计两小时的工作量——最后用了不下10小时。步骤:- 上传pdf到 https://pdftohtml.net, 几分钟后下载转成了 html 的文件。
- 用 Chrome 打开解压后得到的 html 文件, F12调出 devtools。稍微研究一下后即可得知,div.cls_025>span.cls_025,div.cls_025>span.cls_023,div.cls_023 的 css selector 可以完美定位所需的内容。div.cls_025>span.cls_025 定位的是词头, div.cls_025>span.cls_023,div.cls_023定位词义。几行python搞定。(用 bs4 或lxml应该也是可以的, 其实pq是基于 lxml的etree元素。用node的cheerio的话基本思想差不多,码可能更简洁。用正则的话当然就用不了css selectors,可能会繁琐一点。)
- from pyquery import PyQuery as pq+ |, H& A6 n& t1 H0 p
% t8 K# v1 t( {; P, e- file = r'C:\Users\xyz\Downloads\Dictionary of Cliches (Facts on File)\b67f0a6e-1e61-11e9-8f58-0cc47a792c0a_id_b67f0a6e-1e61-11e9-8f58-0cc47a792c0a.html'
o) A% n4 Q7 i+ l' t U2 X! @1 O - doc = pq(open(file, encoding='utf8').read())
6 X) u: R) J0 D$ S; k - 8 \3 y' Q) W4 Q+ k& m$ k) n
- hw_css = 'div.cls_025>span.cls_025'. L4 {7 E y2 j
- ctx0_css = 'div.cls_025>span.cls_023'' O, B+ v+ {" [7 P
- ctx0a_css = 'div.cls_025>span.cls_028'7 L6 j$ Z# b+ p# C% r, N* ?& T
- ctx0b_css = 'div.cls_028' # capital, references+ E, j4 G* Q% L# Q8 B( n
- ctx0c_css = 'div.cls_027' # italics, book names
, b- d8 `. [7 \3 \$ {4 E - ctx1_css = 'div.cls_023'" t" ^" o! O9 @$ @% o
- hw_ctx_css = f'{hw_css},{ctx0_css},{ctx0a_css},{ctx0b_css},{ctx0c_css},{ctx1_css}'9 |3 p- E4 H p; F, U H7 s$ \- U
- . b2 d, X+ u W" ~% a4 R
- # css selector 到最后比我预期的复杂些, 所以用 abbyy finereader 可能比用 pdftohtml.net 简单些。) M" z& X* N* @! b% J" }
- items = doc(hw_ctx_css)
复制代码 我们要的东西在 items 里。稍微处理一下 items 得到 由(词头,词义)组成的 entries- entries = [], ?" N/ N2 }% f w2 c+ e
- hw = ''
9 K9 _4 ]7 y8 r4 }* f - ctx = ''* _0 c: F0 A6 j4 \% U3 r
A4 _8 x3 C1 W- upper_b = 50
9 d3 N) z1 ^+ `3 S; @6 ` - for elm in items[: upper_b]:
. H/ Z6 Q2 O: y/ Y; A/ ~ - tmp = pq(elm)- `& {9 k. \+ s5 u; H$ Z
- if tmp.attr('class') == 'cls_025':4 X( U$ d( u* a0 L
- 4 X7 N# K& `2 [7 W; |
- entries += [(hw, ctx)]4 p, W# e$ ] g, k: r
- ' c" F" N- i$ U& T2 \/ J
- hw = tmp.text()
, K% h; O# o' {0 i: { - ctx = '') \" m. Y N" K% X3 u, S: y. l$ e' h
- else:( d3 M" L+ H0 g" k P& X% U1 o
- ctx += f' {tmp.text()}'& C# I ~. p8 n J/ O9 B
7 q3 W e$ O1 n& S1 T- # collect the last batch
" m$ G6 l q; e$ P$ n b - entries += [(hw, ctx)]
0 g( N2 `, i( j; _ ^3 ]
0 M+ O" G1 X/ u' @- def proc_func(ctx):9 ]) q$ M h" D$ O j' j
- ctx = ctx.strip()6 x% F* t7 |7 F5 r; C
- 9 ?8 |) [- [+ Y
- # insert a space after .: [a-z]\.)([^\s]), Y& Q ]6 q; Q+ R. A$ r& r
- ctx = re.sub(r'([a-z]\.)([^\s])', r'\1 \2', ctx)
. ~6 @- n0 f1 o8 f7 {
2 w2 k: T/ | Q* t+ u3 W- # remove spaces
! f$ T, a, r3 y9 [2 m - ctx = re.sub(r'\s\s+', r' ', ctx)
. a8 m. |/ }5 W% U - return ctx9 V% @( Y( _$ r }$ H
- 8 J( W: A9 [% ?# l9 \
- entries = [(elm[0], proc_func(elm[1])) for elm in entries]
& J4 t5 L7 D1 U3 U - ! G; F- r2 Q& c% k6 \+ Q: s }
- print(entries[:3])
复制代码 输出为- [('', '—Christine Ammer —Christine Ammer'), ('about face, to do an', 'To reverse a decision or change one’s opinion. The term comes from the American military command to turn 180 degrees at attention, dating from the mid-nineteenth century, and by 1900 was being used figuratively. A more recent colloquial usage is to do a 180, but it has not yet reached cliché status.'), ('about the size of it', 'An approximately accurate version of a situation, event, or circumstance. It generally is used as a summing up: “That’s about the size of it. ”')]
复制代码 基本大功告成了。其实后面还是有很多事要做。 - 转成(mdxbuilder可用的) mdxhtml 格式(其实也可以直接用writemdict直接做成 mdx)。pdftohtml.net 转的html含位置信息,要抽取词头和释义以及参考链接还是要费点周折。折腾了几个晚上。结果是上传的三个py文件(mapping_dict.py用于处理一些特殊的链接)。运行 gen_mdicthtml.py 即可生成 dict_of_cliches_mdict.html。用 mdxbuilder 处理 dict_of_cliches_mdict 即可得到 mdx 和 mdd。所有的 py、html及 css、封面 png 打成包(见附件),python码比较乱,没有整理,但Py3.6下是可以运行的,有兴趣的网友可以折腾一下。
- Mdxbuilder 处理 dict_of_cliches_mdict.html 生成 mdx、mdd。(见附件)词头做了分拆,有交叉索引链接。见下图。
- 改进:找时间再做个可以查独立单词或词组的详细索引,进一步提高字典的可用性。
- 结语:如果 pdf 文件的内容是英文的并且可以拷出来,用 pdftohtml.net 转 html 再用 css selector 可以非常方便的自动处理词头和释义。但也有不少坑——漏掉一类 css selector就会导致内容的遗失。
0 C, h9 N0 }4 I$ e" v5 h4 J 4 n, n& W9 L' F1 L6 J
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
1
查看全部评分
-
|