TA的每日心情 | 擦汗 2019-11-13 23:25 |
---|
签到天数: 44 天 [LV.5]常住居民I
|
本帖最后由 ipda_cluo 于 2019-1-10 10:21 编辑
2 M0 @7 e$ a) p: X% H9 C! i
9 E+ H& s* N# T/ y) F今天真的是超级闲,再发一个我平时用来整理生词的工具,供大家借鉴。
8 E) ~! B% j( x; c3 b3 r2 m背景:; G# w: n2 q# ]% i3 g- [" b w( i
我使用欧陆词典唯一的原因就是,这玩意带一个云端生词本,可以把我在手机上、电脑上,pad上看资料,看书等查过的单词记录下来。这就解决了我制作自己生词本的最基本攒词的问题了。
2 g& p* e2 |4 W* w/ s6 x& J' J8 P攒了一段时间生词后,接下来就得背这些单词,我我是懒癌患者,指望我记笔记整理生词是不可能的。所以我选择了用知米背单词,扇贝单词这类app,把我的生词本导进去背诵,这样既省力,又容易坚持,还可以借用app所谓的“科学记忆法”。
# I7 h3 h6 m6 R3 k) v但问题来了,如果有人看过自己查词记录就知道,查过的单词是需要整理的,没整理前的查词记录有这些问题:2 F1 u" o" Q! I+ P& m
1,有些查过的单词根本不是单词,比如人名,比如拼写错误等等,把这些单词当做生词背下来那可真是天理不容。, I. K* {! J8 s4 [! ~/ n
2,很多单词各种变体,比如ing形式,ed形式等等。虽说有些时候背诵这种形式也很有用,但还是力气实在刀刃上,源词都没背下来,你去背ing形式干嘛?0 ?( \: _, z+ a3 T. z0 n
3,词频过低,有些单词可能是个组合词,或者使用率极低的词,及时背完了,以后一辈子都用不到,跟没背一样。也会忘记。
- O8 S6 m* _# S1 L% a2 Y8 s6 X- W' w0 g( u- A+ G q3 D: ]
So,怎么解决呢?
: I$ T) E5 q9 m+ ~
; g! ^! ]7 @5 _ D7 v1,导出生词本,这个大家研究一下欧陆词典,应该都会
, n0 x% u8 A" Q: k2,清洗生词本. p. R X. F9 O, q0 E7 e0 x4 v# z5 K6 P
a)去除不存在的词。方法比较简单,在词典里查一下,如果查不到,那就是不存在的词。) G0 ^& q& N/ F
b)还原到变体前形式,这个有意思了,混这个论坛里的 人 ,如果我和你们说说直接把单词后面的ing,ed字母去掉,肯定会骂我的。大家可还记得有道在线词典查这种词的结果?/ Q/ W0 r' |* J0 I$ _
: K1 I" {7 e$ C7 T& I
看,对于这种单词,有道翻译后面一般都会有一个 xxx的yyy形式。对,这里xxx就是源词。+ g" z7 c! z2 D! {0 ?( O
那剩下的就简单了,有道查一遍,找到那个xxx就可以啦。" c8 s) }; a$ T+ P2 l, p1 z9 E
c)去除重复,之前做了还原,肯定有很多重复的单词' g( `$ h* Y% `
d) 根据词频排序,筛选; M0 i. t; E8 H) X
与去除单词方法一样,很多词典里面都包含了词频数据,找到后做个排序就可以了。
2 f: {/ R* @& ^9 v3, 导入到背单词工具里面,退出懒人模式,开背。) R2 P" i; U; O5 L$ P1 `
8 R. C" v# F) Y, n% r& c8 N
方法有了,剩下的就是写工具来搞定啦,人肉一个个查肯定要吐血的,安装python,复制如下代码到文件里,改名为py8 D$ \- a' X5 T [2 Y) v6 k
- import pandas as pd
$ i$ ~4 l% c Q. J2 x: E" N - import numpy- u5 a0 g+ L' z' _2 W& B. R
- import ydcv
. x* M/ J& A7 ]$ l - import sys; q( ^1 c, m4 `0 c n; Y
- sys.path.append('./mdictlib')
' z$ x- L& U) m* `2 K - from mdict_query import IndexBuilder
4 s3 y2 ~2 t* H) [ - builder = IndexBuilder('./Collins.mdx')
4 d4 {4 U% V7 d) f
0 @2 G! h" u7 R4 o d- def has_explains(result):
2 ]5 P1 B2 o) _+ J - return ('basic' in result) and ('explains' in result['basic'])8 \6 I/ M7 y6 T5 E
" X/ l, [. b6 J/ d8 A4 ]* U+ q- def get_explian_from_result(result):
( z' o" u% a3 [& T# u. L" U - if not has_explains(result):
; q8 ]$ O3 t& o3 v% _ - return '', Q" B( Q' ^' `: L
- return ';'.join(result['basic']['explains'])" m$ Q9 r$ Y: w" t0 N1 e- r
; I3 A% _) p ?3 M& t: J) y. k- def translate_from_yd(word):4 ^+ D$ c# H6 a1 e- P5 Q) R
- result = ydcv.lookup_word_inner(word)
$ L$ S9 }8 [! y4 b - return result
' R9 O. n! [. @, Y* d - $ p& _- w1 ^/ f2 n% j% W R
- def if_in_collins(word):
& ^3 H+ D8 R$ {4 m! ?% }4 X+ W8 }4 u - return len(builder.mdx_lookup(word)) > 0! t; N4 z6 W6 v+ R) |, L; P
- ) Y2 Y* |/ L' h, u& j: z: S
- df1 = pd.read_csv('./2018.12.20-wordbook-neat.txt',names=['worlds'])
' u1 ?* g" O1 R* j2 T: l1 X9 M - df1 = df1.sort_values(by = 'worlds')
6 m& d& Q- O7 e9 D6 c3 H - df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x)): D4 h4 `" {; I3 j1 C
- df1['expalins'] = df1['yd_explain'].apply(get_explian_from_result)
+ z) Y' j K9 Y; ^7 N# ~# Z - origin_word = df1['expalins'].str.extractall(r'[(\(]([a-z]+)的.*[)\)]').unstack()+ K1 a! Z h2 Z4 }6 s
- df2 = df1.copy()
" W6 w3 H& U6 k" a& F - df2.loc[list(origin_word[0].index)] = origin_word[0]
4 X. C# Q" [. f; p1 X0 r - df2 = df2.reindex(columns=['worlds','expalins']); e9 E: m% r" i
- df2 = df2.drop_duplicates('worlds')
2 M' N0 ` l* n - df_not_in_collins = df2[df2['worlds'].apply(lambda x: if_in_collins(x))]
# Z% o1 \7 u) d - * W( C' K8 }+ l/ q- d4 A
- df1.to_json('./words_queried_by_youdao.json')
: Y5 L7 \, P8 [9 W5 R2 D9 Y - df_not_in_collins.to_csv('./df_not_in_collins.csv')5 L' A3 b, n! x
) @4 a7 e! U1 J P S1 D- df_not_in_collins['worlds'].to_csv('./neat_word_list.csv')+ B& S2 y. R* Q+ |. w2 y) q: q: V! y8 ^
复制代码 然后运行,就可以看到清洗过的单词啦。
, y+ V+ x4 T6 F1 G/ M+ H! z& w5 M1 Y( V& @, @5 _3 l! v
PS:这个工具需要有些依赖解决,有一定python基础的可以通过看导入的模块来猜出依赖。没有基础的不要着急,我有时间整理好后会放到github上,给小伙伴们提供使用。
+ t$ n( _4 `+ c" n/ t. B) u) P除了依赖以外,需要自己有一个用于排除无效词的mdx文件,这里我用的是柯林斯词典。
$ s2 i; z* T" P% {2 `: R1 o3 e2 G: k( Y0 q8 f& \$ p
So,enjoy
0 T* y) U5 j+ k" Q/ v9 U9 y/ M) f5 G! n) w' ^
======================================================================
6 G7 d8 q8 Z% l& `- k3 a/ ~: g* z% [! L* K
updae
( c6 ^4 X$ q6 `2 e+ ]好像有朋友再尝试代码的时候遇到些问题,我深知调试别人代码是多么恶心的事情,为了节省各位的时间抽时间整理了一下代码放到了git hub上:
* y) f7 `# o+ O0 O* f3 y) v* f参见: https://github.com/zam5607822/word_book
3 K" a: N# @: e% |. g
) w2 h1 G- m, w* ~7 U h& M几点说明:
& l$ `5 ^3 z, Z. P" O. X7 D1,由于我自己的环境是基于jupyter,所以也上传了ipynb文件,大家有喜欢用jupyter的也可以用这个。不使用jupyter的,直接使用wordbook.py即可。 _/ d* d! _: l) ^+ \: k0 O
2,为了方便大家,增加了依赖说明文件:requirements.txt ,各位在第一次运行代码的时候,使用 pip install -r requirements.txt 安装一下依赖即可 |/ R2 _0 J4 L% z
3,为了方便大家测试,准备了一个示例生词本:2018.12.20-wordbook-neat.txt可以替换成你的) v+ B% M& D. D: L, O
4, 同样也上传了一个默认词典文件:Collins.mdx
1 {0 n+ v, y1 B1 ~9 t0 y5, 有道词典的接口是需要一个token的,获取的方法可以自行百度,我的token被我隐藏掉了。自己获取到token后,替换掉ydcv.py文件中的28,29行 换成你的token。
- |$ j [- z# k; `
9 n! i4 b0 F: P7 C% p+ X+ O; Kenjoy
& i9 A, X$ S( M1 C |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
3
查看全部评分
-
|