掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 6982|回复: 19

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

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

    [LV.5]常住居民I

    发表于 2019-1-9 14:37:20 | 显示全部楼层 |阅读模式
    本帖最后由 ipda_cluo 于 2019-1-10 10:21 编辑
    $ R' Y4 d, l. j9 U  `$ d; @; B: R: `* Q5 b; e; Y% f: N
    今天真的是超级闲,再发一个我平时用来整理生词的工具,供大家借鉴。& ~: V, h# }* _2 f1 x1 H6 C
    背景:
    / t. V& X# n  Y9 ~+ [我使用欧陆词典唯一的原因就是,这玩意带一个云端生词本,可以把我在手机上、电脑上,pad上看资料,看书等查过的单词记录下来。这就解决了我制作自己生词本的最基本攒词的问题了。5 x+ e) K5 Y, }5 d3 q3 a8 C
    攒了一段时间生词后,接下来就得背这些单词,我我是懒癌患者,指望我记笔记整理生词是不可能的。所以我选择了用知米背单词,扇贝单词这类app,把我的生词本导进去背诵,这样既省力,又容易坚持,还可以借用app所谓的“科学记忆法”。
      T" ~+ y# e0 k1 l: Y) x但问题来了,如果有人看过自己查词记录就知道,查过的单词是需要整理的,没整理前的查词记录有这些问题:; ^+ l; p& D0 U) I* o" m; M0 b: d
    1,有些查过的单词根本不是单词,比如人名,比如拼写错误等等,把这些单词当做生词背下来那可真是天理不容。0 H/ W2 {2 |& M* Y- f
    2,很多单词各种变体,比如ing形式,ed形式等等。虽说有些时候背诵这种形式也很有用,但还是力气实在刀刃上,源词都没背下来,你去背ing形式干嘛?
    $ X) U& h* `: G3 z! Q8 x6 D: {3,词频过低,有些单词可能是个组合词,或者使用率极低的词,及时背完了,以后一辈子都用不到,跟没背一样。也会忘记。6 Y0 m3 B0 k- A# `2 ?2 t

    . x1 D8 V4 z* M% c+ s# S3 R' o. zSo,怎么解决呢?
    ; E- G# N9 R. P. K) r6 z- a
    ) [) _# ~7 Q6 U  ~1,导出生词本,这个大家研究一下欧陆词典,应该都会9 F8 X* |8 C# o/ J3 w% D
    2,清洗生词本
    " S: W& W$ d' b% a( l3 F  i7 H    a)去除不存在的词。方法比较简单,在词典里查一下,如果查不到,那就是不存在的词。
      x6 r' g+ {. \2 N    b)还原到变体前形式,这个有意思了,混这个论坛里的 人 ,如果我和你们说说直接把单词后面的ing,ed字母去掉,肯定会骂我的。大家可还记得有道在线词典查这种词的结果?
    . u2 y0 ^2 b' D! ]7 o: b! n7 g6 ~) ^0 m6 f: P1 Q. |! e+ W
    看,对于这种单词,有道翻译后面一般都会有一个 xxx的yyy形式。对,这里xxx就是源词。8 {8 l6 }1 \3 A0 R. p9 u: ~8 N
    那剩下的就简单了,有道查一遍,找到那个xxx就可以啦。7 C' }# K: y8 V, ~+ K
      c)去除重复,之前做了还原,肯定有很多重复的单词
    . U2 ^; |. p. I  d) 根据词频排序,筛选
    ; g4 k; P0 j7 K" J      与去除单词方法一样,很多词典里面都包含了词频数据,找到后做个排序就可以了。7 H4 D& i0 \6 v1 S6 F
    3, 导入到背单词工具里面,退出懒人模式,开背。
    : ^  V7 p9 m: W4 ]! N  H" I( U9 r& f4 T' g" \) |
    方法有了,剩下的就是写工具来搞定啦,人肉一个个查肯定要吐血的,安装python,复制如下代码到文件里,改名为py. H2 l! o6 s" e9 Q
    1. import pandas as pd
      ( c: n2 L+ q7 Z3 C2 o/ S
    2. import numpy% \  p" q  l# D; t- G) o; A$ e, T
    3. import ydcv6 P! z. E+ K: s, N8 i( w0 a
    4. import sys
      6 l" t9 w$ t/ |6 A
    5. sys.path.append('./mdictlib')8 I8 T. S' g& W3 H
    6. from mdict_query import IndexBuilder
      / M* R0 E% _, ^4 A
    7. builder = IndexBuilder('./Collins.mdx')& j+ b3 B8 s. E" {' }: K

    8. # {1 p" j4 n8 P+ k- Q3 Z/ |
    9. def has_explains(result):1 f' `. @3 ]5 w' O
    10.     return ('basic' in result) and ('explains' in result['basic'])
      6 K* h8 F- }0 G7 ?+ ~  W. D) ]
    11. $ O3 }8 b9 H; ^& q' Z4 V
    12. def get_explian_from_result(result):
      / }/ }8 i4 ^* d& ?2 Z
    13.     if not has_explains(result):
      8 i) m2 c. @5 }) `% ^, `$ J
    14.         return ''
      " `7 Z$ }( I5 L+ q2 i" S" m/ [
    15.     return ';'.join(result['basic']['explains'])4 r* o' H1 o0 j! w
    16. ) T; x* g0 o$ C7 i7 p6 h
    17. def translate_from_yd(word):) w9 R. @4 m$ E5 @+ w2 q
    18.     result = ydcv.lookup_word_inner(word)
      # V/ ~: U# N3 q+ F' {6 K, k
    19.     return result" q2 T; s; F# c2 w, U

    20. ! R" v% w; e; w  n
    21. def if_in_collins(word):
      + E. c/ F6 v& L6 j( E. w) _
    22.     return len(builder.mdx_lookup(word)) > 00 h) o2 ]1 c4 W7 c4 {2 Y1 a

    23. : V. c. k! B; E  S. _7 z
    24. df1 = pd.read_csv('./2018.12.20-wordbook-neat.txt',names=['worlds'])  j  a  X% D/ s5 Z4 P* \7 G
    25. df1 = df1.sort_values(by = 'worlds')
      , i2 p, N3 Y4 |$ S" C8 y
    26. df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))
      8 G5 B9 A- ~3 h: D3 }, r$ x$ [
    27. df1['expalins'] = df1['yd_explain'].apply(get_explian_from_result)
      . {; r+ ^9 A$ R5 y1 h
    28. origin_word = df1['expalins'].str.extractall(r'[(\(]([a-z]+)的.*[)\)]').unstack()
      2 n3 @' Q; ~- s$ C& |9 ]& W7 _
    29. df2 = df1.copy()
      $ k3 F% ?: e0 l, w: I3 P
    30. df2.loc[list(origin_word[0].index)] = origin_word[0]8 J) n' Z8 [- K; b' z
    31. df2 = df2.reindex(columns=['worlds','expalins'])
      . O  }# M+ @" }- t/ N
    32. df2 = df2.drop_duplicates('worlds'), a9 f0 a. L! n, ]! n1 T! g
    33. df_not_in_collins = df2[df2['worlds'].apply(lambda x: if_in_collins(x))]4 q! z8 b, y$ K+ S  F4 a
    34. ) D1 U' D, o0 P2 c7 J
    35. df1.to_json('./words_queried_by_youdao.json'): e5 m: z2 _& T$ C+ Y+ Y2 j
    36. df_not_in_collins.to_csv('./df_not_in_collins.csv'); V- ^1 ]5 x, A* o$ |
    37. 1 O3 Y6 B$ b% `: W- g
    38. df_not_in_collins['worlds'].to_csv('./neat_word_list.csv')
      9 g. u; t% M" J" j4 q4 R3 m4 @
    复制代码
    然后运行,就可以看到清洗过的单词啦。8 N: ^7 f9 v# g, |
    9 R1 h4 M0 x" \+ i9 G* _
    PS:这个工具需要有些依赖解决,有一定python基础的可以通过看导入的模块来猜出依赖。没有基础的不要着急,我有时间整理好后会放到github上,给小伙伴们提供使用。
    7 a( _5 L& ^5 V: `3 \( Q# r除了依赖以外,需要自己有一个用于排除无效词的mdx文件,这里我用的是柯林斯词典。
    9 O  E3 Q3 \% j/ V& f5 e+ o$ V0 D" m
    So,enjoy
      [1 l. s+ H" P/ o8 Q
    8 ]& O0 \) ^& \======================================================================% z+ w  Q+ c/ C( t1 L) O

    2 E" {0 r. y5 \$ B: gupdae6 B# F2 g/ `5 i: A* ~
    好像有朋友再尝试代码的时候遇到些问题,我深知调试别人代码是多么恶心的事情,为了节省各位的时间抽时间整理了一下代码放到了git hub上:
    # ]: _/ R5 E& I1 L6 A2 o参见: https://github.com/zam5607822/word_book1 E) e2 M  O$ D7 C

    3 f  p9 ]% D" R5 R% f  ~几点说明:
    % \0 S7 P$ T/ p" L3 Y' {1,由于我自己的环境是基于jupyter,所以也上传了ipynb文件,大家有喜欢用jupyter的也可以用这个。不使用jupyter的,直接使用wordbook.py即可。5 B6 ]# W/ B4 ~6 }- \4 m
    2,为了方便大家,增加了依赖说明文件:requirements.txt ,各位在第一次运行代码的时候,使用 pip install -r requirements.txt 安装一下依赖即可
    6 {: \. t2 h5 i  \) Q3,为了方便大家测试,准备了一个示例生词本:2018.12.20-wordbook-neat.txt可以替换成你的" g& f8 @6 ?9 W" ~1 a3 M7 s8 N
    4, 同样也上传了一个默认词典文件:Collins.mdx 2 J6 }& Q7 Y- t9 I" d5 r
    5, 有道词典的接口是需要一个token的,获取的方法可以自行百度,我的token被我隐藏掉了。自己获取到token后,替换掉ydcv.py文件中的28,29行 换成你的token。
    - k+ f9 ~+ h9 B8 E5 l* x* p2 N
    ' i9 X/ q6 G5 Y9 |2 M& E. Z# v  R! P; benjoy
      f$ Q( J( M! a* Y# q. `

    本帖子中包含更多资源

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

    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 编辑
    3 v. A( T. T5 M2 j9 d! Z
    8 ]# ?; P' f4 _7 ]4 ~" R大赞代码流。; s3 |7 u$ R# E& e% F5 W- i
    + Q1 x: D3 U1 h; g6 J5 M
    不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过我在这篇帖子:【整理版】几种好玩的查词典方式) O+ `) k4 Y5 I1 @! X" ?  p4 R; I
    https://www.pdawiki.com/forum/thread-31879-1-1.html?x=294297 里分享的方法记录下来。但让我后续再洗数据,这个我就懒得做了(也没必要洗了,因为当初放进去的就是完美版)。
    # L9 n' [- w4 Z那么记录下来以后怎么办呢?我不会去用市面上的一些背单词软件。我的想法是想自己开发一个app,去从印象笔记里获取这些数据,然后展示,各种媒介上展示(这还只是想法,因为懒… 还没有去实施。)相当于自己做一个记单词软件的样子,但应该会有不同(具体怎么不同,就先不说了)。
    1 e0 s; n) N- t7 Z. l3 x: g  ~
    另外说下对背单词的看法,我觉得单词没必要特意背,只需要去查就好了,expose自己到词典的海洋里,我也不会逼迫自己当时必须记住,我只要求自己有一点印象就好了,后面要做的事情就是持续不断的expose自己到这些查过的单词。现在做的还不是很好,但想法就是上面的想法,一直还没有实施。
    0 f5 S' Q! \9 E/ q% C! X
    % J; w9 O1 w* H! W下一步就是把我这些年记在印象笔记里的1万多单词笔记合理利用起来。
    * @( b7 m9 H5 W, W9 L但一直懒…
    9 w  W; B+ t: m2 `: f; `5 M2 D  X) l- G# b1 C/ o; y+ g5 Y% I/ W$ M
    目前虽然回顾比较少,但好在一个单词如果真的重要一定会出现很多次的,查的次数多了自然就记住了。
    # h( k9 w5 a2 z4 F9 c0 x
    9 l' e) C+ \4 M. {
    ( |# s& _" ]# y4 ^! d! }3 e9 l, y$ x3 x! [' @( S
    另外,我不喜欢欧路词典。2 h5 v( Q7 v& F8 g, ~. E$ ?

    " G. F  p2 \4 i: J: M大爱 GoldenDict + EbMac + 深蓝
    ' i* I( a. L5 K4 }& z" p0 k) s* s" L3 [
    ) }8 x+ w* `7 _) x& r+ w& e) {
    0 |% @* g* r* T4 T; u

    ; w/ V) ^8 U. {- p* \/ g
    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:016 w* }" N: O+ Z+ V4 M+ O
    mdict_query  module 是不是该发上来?

    , O5 ~9 `2 w6 H, Tgit上的模块,可以自行下载: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:476 Y! c0 P% L/ I% ~, [& N% n! k
    大赞代码流。
    . h: Y8 M6 O6 \) P, o- Q: R2 p- `$ e& U8 q, e+ U# I' _8 a
    不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过 ...

    3 t* H: G, m# Z' e6 n' T我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:5 ]) t8 |) J7 \
    1,如果不想打断阅读思路一般会迅速撩一眼意思然后接着往下读。这种情况对于我来说会经常对所查的单词毫无意向。
    6 V3 q# H' w3 Q3 ~/ `2,更重要的是,不会仔细回味琢磨单词的发音和发音结构。我个人认为单词发音是一定要弄清楚而且不可以出错的。
    # Y2 f0 t4 ]7 ~& q' o7 T不过也无所谓啦,各有各的路。自己相信的路才是最好的
  • TA的每日心情
    擦汗
    2019-11-13 23:25
  • 签到天数: 44 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-9 17:04:26 | 显示全部楼层
    zhin 发表于 2019-1-9 16:39
    % W3 W4 F6 f& }" d  ?我倒是觉得无所谓,毕竟是少数情况。而且复习的时候也能明显看出。
    ' Z3 T$ e& O0 N( n" ?' O! w* F
    开始我也是觉得无所谓的,后来发现十分影响心情~
    bbs 该用户已被删除
    发表于 2019-1-9 17:39:46 | 显示全部楼层
    ipda_cluo 发表于 2019-1-9 16:48/ N0 R+ r% K- a. i8 R" s) @
    git上的模块,可以自行下载:https://github.com/mmjang/mdict-query , https://github.com/felixonmars ...

    $ u, P% h9 c7 v* W' a0 |! u奇怪了。如下报错。7 t+ V( x- A" n, T2 k  h6 C

    / a# P3 W6 Z; zTraceback (most recent call last):" ^1 O( X1 Y( W4 A) I; B
      File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <module>6 ], U! D# D8 P1 b+ I4 G+ k/ q
        df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))& ]2 ]& U1 |, \: c* }/ Y
      File "D:\Python27\lib\site-packages\pandas\core\series.py", line 3194, in apply6 S, w; G# a3 G% T" A" R- U' c
        mapped = lib.map_infer(values, f, convert=convert_dtype)
    " k* T6 V& V" m4 H* K- }: M  File "pandas/_libs/src\inference.pyx", line 1472, in pandas._libs.lib.map_infer% A" E5 Y$ a; k6 p+ T2 H) y
      File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <lambda>
    ( g, f6 p% e3 T6 D4 A2 K    df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))
    0 W2 G& p% e- B2 v, n3 g7 m  File "C:\Users\Administrator\Desktop\words\words.py", line 24, in translate_from_yd
    / y/ F, E* k$ a- l2 \# T    result = ydcv.lookup_word_inner(word)3 H* `. ^* |% r! V
    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
    7 g) f7 j! L9 j5 A2 ]我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:
    5 ]( G- _; v$ a& F/ C7 F1,如果不想打断阅读思路一般会迅速撩一眼意 ...
    0 Y/ ?; w# Y/ K) z4 Z- Q, S
    我主要靠上下文去判断一个生词的意思,不可能每个生词都去查的。这样也失去阅读的意义了。如果一个单词连续出现多次,那么我会查一查。
  • 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% i* S1 v& [; z  M8 Z1 \6 b  V
    奇怪了。如下报错。: d1 a, Y7 o9 b) V

    ) \( ~0 `: m" X7 b+ n7 |; P7 v+ {& \9 [Traceback (most recent call last):
    , W. p3 \6 d# }; C! Y1 e
    已经传到了git上,可以在试试看。( F) e# l8 P8 {4 H" b( o
    这回能省点事情。
  • 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, 2026-6-27 03:16 , Processed in 0.032003 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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