TA的每日心情 | 开心 2019-8-21 08:44 |
---|
签到天数: 163 天 [LV.7]常住居民III
|
本帖最后由 mikeee 于 2019-2-6 22:50 编辑
) j+ k" ?; r$ ?8 Q# V3 |5 }, s
7 z9 k! j1 G& s' b' Q0 h" 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 pq6 [& V" S- J1 x5 p# k" u c' Y6 k
- & E% F* g4 v/ p* p
- file = r'C:\Users\xyz\Downloads\Dictionary of Cliches (Facts on File)\b67f0a6e-1e61-11e9-8f58-0cc47a792c0a_id_b67f0a6e-1e61-11e9-8f58-0cc47a792c0a.html'
; ]! C; ]- B& H0 A - doc = pq(open(file, encoding='utf8').read())
0 e l$ ~$ {4 \$ Q - 0 |3 R2 [: f7 w9 w
- hw_css = 'div.cls_025>span.cls_025'; C/ I+ b" v' o7 z. V
- ctx0_css = 'div.cls_025>span.cls_023'0 |' O$ {7 y5 p- J( E$ w9 a
- ctx0a_css = 'div.cls_025>span.cls_028'
5 q/ {( W) w5 ~) R2 v2 R9 ~ - ctx0b_css = 'div.cls_028' # capital, references
( a' V/ D- @$ Q) V% y1 F! K6 P7 ]- E2 k - ctx0c_css = 'div.cls_027' # italics, book names/ }- }4 e A0 Z( |. n! R2 [( A
- ctx1_css = 'div.cls_023'
$ B$ r3 r9 ^! u) b t - hw_ctx_css = f'{hw_css},{ctx0_css},{ctx0a_css},{ctx0b_css},{ctx0c_css},{ctx1_css}'4 \5 K& b, ~3 g, k- I! U
- - l0 t' C2 e* r+ p8 A# w) i, Q
- # css selector 到最后比我预期的复杂些, 所以用 abbyy finereader 可能比用 pdftohtml.net 简单些。
/ f1 q- G9 K$ A - items = doc(hw_ctx_css)
复制代码 我们要的东西在 items 里。稍微处理一下 items 得到 由(词头,词义)组成的 entries- entries = []
( n9 F7 z8 \) w; w - hw = ''. L p' E' Z& m3 C Z
- ctx = ''; V' k* N" m2 g5 t
- 8 G- |1 |" J; N# d) l& {% N/ E6 z
- upper_b = 50
4 Q! l: P' G1 _ - for elm in items[: upper_b]:
t8 i3 m* e, [& ^ - tmp = pq(elm)
2 `' S+ C0 m% }/ L" G$ X5 F - if tmp.attr('class') == 'cls_025':9 S4 O/ ~8 n$ G3 l
: C+ s: U ^! ]) p6 [- entries += [(hw, ctx)]
. q3 m s$ ?' L ^5 g) n - : E" a' j5 W( `
- hw = tmp.text()
$ V$ z' v/ z/ z - ctx = '', U0 `3 J7 E! ]- Q9 D7 y
- else:
3 U1 j! C% q2 q - ctx += f' {tmp.text()}'
( J; Q W$ {* ^; z; i n' l3 Z5 ?' G
: M$ n- u: ?' I- # collect the last batch
+ _3 M; _- z! Y% {. W! l - entries += [(hw, ctx)]4 h F# Y3 N4 D1 |6 x
; d( `7 z. J5 j/ ~0 r! H- def proc_func(ctx):
! s2 N% `3 ?2 f - ctx = ctx.strip()
$ w( i% h" p5 b; F+ D
l- J9 B/ ?3 p) a7 s3 s9 ], X- # insert a space after .: [a-z]\.)([^\s])
6 _' c3 L! Y( |5 ~, u3 I - ctx = re.sub(r'([a-z]\.)([^\s])', r'\1 \2', ctx)* r+ k1 I. a( [/ r5 [: F. L2 } S# I
* I; B. _4 ]3 ]0 ]7 q# s- # remove spaces
! v- q4 `8 e! r6 i/ ?8 Z6 ~, @ - ctx = re.sub(r'\s\s+', r' ', ctx)
2 z6 J9 h( Z7 J" F+ ~1 c. P, W1 } - return ctx; f* \) E" c; z' l; @' U
) K; ^ T' c) R* m' {7 X6 k" r- entries = [(elm[0], proc_func(elm[1])) for elm in entries]$ j, `9 F( d. Z5 U7 K" m
- / D5 p( h7 e! `- j n# n. `
- 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就会导致内容的遗失。9 }) }! F. V/ h3 l! B2 Q
9 Q8 S1 c4 G4 J. ]7 w' O% a4 C0 O
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
1
查看全部评分
-
|