掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 3324|回复: 19

[经验交流] 再谈谈生词本

[复制链接]
  • TA的每日心情
    擦汗
    2019-11-13 23:25
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2019-1-9 14:37:20 | 显示全部楼层 |阅读模式
    本帖最后由 ipda_cluo 于 2019-1-10 10:21 编辑
      Z# Q6 j, b+ W+ a6 }4 `7 c0 B' q
    " {& l' S% p8 s: b" n今天真的是超级闲,再发一个我平时用来整理生词的工具,供大家借鉴。
    + J/ Z: W' Q$ e9 J/ o/ e$ z背景:
    . m. o( H& A5 X( z$ H我使用欧陆词典唯一的原因就是,这玩意带一个云端生词本,可以把我在手机上、电脑上,pad上看资料,看书等查过的单词记录下来。这就解决了我制作自己生词本的最基本攒词的问题了。+ Z& [3 U' k2 s% z5 W" ^% s: J- t
    攒了一段时间生词后,接下来就得背这些单词,我我是懒癌患者,指望我记笔记整理生词是不可能的。所以我选择了用知米背单词,扇贝单词这类app,把我的生词本导进去背诵,这样既省力,又容易坚持,还可以借用app所谓的“科学记忆法”。
    ' J% s6 [3 y! l" A& `( D! }但问题来了,如果有人看过自己查词记录就知道,查过的单词是需要整理的,没整理前的查词记录有这些问题:
    ) [; s' u, O! C& i) ~1,有些查过的单词根本不是单词,比如人名,比如拼写错误等等,把这些单词当做生词背下来那可真是天理不容。
    1 e5 [* x1 d8 H, t3 D) x# r6 I8 E2,很多单词各种变体,比如ing形式,ed形式等等。虽说有些时候背诵这种形式也很有用,但还是力气实在刀刃上,源词都没背下来,你去背ing形式干嘛?% i  ?- k  E5 b! c, f. h) F7 q+ }% A! m
    3,词频过低,有些单词可能是个组合词,或者使用率极低的词,及时背完了,以后一辈子都用不到,跟没背一样。也会忘记。
    ( E$ T* x$ a9 n; V" H+ X/ S" \4 \( u; S6 }4 a+ @# b$ p
    So,怎么解决呢?
    - x0 w) e3 E- F  V2 O) i. [
    5 p. F3 h9 L  i5 l1,导出生词本,这个大家研究一下欧陆词典,应该都会' A: N* |0 B: Q0 ]
    2,清洗生词本1 {# v! _1 ]/ Z/ v# X9 o
        a)去除不存在的词。方法比较简单,在词典里查一下,如果查不到,那就是不存在的词。# X. e& [7 c; @6 v; b
        b)还原到变体前形式,这个有意思了,混这个论坛里的 人 ,如果我和你们说说直接把单词后面的ing,ed字母去掉,肯定会骂我的。大家可还记得有道在线词典查这种词的结果?  {2 e5 K# D  C2 D+ c
    0 X* Z% n! j8 l& n; a+ Y0 R" ^
    看,对于这种单词,有道翻译后面一般都会有一个 xxx的yyy形式。对,这里xxx就是源词。
    - O- U# B' ?5 w/ ^+ T那剩下的就简单了,有道查一遍,找到那个xxx就可以啦。
    # }$ ^* V9 U2 |+ Q4 U5 ?2 N* v  c)去除重复,之前做了还原,肯定有很多重复的单词
    : U( a- c! J, S/ V  d) 根据词频排序,筛选- Z7 f% {* L" @3 b# o, }; N: j' t, @
          与去除单词方法一样,很多词典里面都包含了词频数据,找到后做个排序就可以了。8 f& P( g! X4 R9 l
    3, 导入到背单词工具里面,退出懒人模式,开背。8 q' g; w. U6 ?  `
    ; R! l/ l  v0 |' X' D
    方法有了,剩下的就是写工具来搞定啦,人肉一个个查肯定要吐血的,安装python,复制如下代码到文件里,改名为py3 u3 p4 y" M* ~) n3 X
    1. import pandas as pd
      2 ^. u% D8 g5 u, M2 T: u0 g+ R9 W& g
    2. import numpy
      ( C) w& b+ P1 D; }
    3. import ydcv
        o8 f8 A. E7 O0 ]8 S, S6 h
    4. import sys; g5 v- g0 N5 f. U
    5. sys.path.append('./mdictlib')$ Z; `8 Y) m8 L- L1 a* ^, S
    6. from mdict_query import IndexBuilder; y. B& @0 L  i6 o" p8 y! h
    7. builder = IndexBuilder('./Collins.mdx')
      % x: X6 B' D- g' G- t: i9 U

    8. 7 I1 L, ^9 X' ]
    9. def has_explains(result):  u% {) P5 M9 x1 \! U
    10.     return ('basic' in result) and ('explains' in result['basic'])
      0 ^$ b) J$ p' a" ]: l
    11. % }; d, L# A# h+ ~. [0 x7 A. l
    12. def get_explian_from_result(result):- y; o- {/ J3 ]3 Y+ v2 q* v) X
    13.     if not has_explains(result):
        L" F9 s+ X/ N$ q" D6 b' f6 v9 h
    14.         return ''
      ' a5 U9 z) ^. p
    15.     return ';'.join(result['basic']['explains'])  z2 I3 H! Z0 j( S
    16. 6 e" K4 j1 y* Q- G: R6 F' F
    17. def translate_from_yd(word):
      ' G( C9 s/ o" Z- Y$ D+ v
    18.     result = ydcv.lookup_word_inner(word)
      + |2 @5 d: X% T) u
    19.     return result$ [$ Q6 O! c/ g" b1 C

    20. 7 D* C2 l8 b: G: U% L- S
    21. def if_in_collins(word):7 L$ t8 x+ d: w0 J0 y
    22.     return len(builder.mdx_lookup(word)) > 0
      4 x) o  j7 d3 H; T' J' |- A
    23. 2 o' D& t  Z4 g
    24. df1 = pd.read_csv('./2018.12.20-wordbook-neat.txt',names=['worlds'])
        e1 N1 e9 m$ F# J8 L
    25. df1 = df1.sort_values(by = 'worlds'). z6 F/ w8 |' G8 f* j: s: u
    26. df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))) E8 u  L9 \8 l1 ]
    27. df1['expalins'] = df1['yd_explain'].apply(get_explian_from_result)
        P8 @0 A/ R0 ?0 a) H
    28. origin_word = df1['expalins'].str.extractall(r'[(\(]([a-z]+)的.*[)\)]').unstack()
        Z1 e; x- _3 r/ g+ q1 G. p
    29. df2 = df1.copy()( q% W+ D1 c9 c- n* Q0 i5 D$ z
    30. df2.loc[list(origin_word[0].index)] = origin_word[0]
      7 y9 J* [! i3 k% a6 u
    31. df2 = df2.reindex(columns=['worlds','expalins'])( F. y& ]  n6 a' b3 ^
    32. df2 = df2.drop_duplicates('worlds'), r2 B5 ?7 @2 {" x5 v( S
    33. df_not_in_collins = df2[df2['worlds'].apply(lambda x: if_in_collins(x))]
      / `$ p' ]( O" d* i, R2 Q4 Q
    34. 1 \2 i$ ], L* W9 ~- \4 L
    35. df1.to_json('./words_queried_by_youdao.json')
      ! E+ n3 a; E3 n; q( D! |( \
    36. df_not_in_collins.to_csv('./df_not_in_collins.csv')
      % n2 b  A# f* v
    37. ; F0 h& v# O- h  D1 ~# }
    38. df_not_in_collins['worlds'].to_csv('./neat_word_list.csv')4 ^9 M# t( V  P" p
    复制代码
    然后运行,就可以看到清洗过的单词啦。
    : a2 x( b% ?3 m; N4 Y7 p( o6 j! b" H, O& q* y
    PS:这个工具需要有些依赖解决,有一定python基础的可以通过看导入的模块来猜出依赖。没有基础的不要着急,我有时间整理好后会放到github上,给小伙伴们提供使用。
    ! Z  [1 T" R7 l" D0 c除了依赖以外,需要自己有一个用于排除无效词的mdx文件,这里我用的是柯林斯词典。
    ; C4 P! }/ _6 c" m& B; G
    % g% r; M1 [% O" P+ ]So,enjoy
    5 i& I: L/ C% C1 V& e* A6 V6 ]" b9 i7 P# K2 U9 j8 S
    ======================================================================* }, e6 E9 }7 y$ o4 ^# V& x& ~
    ! F% Q/ k5 y4 O0 x: Y& e! j$ E
    updae- }' ^, V' C* m9 o0 U' w- O
    好像有朋友再尝试代码的时候遇到些问题,我深知调试别人代码是多么恶心的事情,为了节省各位的时间抽时间整理了一下代码放到了git hub上:
    5 F- q, r, I6 h" M; @) o: ]! ^2 c4 U7 L参见: https://github.com/zam5607822/word_book# ^/ v/ a8 I* b. p
    5 f4 _8 f1 T& C# d
    几点说明:
    9 F# P8 P' D0 S* [: Z1,由于我自己的环境是基于jupyter,所以也上传了ipynb文件,大家有喜欢用jupyter的也可以用这个。不使用jupyter的,直接使用wordbook.py即可。0 U8 p% k- t) s
    2,为了方便大家,增加了依赖说明文件:requirements.txt ,各位在第一次运行代码的时候,使用 pip install -r requirements.txt 安装一下依赖即可3 }( u2 b8 b' T
    3,为了方便大家测试,准备了一个示例生词本:2018.12.20-wordbook-neat.txt可以替换成你的
    4 Y! b$ i  k3 ^  g# i! t5 g. Y- A  _6 P4, 同样也上传了一个默认词典文件:Collins.mdx
    * T# b5 `  K1 P9 q# h8 ^5, 有道词典的接口是需要一个token的,获取的方法可以自行百度,我的token被我隐藏掉了。自己获取到token后,替换掉ydcv.py文件中的28,29行 换成你的token。) S9 X( c$ w8 L% Q$ m

    % u) y3 S# a- \6 F4 v* Aenjoy9 w0 M" m7 J8 d; H- V# k

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x

    评分

    3

    查看全部评分

    本帖被以下淘专辑推荐:

  • TA的每日心情
    开心
    2020-7-4 14:24
  • 签到天数: 170 天

    [LV.7]常住居民III

    发表于 2019-1-9 15:06:54 | 显示全部楼层
    感谢楼主分享,先码住收藏一下,以后学习
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-1-9 15:47:40 | 显示全部楼层
    本帖最后由 jonah_w 于 2019-1-9 16:20 编辑 : O( E- X( L9 k3 q( x
    7 c( U3 @9 h& }- p8 E" x
    大赞代码流。
    ' o5 M' h" y% D9 i, h9 w# N! f4 J5 a$ x8 E) @
    不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过我在这篇帖子:【整理版】几种好玩的查词典方式+ W# l0 }2 ?0 S. ^9 c' d
    https://www.pdawiki.com/forum/thread-31879-1-1.html?x=294297 里分享的方法记录下来。但让我后续再洗数据,这个我就懒得做了(也没必要洗了,因为当初放进去的就是完美版)。
    6 z) g# M. k/ m/ e1 k1 d9 }$ i那么记录下来以后怎么办呢?我不会去用市面上的一些背单词软件。我的想法是想自己开发一个app,去从印象笔记里获取这些数据,然后展示,各种媒介上展示(这还只是想法,因为懒… 还没有去实施。)相当于自己做一个记单词软件的样子,但应该会有不同(具体怎么不同,就先不说了)。& P8 z$ c) Y9 d; T+ Q

    ; r' x2 Y" l$ V+ O" Q* e另外说下对背单词的看法,我觉得单词没必要特意背,只需要去查就好了,expose自己到词典的海洋里,我也不会逼迫自己当时必须记住,我只要求自己有一点印象就好了,后面要做的事情就是持续不断的expose自己到这些查过的单词。现在做的还不是很好,但想法就是上面的想法,一直还没有实施。
    2 N, @8 H8 v' f- n8 g' i3 k1 |, }) A% C+ j' @3 ]
    下一步就是把我这些年记在印象笔记里的1万多单词笔记合理利用起来。0 J. u& F* w5 x+ x" ^
    但一直懒…
    4 |/ ^2 b8 X4 R8 [  E) g3 A$ m# `" C# U( S8 w& A# U1 [) ?  F
    目前虽然回顾比较少,但好在一个单词如果真的重要一定会出现很多次的,查的次数多了自然就记住了。 / G' o# ~( O4 F; |* D9 _
    / f: Z) [, w) g' t) h

    . R8 G# D3 @. M* c( K& v: z( M; I1 d/ b  a; g" ^! n
    另外,我不喜欢欧路词典。
    , q5 E% L" X8 F( a& X& k
    5 D+ S0 \& N2 Z0 Y! b  X  [大爱 GoldenDict + EbMac + 深蓝" P( V+ R2 j6 c( N' t

    % q0 A& Z: E/ T" U* F5 W% `% Y. I 1 N4 O# k5 N6 Y4 a
    $ `3 v& `3 C! u' w
    & k) k) R# }! u3 }" R5 h
    bbs 该用户已被删除
    发表于 2019-1-9 16:01:01 | 显示全部楼层
    mdict_query  module 是不是该发上来?
  • TA的每日心情
    奋斗
    2022-11-9 12:44
  • 签到天数: 134 天

    [LV.7]常住居民III

    发表于 2019-1-9 16:39:14 | 显示全部楼层
    我倒是觉得无所谓,毕竟是少数情况。而且复习的时候也能明显看出。
  • TA的每日心情
    擦汗
    2019-11-13 23:25
  • 签到天数: 44 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-9 16:48:55 | 显示全部楼层
    bbs 发表于 2019-1-9 16:01
    ) D2 ~2 T" c& G% }mdict_query  module 是不是该发上来?
    . a# O2 V7 k1 `" E6 v
    git上的模块,可以自行下载:https://github.com/mmjang/mdict-queryhttps://github.com/felixonmars/ydcv
  • TA的每日心情
    擦汗
    2019-11-13 23:25
  • 签到天数: 44 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-9 16:56:03 | 显示全部楼层
    jonah_w 发表于 2019-1-9 15:47
    1 D  g" s# y$ n0 w" k+ Y: O大赞代码流。% S  w6 v# X8 O! C3 ?: h$ `$ {
    ! P4 _1 B$ }6 U" m$ o
    不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过 ...

    : W) \$ k" w- p1 ~: A* ^4 _, F# D我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:0 j; c4 J; H) v/ H! P8 A' X/ [. B6 o& r
    1,如果不想打断阅读思路一般会迅速撩一眼意思然后接着往下读。这种情况对于我来说会经常对所查的单词毫无意向。
    & Q9 U, f) W1 v' c( u( y5 k: D2,更重要的是,不会仔细回味琢磨单词的发音和发音结构。我个人认为单词发音是一定要弄清楚而且不可以出错的。7 l( V" Y1 {7 L3 s2 ]0 C- ?: }
    不过也无所谓啦,各有各的路。自己相信的路才是最好的
  • TA的每日心情
    擦汗
    2019-11-13 23:25
  • 签到天数: 44 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-9 17:04:26 | 显示全部楼层
    zhin 发表于 2019-1-9 16:39
    ; K) [( ]6 m/ ^2 T) Q' k8 r$ W  P% n我倒是觉得无所谓,毕竟是少数情况。而且复习的时候也能明显看出。

    ! o# L/ N3 U- p) w- r# d5 R开始我也是觉得无所谓的,后来发现十分影响心情~
    bbs 该用户已被删除
    发表于 2019-1-9 17:39:46 | 显示全部楼层
    ipda_cluo 发表于 2019-1-9 16:48  d5 G& {+ K- K; L6 X: r5 S
    git上的模块,可以自行下载:https://github.com/mmjang/mdict-query , https://github.com/felixonmars ...
    0 O5 c4 w! w9 p( p
    奇怪了。如下报错。# F/ U7 u6 ~7 B' O0 S# J) I
    ! @2 k& O; g% x% u4 N5 A
    Traceback (most recent call last):  j7 V' J! Q( z4 p) g1 k5 Q) y3 m; Q
      File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <module>
    % s4 D% D9 L0 R6 p& h8 H3 q7 \    df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))
    9 }& @% }1 f. [* b& L* Q  File "D:\Python27\lib\site-packages\pandas\core\series.py", line 3194, in apply
    " O/ t5 `  q: G$ U) D    mapped = lib.map_infer(values, f, convert=convert_dtype)
    / v4 e, T( J7 W! ~  File "pandas/_libs/src\inference.pyx", line 1472, in pandas._libs.lib.map_infer) o! }$ R0 w; W
      File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <lambda>
    : O5 @# v0 m$ V' b    df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))- z- i* J( `6 U5 F" ~
      File "C:\Users\Administrator\Desktop\words\words.py", line 24, in translate_from_yd7 E% R/ v( q. q* i  F- f1 X' q7 L4 {
        result = ydcv.lookup_word_inner(word)
    0 h% f2 h/ p) ~/ AAttributeError: 'module' object has no attribute 'lookup_word_inner'
  • TA的每日心情
    开心
    2019-12-17 15:32
  • 签到天数: 384 天

    [LV.9]以坛为家II

    发表于 2019-1-9 17:57:46 | 显示全部楼层
    这个思路不错,手动整理一大堆生词确实花时间。
  • TA的每日心情
    开心
    2019-5-14 00:10
  • 签到天数: 88 天

    [LV.6]常住居民II

    发表于 2019-1-9 18:11:34 | 显示全部楼层
    点赞!存着以后用
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    发表于 2019-1-9 18:17:42 | 显示全部楼层
    ipda_cluo 发表于 2019-1-9 16:56
    5 |# M! I# k# R# A, n( ]3 J我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:
    : g7 W( Q% h; w0 @; G& i8 o. ]1,如果不想打断阅读思路一般会迅速撩一眼意 ...

    0 |. z  ~6 @3 o' j我主要靠上下文去判断一个生词的意思,不可能每个生词都去查的。这样也失去阅读的意义了。如果一个单词连续出现多次,那么我会查一查。
  • TA的每日心情
    奋斗
    2019-10-20 12:04
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2019-1-9 20:16:00 | 显示全部楼层
    厉害,小白过来学习
  • TA的每日心情
    擦汗
    2019-11-13 23:25
  • 签到天数: 44 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-10 10:23:07 | 显示全部楼层
    bbs 发表于 2019-1-9 17:39
    ! R, D& L! p1 ?% I奇怪了。如下报错。
    2 f! c: @) D3 {( t- v
    , Y+ T$ _6 P! x+ U. aTraceback (most recent call last):

    ( p: a: _9 ~) v) ~- a& W6 C% }  e已经传到了git上,可以在试试看。, f! n! A) |1 `! i1 e$ l
    这回能省点事情。
  • TA的每日心情
    开心
    2020-7-4 14:24
  • 签到天数: 170 天

    [LV.7]常住居民III

    发表于 2019-1-10 12:15:18 | 显示全部楼层
    请问大佬,为什么大家都不直接用欧路词典背单词呢
  • TA的每日心情
    奋斗
    2019-10-12 00:12
  • 签到天数: 353 天

    [LV.8]以坛为家I

    发表于 2019-1-10 14:49:27 | 显示全部楼层
    楼主,你这个代码的作用,是将变体单词自动还原成原形?

    该用户从未签到

    发表于 2019-1-10 21:01:54 | 显示全部楼层
    膜拜一下,但是,怎么把单词本导入扇贝呢?
  • TA的每日心情
    开心
    2020-10-5 19:12
  • 签到天数: 245 天

    [LV.8]以坛为家I

    发表于 2019-1-10 22:42:02 | 显示全部楼层
    不错的用法,谢谢楼主高手
  • TA的每日心情
    开心
    2019-4-29 02:49
  • 签到天数: 61 天

    [LV.6]常住居民II

    发表于 2019-1-11 20:45:24 | 显示全部楼层
    跟牛人学牛招!
  • TA的每日心情
    开心
    2019-1-14 10:01
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2019-1-13 16:22:30 | 显示全部楼层
    能自己编辑笔记,还能同步,也挺不错的
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2024-5-10 06:14 , Processed in 0.067045 second(s), 12 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

    快速回复 返回顶部 返回列表