掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 5150|回复: 19

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

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

    [LV.5]常住居民I

    发表于 2019-1-9 14:37:20 | 显示全部楼层 |阅读模式
    本帖最后由 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
    1. import pandas as pd
      $ i$ ~4 l% c  Q. J2 x: E" N
    2. import numpy- u5 a0 g+ L' z' _2 W& B. R
    3. import ydcv
      . x* M/ J& A7 ]$ l
    4. import sys; q( ^1 c, m4 `0 c  n; Y
    5. sys.path.append('./mdictlib')
      ' z$ x- L& U) m* `2 K
    6. from mdict_query import IndexBuilder
      4 s3 y2 ~2 t* H) [
    7. builder = IndexBuilder('./Collins.mdx')
      4 d4 {4 U% V7 d) f

    8. 0 @2 G! h" u7 R4 o  d
    9. def has_explains(result):
      2 ]5 P1 B2 o) _+ J
    10.     return ('basic' in result) and ('explains' in result['basic'])8 \6 I/ M7 y6 T5 E

    11. " X/ l, [. b6 J/ d8 A4 ]* U+ q
    12. def get_explian_from_result(result):
      ( z' o" u% a3 [& T# u. L" U
    13.     if not has_explains(result):
      ; q8 ]$ O3 t& o3 v% _
    14.         return '', Q" B( Q' ^' `: L
    15.     return ';'.join(result['basic']['explains'])" m$ Q9 r$ Y: w" t0 N1 e- r

    16. ; I3 A% _) p  ?3 M& t: J) y. k
    17. def translate_from_yd(word):4 ^+ D$ c# H6 a1 e- P5 Q) R
    18.     result = ydcv.lookup_word_inner(word)
      $ L$ S9 }8 [! y4 b
    19.     return result
      ' R9 O. n! [. @, Y* d
    20. $ p& _- w1 ^/ f2 n% j% W  R
    21. def if_in_collins(word):
      & ^3 H+ D8 R$ {4 m! ?% }4 X+ W8 }4 u
    22.     return len(builder.mdx_lookup(word)) > 0! t; N4 z6 W6 v+ R) |, L; P
    23. ) Y2 Y* |/ L' h, u& j: z: S
    24. df1 = pd.read_csv('./2018.12.20-wordbook-neat.txt',names=['worlds'])
      ' u1 ?* g" O1 R* j2 T: l1 X9 M
    25. df1 = df1.sort_values(by = 'worlds')
      6 m& d& Q- O7 e9 D6 c3 H
    26. df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x)): D4 h4 `" {; I3 j1 C
    27. df1['expalins'] = df1['yd_explain'].apply(get_explian_from_result)
      + z) Y' j  K9 Y; ^7 N# ~# Z
    28. origin_word = df1['expalins'].str.extractall(r'[(\(]([a-z]+)的.*[)\)]').unstack()+ K1 a! Z  h2 Z4 }6 s
    29. df2 = df1.copy()
      " W6 w3 H& U6 k" a& F
    30. df2.loc[list(origin_word[0].index)] = origin_word[0]
      4 X. C# Q" [. f; p1 X0 r
    31. df2 = df2.reindex(columns=['worlds','expalins']); e9 E: m% r" i
    32. df2 = df2.drop_duplicates('worlds')
      2 M' N0 `  l* n
    33. df_not_in_collins = df2[df2['worlds'].apply(lambda x: if_in_collins(x))]
      # Z% o1 \7 u) d
    34. * W( C' K8 }+ l/ q- d4 A
    35. df1.to_json('./words_queried_by_youdao.json')
      : Y5 L7 \, P8 [9 W5 R2 D9 Y
    36. df_not_in_collins.to_csv('./df_not_in_collins.csv')5 L' A3 b, n! x

    37. ) @4 a7 e! U1 J  P  S1 D
    38. 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

    查看全部评分

    本帖被以下淘专辑推荐:

  • 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 编辑 5 s& A6 E1 N  Z% {; N
    & T5 k7 d( F* I; c3 b+ e8 s
    大赞代码流。
    & G# Q2 q& a7 w) M3 b
    " Q9 `! y2 r4 Z' c8 ^( F不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过我在这篇帖子:【整理版】几种好玩的查词典方式
    4 ~$ }4 k5 o4 K$ l9 _, thttps://www.pdawiki.com/forum/thread-31879-1-1.html?x=294297 里分享的方法记录下来。但让我后续再洗数据,这个我就懒得做了(也没必要洗了,因为当初放进去的就是完美版)。; X0 D9 U' A; k( m) \
    那么记录下来以后怎么办呢?我不会去用市面上的一些背单词软件。我的想法是想自己开发一个app,去从印象笔记里获取这些数据,然后展示,各种媒介上展示(这还只是想法,因为懒… 还没有去实施。)相当于自己做一个记单词软件的样子,但应该会有不同(具体怎么不同,就先不说了)。( U( E; M  @! p7 C! D/ x
    9 v4 A/ v6 c% q3 X8 e5 ]
    另外说下对背单词的看法,我觉得单词没必要特意背,只需要去查就好了,expose自己到词典的海洋里,我也不会逼迫自己当时必须记住,我只要求自己有一点印象就好了,后面要做的事情就是持续不断的expose自己到这些查过的单词。现在做的还不是很好,但想法就是上面的想法,一直还没有实施。
    ; R! Y  _& E; l' G0 e& T: y* B9 S( B$ V% S- P+ a4 l
    下一步就是把我这些年记在印象笔记里的1万多单词笔记合理利用起来。
    + m; Q' i6 M2 e' l( t但一直懒… 4 Y1 d1 l: d4 g' e# A0 @) ~( j
      G# u8 Y7 [" {, Z7 r8 H: ]
    目前虽然回顾比较少,但好在一个单词如果真的重要一定会出现很多次的,查的次数多了自然就记住了。
    : E+ s( }( L. H5 \
    6 E* b" w' n/ _9 e2 \0 T: F2 V0 _. C5 b. c; S$ g$ E' G- [( A
    ' }& t8 F. L. m# g7 a4 }$ G
    另外,我不喜欢欧路词典。
    0 u: j8 e* G6 ^7 H" q& ?* c# h7 I1 w& L4 N
    大爱 GoldenDict + EbMac + 深蓝- P! b. g5 e7 }4 ]' T

    . v  J) @  a5 y* l8 X" l8 u + D' o  i" [" A3 o5 A# q5 c
    * q" ]/ `1 Y9 i$ O6 [% Z

    / P( B' t" _# N
    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- v; o% N5 f3 V/ i
    mdict_query  module 是不是该发上来?
    # R+ ]3 q% ?  t( E
    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
    7 G8 y7 Y: |1 Z2 N大赞代码流。$ D: Y/ l+ @' s& f) T4 b
    $ T6 O7 J! v$ D7 i
    不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过 ...
    $ _6 l/ q  x5 \( V% a7 n
    我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:
    8 K& @) ?- `! R, c) b0 L) d1,如果不想打断阅读思路一般会迅速撩一眼意思然后接着往下读。这种情况对于我来说会经常对所查的单词毫无意向。# k' C+ t& p$ R! A
    2,更重要的是,不会仔细回味琢磨单词的发音和发音结构。我个人认为单词发音是一定要弄清楚而且不可以出错的。
      h' G3 T$ _4 C: ~6 Y不过也无所谓啦,各有各的路。自己相信的路才是最好的
  • TA的每日心情
    擦汗
    2019-11-13 23:25
  • 签到天数: 44 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-9 17:04:26 | 显示全部楼层
    zhin 发表于 2019-1-9 16:391 `( P$ N$ J0 C# \  d; X( m
    我倒是觉得无所谓,毕竟是少数情况。而且复习的时候也能明显看出。
    ( ?) G9 v: L, G# i
    开始我也是觉得无所谓的,后来发现十分影响心情~
    bbs 该用户已被删除
    发表于 2019-1-9 17:39:46 | 显示全部楼层
    ipda_cluo 发表于 2019-1-9 16:480 u( _/ Z. ~" P+ J, N
    git上的模块,可以自行下载:https://github.com/mmjang/mdict-query , https://github.com/felixonmars ...
    9 `, G% N) ~. K1 w
    奇怪了。如下报错。
    1 u& Z0 c2 F* z
    % }( [; g3 `+ l5 u% X  f) LTraceback (most recent call last):
      R8 P; i) w. }- F& Q  File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <module>
    , y. n: B9 h* [0 n8 b& j/ o" U    df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))& [# w5 g' ~  n; `, |, A7 S
      File "D:\Python27\lib\site-packages\pandas\core\series.py", line 3194, in apply5 _+ ^  n. w3 ~/ ]5 I' v
        mapped = lib.map_infer(values, f, convert=convert_dtype)' r; m9 Y- u. @' i5 D2 Y( ?, D( w
      File "pandas/_libs/src\inference.pyx", line 1472, in pandas._libs.lib.map_infer
    ) q& C+ O) D; x+ Y# [! E  File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <lambda>1 A( x+ M7 D* p5 I1 u. v, ~' o8 F
        df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))7 }) O! m  ?: ~& H$ k, d
      File "C:\Users\Administrator\Desktop\words\words.py", line 24, in translate_from_yd
    2 M" B$ ^# b' r  ?  \8 I3 z) x    result = ydcv.lookup_word_inner(word)9 d" \  B' s$ F2 l/ v# R% C% O
    AttributeError: '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
    2 J0 w) N' g3 @8 S& ^7 y我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:
    7 \' [' H- D; Y; E" B! w1,如果不想打断阅读思路一般会迅速撩一眼意 ...
    8 q3 x/ s) p+ o) h7 V$ {* z/ ?
    我主要靠上下文去判断一个生词的意思,不可能每个生词都去查的。这样也失去阅读的意义了。如果一个单词连续出现多次,那么我会查一查。
  • 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:395 F$ l3 V: p7 K/ A3 E- _2 @* d9 U3 I
    奇怪了。如下报错。
    : |' X3 s6 x& y) t1 P1 I7 ^' D6 J- Y: S  W9 f
    Traceback (most recent call last):

    ( B  ~3 z. m8 }2 l' x2 [3 ~1 d* I已经传到了git上,可以在试试看。2 A& p! ^$ d4 o; y) i' r
    这回能省点事情。
  • 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, 2025-7-2 09:59 , Processed in 0.025477 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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