掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 3222|回复: 19

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

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

    [LV.5]常住居民I

    发表于 2019-1-9 14:37:20 | 显示全部楼层 |阅读模式
    本帖最后由 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
    1. import pandas as pd
      - H  [4 K: ^7 ?: w* k
    2. import numpy
        |$ w2 C. b7 ?* f$ b0 R
    3. import ydcv' F# D$ K% T- Z6 A# M( A
    4. import sys
      7 T8 x( Y9 i7 ^7 N, b4 ]
    5. sys.path.append('./mdictlib')
        |& X$ v4 N: X
    6. from mdict_query import IndexBuilder
      2 ]6 w3 t. l9 k3 U
    7. builder = IndexBuilder('./Collins.mdx')
        n+ x. @0 m. T+ N3 o4 ~

    8. 7 `7 ?# l5 x0 F! J8 u1 {
    9. def has_explains(result):
      " z% D% |& m! y, z5 e  E, R
    10.     return ('basic' in result) and ('explains' in result['basic'])0 m, v8 a1 v2 B, L  {: D1 W9 T" |" ~

    11. ( n& k7 N1 L/ ]6 P8 z/ Z2 f: D) Y
    12. def get_explian_from_result(result):
      9 O+ S+ N* F( K
    13.     if not has_explains(result):* Z$ S6 G! \5 y& J$ Q
    14.         return ''. c5 z  C( r$ x) `6 W
    15.     return ';'.join(result['basic']['explains'])2 B* j" t( N! w, P  z( G$ j) W

    16. . k1 [: `& q0 v- [) {
    17. def translate_from_yd(word):
      2 j/ p: }. b# r
    18.     result = ydcv.lookup_word_inner(word)- E  `3 O3 L+ b, P- w5 _7 k! I( T' q
    19.     return result
      0 w; |5 i/ x$ V6 C! r; g5 b

    20. & f& K& P& J6 n$ v
    21. def if_in_collins(word):' u8 I$ `1 [; i( a3 I/ o& Z
    22.     return len(builder.mdx_lookup(word)) > 0, D8 `. G& G" G- }
    23. 1 M. m' B" s: e3 e* g
    24. df1 = pd.read_csv('./2018.12.20-wordbook-neat.txt',names=['worlds'])& j0 M4 W* M+ k; s
    25. df1 = df1.sort_values(by = 'worlds')( x* C; s$ r- V3 a
    26. df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))
      6 t, j+ X8 }' {
    27. df1['expalins'] = df1['yd_explain'].apply(get_explian_from_result)9 r, Z' F  R0 ~* e/ f; D
    28. origin_word = df1['expalins'].str.extractall(r'[(\(]([a-z]+)的.*[)\)]').unstack()
      / G* E+ d: n7 D9 j, }# s  L
    29. df2 = df1.copy()
        F. q& ]; u5 g' Y6 [
    30. df2.loc[list(origin_word[0].index)] = origin_word[0]2 E  Z* x+ Q  Y" l6 G$ R3 H
    31. df2 = df2.reindex(columns=['worlds','expalins'])
      . g! z4 r: U( {' Y" _. I
    32. df2 = df2.drop_duplicates('worlds')
      ' D' |0 N) U- V1 R' A. A
    33. df_not_in_collins = df2[df2['worlds'].apply(lambda x: if_in_collins(x))]
      : z: T  F2 f* B) H8 O8 |$ I
    34. 8 K& ~: }* u, V% Q6 l/ x) C
    35. df1.to_json('./words_queried_by_youdao.json')
      ( T' q* {1 M3 o$ v
    36. df_not_in_collins.to_csv('./df_not_in_collins.csv')
      - _. T" V, j' i9 j
    37. 5 D* c, M! S8 ^, _# G3 ?' T
    38. 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

    查看全部评分

    本帖被以下淘专辑推荐:

  • 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 编辑 " N' {" t2 Q" }! w/ Q+ |

    % G# u  k: H9 O大赞代码流。
    # i" X4 r; z" x& `
    5 f; n  s. g4 \3 M不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过我在这篇帖子:【整理版】几种好玩的查词典方式6 R7 D. ]* [5 C9 t
    https://www.pdawiki.com/forum/thread-31879-1-1.html?x=294297 里分享的方法记录下来。但让我后续再洗数据,这个我就懒得做了(也没必要洗了,因为当初放进去的就是完美版)。
    2 k# @4 O! x( x5 a9 ^那么记录下来以后怎么办呢?我不会去用市面上的一些背单词软件。我的想法是想自己开发一个app,去从印象笔记里获取这些数据,然后展示,各种媒介上展示(这还只是想法,因为懒… 还没有去实施。)相当于自己做一个记单词软件的样子,但应该会有不同(具体怎么不同,就先不说了)。
    7 `1 }& K- x* W+ k
    & N! p  r- }% z0 u* @9 G另外说下对背单词的看法,我觉得单词没必要特意背,只需要去查就好了,expose自己到词典的海洋里,我也不会逼迫自己当时必须记住,我只要求自己有一点印象就好了,后面要做的事情就是持续不断的expose自己到这些查过的单词。现在做的还不是很好,但想法就是上面的想法,一直还没有实施。% F3 @3 a* L% a2 L- b( Q# v
    / M+ z' O$ x$ L( o. q: k8 j9 ~
    下一步就是把我这些年记在印象笔记里的1万多单词笔记合理利用起来。
    ! R2 {7 {+ b7 @- h但一直懒… ' B' L$ t; V, ]$ Q7 ~  g
    # N* u+ W1 {+ f% f' u
    目前虽然回顾比较少,但好在一个单词如果真的重要一定会出现很多次的,查的次数多了自然就记住了。 7 {  X! |& i: d) [

    ! e# E9 [9 L7 |% ^& k( ^3 y1 J% S% ?, R! f& x" a" ]

    - m  ~8 a& S# M: z另外,我不喜欢欧路词典。$ ^' E. u2 w7 x9 p2 ~

    ; x, U* ]& D. F6 z大爱 GoldenDict + EbMac + 深蓝
    * Q( ]( ^: x9 X
    & U4 V  t+ q* n. b . }5 A. k* ?! j' s8 {8 k/ |

    2 ?6 _, t1 Q1 a% e9 j7 O
    ) A! M/ ?0 d, J6 \
    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, [# N! x; e: J) {# \4 _, J
    mdict_query  module 是不是该发上来?

    - T' k3 D; p9 kgit上的模块,可以自行下载: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  f1 u" _7 C& I9 \+ K
    大赞代码流。
    ' Q+ ]! d; p- S9 m( @% }' m' T, }  s# G" _. k
    不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过 ...
    - y! f. A, q1 ^! D$ A  t9 _3 e" k1 ^% c
    我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:2 t+ _) b: b: J* K' Y
    1,如果不想打断阅读思路一般会迅速撩一眼意思然后接着往下读。这种情况对于我来说会经常对所查的单词毫无意向。
    3 R) s, ]: X2 _. ]8 ~2,更重要的是,不会仔细回味琢磨单词的发音和发音结构。我个人认为单词发音是一定要弄清楚而且不可以出错的。. Q: |. ~% _8 ?( `' M
    不过也无所谓啦,各有各的路。自己相信的路才是最好的
  • TA的每日心情
    擦汗
    2019-11-13 23:25
  • 签到天数: 44 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-9 17:04:26 | 显示全部楼层
    zhin 发表于 2019-1-9 16:39
    - S% S6 n; K! C1 b: W" n我倒是觉得无所谓,毕竟是少数情况。而且复习的时候也能明显看出。
    8 k! [9 V, C, p7 _! ?* v/ l9 X" b
    开始我也是觉得无所谓的,后来发现十分影响心情~
    bbs 该用户已被删除
    发表于 2019-1-9 17:39:46 | 显示全部楼层
    ipda_cluo 发表于 2019-1-9 16:48: z5 d5 V& a& p( l  t: E" F
    git上的模块,可以自行下载:https://github.com/mmjang/mdict-query , https://github.com/felixonmars ...

    . d4 W& \( Y  |+ Q4 A  M奇怪了。如下报错。7 E( s3 F2 Y% X, y* G5 ]5 x: S/ H
    / X2 B7 \2 c0 o% ^
    Traceback (most recent call last):
    , ^5 j- K1 Q1 \! O  File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <module>
      f7 s! E. u& _2 I9 D! C; B    df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))+ E' v  |5 R# N
      File "D:\Python27\lib\site-packages\pandas\core\series.py", line 3194, in apply4 ?3 a* s" \+ ?! i2 R! R
        mapped = lib.map_infer(values, f, convert=convert_dtype)
    ( n/ V1 [, H; [2 [  File "pandas/_libs/src\inference.pyx", line 1472, in pandas._libs.lib.map_infer) b: I7 r( _* P1 B; k
      File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <lambda>
    " N* z# C6 X7 [- g8 {# c# P, l1 v7 r    df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))
    4 |4 L  _2 [6 O; f  File "C:\Users\Administrator\Desktop\words\words.py", line 24, in translate_from_yd- g* M3 t7 ?, H. j7 o- E
        result = ydcv.lookup_word_inner(word), [( W9 S  S' Y
    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" [* p; \( p3 Z$ L/ g
    我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:
    7 U9 E* }; g+ s* [& `8 \( e1,如果不想打断阅读思路一般会迅速撩一眼意 ...
    ' `& m# o  a" Q7 U' d8 |
    我主要靠上下文去判断一个生词的意思,不可能每个生词都去查的。这样也失去阅读的意义了。如果一个单词连续出现多次,那么我会查一查。
  • 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
    6 e$ Y2 X5 G, ]' M# h奇怪了。如下报错。3 Z: \9 F0 X- X

      _3 J$ q, Y& |7 v: i& J0 cTraceback (most recent call last):

    ; ~! u; @5 B2 ]8 P# b7 p已经传到了git上,可以在试试看。: ~) l1 N; [: r3 }
    这回能省点事情。
  • 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-4-24 06:06 , Processed in 0.066450 second(s), 15 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2023, Tencent Cloud.

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