TA的每日心情 | 擦汗 2019-11-13 23:25 |
|---|
签到天数: 44 天 [LV.5]常住居民I
|
本帖最后由 ipda_cluo 于 2019-1-10 10:21 编辑 % Q8 ?. a) `( s( h! F9 o
( ]9 j2 z" ~& P0 U, B
今天真的是超级闲,再发一个我平时用来整理生词的工具,供大家借鉴。7 T, q4 B/ ~. F. ~
背景:7 Q/ @4 [" L+ |3 g; O$ z
我使用欧陆词典唯一的原因就是,这玩意带一个云端生词本,可以把我在手机上、电脑上,pad上看资料,看书等查过的单词记录下来。这就解决了我制作自己生词本的最基本攒词的问题了。' e5 o: |) s4 M
攒了一段时间生词后,接下来就得背这些单词,我我是懒癌患者,指望我记笔记整理生词是不可能的。所以我选择了用知米背单词,扇贝单词这类app,把我的生词本导进去背诵,这样既省力,又容易坚持,还可以借用app所谓的“科学记忆法”。0 o7 T8 ]9 d7 d0 E& \2 X* w2 d
但问题来了,如果有人看过自己查词记录就知道,查过的单词是需要整理的,没整理前的查词记录有这些问题:$ v5 _' C2 J) w! I: {
1,有些查过的单词根本不是单词,比如人名,比如拼写错误等等,把这些单词当做生词背下来那可真是天理不容。+ W- V( _6 H. [* c
2,很多单词各种变体,比如ing形式,ed形式等等。虽说有些时候背诵这种形式也很有用,但还是力气实在刀刃上,源词都没背下来,你去背ing形式干嘛?0 M0 g& L' \1 b# L! D
3,词频过低,有些单词可能是个组合词,或者使用率极低的词,及时背完了,以后一辈子都用不到,跟没背一样。也会忘记。
8 e1 q# Q0 L9 ^! ~* c; d( {7 f! ` |9 d6 i
So,怎么解决呢?% f. M) N8 Y* T+ X/ Y
; _, q$ t- I7 \1,导出生词本,这个大家研究一下欧陆词典,应该都会
* y( Z& T8 P+ [3 v$ _# z5 {$ ?2,清洗生词本# y2 S: ], \# x z
a)去除不存在的词。方法比较简单,在词典里查一下,如果查不到,那就是不存在的词。
, P+ ?6 f, [5 l* d b)还原到变体前形式,这个有意思了,混这个论坛里的 人 ,如果我和你们说说直接把单词后面的ing,ed字母去掉,肯定会骂我的。大家可还记得有道在线词典查这种词的结果?
3 r0 Y: ?& U* j! N+ g! j+ X( m0 K4 t' g% r
看,对于这种单词,有道翻译后面一般都会有一个 xxx的yyy形式。对,这里xxx就是源词。: } X: ?- K9 A$ K) e t
那剩下的就简单了,有道查一遍,找到那个xxx就可以啦。
5 I/ i3 t3 ~6 c; j5 p, m9 l. ]/ Q c)去除重复,之前做了还原,肯定有很多重复的单词# H1 D7 n7 ]# l! I* J1 _# s
d) 根据词频排序,筛选
! W# W D$ }/ Q! ?7 F 与去除单词方法一样,很多词典里面都包含了词频数据,找到后做个排序就可以了。
! A6 {" p9 L# d: i- A4 r6 X0 \5 x! v3, 导入到背单词工具里面,退出懒人模式,开背。
4 B- l$ G& m+ l G' b6 X, i. P' t$ F5 I) u! |2 h' G
方法有了,剩下的就是写工具来搞定啦,人肉一个个查肯定要吐血的,安装python,复制如下代码到文件里,改名为py
5 x" d5 W3 ~) U$ A( m; p- import pandas as pd
& ^! y) m+ |8 M' k, ?3 ? - import numpy
6 v- w6 G; J" i, p- z2 k" P - import ydcv
% N5 Q) }( X8 Q% e - import sys# I. g2 j M, n. G" B3 }3 @' s, Q; k
- sys.path.append('./mdictlib')& M% x- q+ [# g1 I! ^6 o. j* Y
- from mdict_query import IndexBuilder
1 } h( V7 F3 v, ` - builder = IndexBuilder('./Collins.mdx')( K+ L, p6 \7 k3 t& a
- T+ F0 h z! @$ g! `! J% f3 @6 L- def has_explains(result):% y" H: ]/ {! P7 y; M% q' n' e; H
- return ('basic' in result) and ('explains' in result['basic']); b4 }! c* @" g0 O- i/ |- C
- 7 I3 @& k7 _) Y% w1 w
- def get_explian_from_result(result):( h# { n( C6 f) z; i2 L1 B
- if not has_explains(result):
3 t. b1 H2 ?, n2 G. l/ X, P. B - return ''
$ k+ Y* \7 {1 [1 b - return ';'.join(result['basic']['explains']): ^+ H" C+ w8 q0 {" e* a8 a8 s
- 7 t0 `2 e3 M. x, Y# \2 w
- def translate_from_yd(word):
$ @8 z2 ?/ Z8 T3 d - result = ydcv.lookup_word_inner(word)
& Y! w# n* e0 L0 f9 L, M - return result9 L' T- h' f: D4 p8 @
( O1 U0 S3 ~, W7 D- def if_in_collins(word):
9 [4 p4 \8 n/ b - return len(builder.mdx_lookup(word)) > 07 b- d8 d H* A
- R; I/ R' i9 b4 ^( D: i6 g7 k
- df1 = pd.read_csv('./2018.12.20-wordbook-neat.txt',names=['worlds'])3 e* V" G8 E8 t: Y' I$ z0 y
- df1 = df1.sort_values(by = 'worlds')) _1 X# x6 c" X
- df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))2 [$ h, h; j; D/ C6 X4 t% g: K
- df1['expalins'] = df1['yd_explain'].apply(get_explian_from_result)
. F( t" X1 _1 v1 Z2 @ - origin_word = df1['expalins'].str.extractall(r'[(\(]([a-z]+)的.*[)\)]').unstack()1 @3 R( [5 Y. C" f( [
- df2 = df1.copy()/ D/ r! w6 f* |/ O( T
- df2.loc[list(origin_word[0].index)] = origin_word[0]( {/ Q; D' G. m/ ]) C/ F3 w# y8 i( c
- df2 = df2.reindex(columns=['worlds','expalins'])- S+ s2 ]; h& ?9 t2 S& b
- df2 = df2.drop_duplicates('worlds')
% L* a! l3 ~6 S+ W - df_not_in_collins = df2[df2['worlds'].apply(lambda x: if_in_collins(x))]$ D( _$ h6 c% J- n: @% L" h
- - i y% l7 S$ a0 F5 r$ `
- df1.to_json('./words_queried_by_youdao.json')
* g6 M8 J; R/ l5 L6 z - df_not_in_collins.to_csv('./df_not_in_collins.csv')% H; J4 B/ C! Q* P9 S
- * r- s- X5 u, X/ N. O7 X1 g Z; h
- df_not_in_collins['worlds'].to_csv('./neat_word_list.csv')
/ F6 }; h/ Y# e3 Y. B, a4 _
复制代码 然后运行,就可以看到清洗过的单词啦。! s5 r* q9 k: \# q9 J- R& c
' v. b. S( {/ w. h* A+ B& s
PS:这个工具需要有些依赖解决,有一定python基础的可以通过看导入的模块来猜出依赖。没有基础的不要着急,我有时间整理好后会放到github上,给小伙伴们提供使用。
& b+ W( A" Y" H+ U3 Z, @. a( L* f& o除了依赖以外,需要自己有一个用于排除无效词的mdx文件,这里我用的是柯林斯词典。2 ^8 N6 ~' V' l
" z% Z/ U# H: T+ |3 T* ZSo,enjoy; e8 `: |6 ^- C* b
. s; A6 D7 X* V4 N% X# u+ T) n7 u======================================================================
3 N& k, K9 C, ~7 u9 L }# F9 {
/ p5 r/ C* Z, N, J& b6 _3 \2 f3 ]updae! u9 `$ U9 {1 s* S/ X$ U+ g: ^
好像有朋友再尝试代码的时候遇到些问题,我深知调试别人代码是多么恶心的事情,为了节省各位的时间抽时间整理了一下代码放到了git hub上:
/ I; q H0 P* m; R. J- _参见: https://github.com/zam5607822/word_book
2 O/ Y$ c A4 J2 L& ]
8 u8 H$ ^$ f- c. d( F6 M% b几点说明:
E0 ]- A& G) w1,由于我自己的环境是基于jupyter,所以也上传了ipynb文件,大家有喜欢用jupyter的也可以用这个。不使用jupyter的,直接使用wordbook.py即可。
8 A2 H% q' [: \2,为了方便大家,增加了依赖说明文件:requirements.txt ,各位在第一次运行代码的时候,使用 pip install -r requirements.txt 安装一下依赖即可
" Y% [7 t* V1 _3,为了方便大家测试,准备了一个示例生词本:2018.12.20-wordbook-neat.txt可以替换成你的. l: q7 D& c* \/ z
4, 同样也上传了一个默认词典文件:Collins.mdx ! A* R& U; N4 h5 t) f, }& M) |; ? q, v
5, 有道词典的接口是需要一个token的,获取的方法可以自行百度,我的token被我隐藏掉了。自己获取到token后,替换掉ydcv.py文件中的28,29行 换成你的token。
) |! Y2 L b5 p4 U+ z+ ^$ t0 e
, W6 M) s$ {, l. Venjoy& f" c( ?& ^, b. j1 g6 \1 A
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
3
查看全部评分
-
|