TA的每日心情 | 擦汗 2019-11-13 23:25 |
---|
签到天数: 44 天 [LV.5]常住居民I
|
本帖最后由 ipda_cluo 于 2019-1-10 10:21 编辑 0 g. t& O4 Z t# [' c0 d! |
9 Z! c$ y- @/ r' |今天真的是超级闲,再发一个我平时用来整理生词的工具,供大家借鉴。* u. x& u6 x1 P: n/ G
背景:
. `9 Q4 O# U3 v1 A4 I我使用欧陆词典唯一的原因就是,这玩意带一个云端生词本,可以把我在手机上、电脑上,pad上看资料,看书等查过的单词记录下来。这就解决了我制作自己生词本的最基本攒词的问题了。" j- O2 T" P3 P$ W, A! r
攒了一段时间生词后,接下来就得背这些单词,我我是懒癌患者,指望我记笔记整理生词是不可能的。所以我选择了用知米背单词,扇贝单词这类app,把我的生词本导进去背诵,这样既省力,又容易坚持,还可以借用app所谓的“科学记忆法”。/ V4 ^5 V$ V( Q0 @8 }2 l
但问题来了,如果有人看过自己查词记录就知道,查过的单词是需要整理的,没整理前的查词记录有这些问题:% ]" f& `& t: K+ r
1,有些查过的单词根本不是单词,比如人名,比如拼写错误等等,把这些单词当做生词背下来那可真是天理不容。 ]. I& G$ }3 f. ]& A
2,很多单词各种变体,比如ing形式,ed形式等等。虽说有些时候背诵这种形式也很有用,但还是力气实在刀刃上,源词都没背下来,你去背ing形式干嘛?* w u4 q7 h* N/ m4 y$ Y! C: W/ `
3,词频过低,有些单词可能是个组合词,或者使用率极低的词,及时背完了,以后一辈子都用不到,跟没背一样。也会忘记。
& g# U# q/ w8 A7 t: \5 |
: _" E, n! E: p* U) pSo,怎么解决呢?1 ]& h% Y4 H" _& l( N6 n
* n5 _ E- y. Z9 n. q1,导出生词本,这个大家研究一下欧陆词典,应该都会' h( F5 ^* A- E4 ? H
2,清洗生词本
- L/ s7 s( \. r$ z% H a)去除不存在的词。方法比较简单,在词典里查一下,如果查不到,那就是不存在的词。
! ?6 Y* A# ]& s) H- b1 W ? b)还原到变体前形式,这个有意思了,混这个论坛里的 人 ,如果我和你们说说直接把单词后面的ing,ed字母去掉,肯定会骂我的。大家可还记得有道在线词典查这种词的结果?' V3 ?: _+ e* R' X& h2 C% V( Z
$ |4 A, Z/ N, g0 K$ _% b2 X看,对于这种单词,有道翻译后面一般都会有一个 xxx的yyy形式。对,这里xxx就是源词。5 S& A6 G7 G( c5 H5 {$ V" c; J
那剩下的就简单了,有道查一遍,找到那个xxx就可以啦。, x1 x# h" z& }
c)去除重复,之前做了还原,肯定有很多重复的单词) c! ?# n7 B2 F3 l4 w, q
d) 根据词频排序,筛选
$ l+ R0 Y+ s" p( e5 ^ 与去除单词方法一样,很多词典里面都包含了词频数据,找到后做个排序就可以了。' d C- E2 ~0 t
3, 导入到背单词工具里面,退出懒人模式,开背。0 B' `, K- B, z) K
! t3 n/ j) p( b7 w+ I; o
方法有了,剩下的就是写工具来搞定啦,人肉一个个查肯定要吐血的,安装python,复制如下代码到文件里,改名为py) b, Y- d1 l S+ x5 m
- import pandas as pd
- H [4 K: ^7 ?: w* k - import numpy
|$ w2 C. b7 ?* f$ b0 R - import ydcv' F# D$ K% T- Z6 A# M( A
- import sys
7 T8 x( Y9 i7 ^7 N, b4 ] - sys.path.append('./mdictlib')
|& X$ v4 N: X - from mdict_query import IndexBuilder
2 ]6 w3 t. l9 k3 U - builder = IndexBuilder('./Collins.mdx')
n+ x. @0 m. T+ N3 o4 ~
7 `7 ?# l5 x0 F! J8 u1 {- def has_explains(result):
" z% D% |& m! y, z5 e E, R - return ('basic' in result) and ('explains' in result['basic'])0 m, v8 a1 v2 B, L {: D1 W9 T" |" ~
( n& k7 N1 L/ ]6 P8 z/ Z2 f: D) Y- def get_explian_from_result(result):
9 O+ S+ N* F( K - if not has_explains(result):* Z$ S6 G! \5 y& J$ Q
- return ''. c5 z C( r$ x) `6 W
- return ';'.join(result['basic']['explains'])2 B* j" t( N! w, P z( G$ j) W
. k1 [: `& q0 v- [) {- def translate_from_yd(word):
2 j/ p: }. b# r - result = ydcv.lookup_word_inner(word)- E `3 O3 L+ b, P- w5 _7 k! I( T' q
- return result
0 w; |5 i/ x$ V6 C! r; g5 b
& f& K& P& J6 n$ v- def if_in_collins(word):' u8 I$ `1 [; i( a3 I/ o& Z
- return len(builder.mdx_lookup(word)) > 0, D8 `. G& G" G- }
- 1 M. m' B" s: e3 e* g
- df1 = pd.read_csv('./2018.12.20-wordbook-neat.txt',names=['worlds'])& j0 M4 W* M+ k; s
- df1 = df1.sort_values(by = 'worlds')( x* C; s$ r- V3 a
- df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))
6 t, j+ X8 }' { - df1['expalins'] = df1['yd_explain'].apply(get_explian_from_result)9 r, Z' F R0 ~* e/ f; D
- origin_word = df1['expalins'].str.extractall(r'[(\(]([a-z]+)的.*[)\)]').unstack()
/ G* E+ d: n7 D9 j, }# s L - df2 = df1.copy()
F. q& ]; u5 g' Y6 [ - df2.loc[list(origin_word[0].index)] = origin_word[0]2 E Z* x+ Q Y" l6 G$ R3 H
- df2 = df2.reindex(columns=['worlds','expalins'])
. g! z4 r: U( {' Y" _. I - df2 = df2.drop_duplicates('worlds')
' D' |0 N) U- V1 R' A. A - df_not_in_collins = df2[df2['worlds'].apply(lambda x: if_in_collins(x))]
: z: T F2 f* B) H8 O8 |$ I - 8 K& ~: }* u, V% Q6 l/ x) C
- df1.to_json('./words_queried_by_youdao.json')
( T' q* {1 M3 o$ v - df_not_in_collins.to_csv('./df_not_in_collins.csv')
- _. T" V, j' i9 j - 5 D* c, M! S8 ^, _# G3 ?' T
- df_not_in_collins['worlds'].to_csv('./neat_word_list.csv')0 I* {6 N1 U) j" I
复制代码 然后运行,就可以看到清洗过的单词啦。
6 S$ I0 W4 Q' C3 _ n* p9 W/ w! J/ d# \8 l; l
PS:这个工具需要有些依赖解决,有一定python基础的可以通过看导入的模块来猜出依赖。没有基础的不要着急,我有时间整理好后会放到github上,给小伙伴们提供使用。
, T1 ~6 l& F- Z除了依赖以外,需要自己有一个用于排除无效词的mdx文件,这里我用的是柯林斯词典。# O9 r8 x5 y3 a; V4 J6 y
- w7 l7 S, b: a6 Y; ?
So,enjoy
, H( Y, T- o& C0 _, Q1 m
$ ?5 R! B8 w* z+ ~======================================================================% c: q3 @" a* J( Q: W; k8 ^9 n5 V6 x
4 u6 M- z4 v1 N6 n- a
updae9 N* e: Y# o2 a6 a2 n; G' v
好像有朋友再尝试代码的时候遇到些问题,我深知调试别人代码是多么恶心的事情,为了节省各位的时间抽时间整理了一下代码放到了git hub上:
( v8 X) [0 Q, R7 U. s参见: https://github.com/zam5607822/word_book* V7 q* v) b# U1 Z
7 A- e9 X& ]! f: l: u( {9 ?
几点说明:# L% Y5 K2 j7 ^+ ^
1,由于我自己的环境是基于jupyter,所以也上传了ipynb文件,大家有喜欢用jupyter的也可以用这个。不使用jupyter的,直接使用wordbook.py即可。' o& u2 b$ x, j) ?- C3 }7 `$ R! ]
2,为了方便大家,增加了依赖说明文件:requirements.txt ,各位在第一次运行代码的时候,使用 pip install -r requirements.txt 安装一下依赖即可/ R: [" k. W7 ^0 L
3,为了方便大家测试,准备了一个示例生词本:2018.12.20-wordbook-neat.txt可以替换成你的9 F: q+ |' l, E, ~ ~# i
4, 同样也上传了一个默认词典文件:Collins.mdx
" v+ i X+ p* |+ {5, 有道词典的接口是需要一个token的,获取的方法可以自行百度,我的token被我隐藏掉了。自己获取到token后,替换掉ydcv.py文件中的28,29行 换成你的token。* ~2 D# G' ~/ t
" J1 J( c5 Q) U9 `1 N+ {6 p
enjoy! N) l. x8 m, f' O3 S7 P
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
3
查看全部评分
-
|