掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 7280|回复: 19

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

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

    [LV.5]常住居民I

    发表于 2019-1-9 14:37:20 | 显示全部楼层 |阅读模式
    本帖最后由 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
    1. import pandas as pd
      & ^! y) m+ |8 M' k, ?3 ?
    2. import numpy
      6 v- w6 G; J" i, p- z2 k" P
    3. import ydcv
      % N5 Q) }( X8 Q% e
    4. import sys# I. g2 j  M, n. G" B3 }3 @' s, Q; k
    5. sys.path.append('./mdictlib')& M% x- q+ [# g1 I! ^6 o. j* Y
    6. from mdict_query import IndexBuilder
      1 }  h( V7 F3 v, `
    7. builder = IndexBuilder('./Collins.mdx')( K+ L, p6 \7 k3 t& a

    8. - T+ F0 h  z! @$ g! `! J% f3 @6 L
    9. def has_explains(result):% y" H: ]/ {! P7 y; M% q' n' e; H
    10.     return ('basic' in result) and ('explains' in result['basic']); b4 }! c* @" g0 O- i/ |- C
    11. 7 I3 @& k7 _) Y% w1 w
    12. def get_explian_from_result(result):( h# {  n( C6 f) z; i2 L1 B
    13.     if not has_explains(result):
      3 t. b1 H2 ?, n2 G. l/ X, P. B
    14.         return ''
      $ k+ Y* \7 {1 [1 b
    15.     return ';'.join(result['basic']['explains']): ^+ H" C+ w8 q0 {" e* a8 a8 s
    16. 7 t0 `2 e3 M. x, Y# \2 w
    17. def translate_from_yd(word):
      $ @8 z2 ?/ Z8 T3 d
    18.     result = ydcv.lookup_word_inner(word)
      & Y! w# n* e0 L0 f9 L, M
    19.     return result9 L' T- h' f: D4 p8 @

    20. ( O1 U0 S3 ~, W7 D
    21. def if_in_collins(word):
      9 [4 p4 \8 n/ b
    22.     return len(builder.mdx_lookup(word)) > 07 b- d8 d  H* A
    23.   R; I/ R' i9 b4 ^( D: i6 g7 k
    24. df1 = pd.read_csv('./2018.12.20-wordbook-neat.txt',names=['worlds'])3 e* V" G8 E8 t: Y' I$ z0 y
    25. df1 = df1.sort_values(by = 'worlds')) _1 X# x6 c" X
    26. df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))2 [$ h, h; j; D/ C6 X4 t% g: K
    27. df1['expalins'] = df1['yd_explain'].apply(get_explian_from_result)
      . F( t" X1 _1 v1 Z2 @
    28. origin_word = df1['expalins'].str.extractall(r'[(\(]([a-z]+)的.*[)\)]').unstack()1 @3 R( [5 Y. C" f( [
    29. df2 = df1.copy()/ D/ r! w6 f* |/ O( T
    30. df2.loc[list(origin_word[0].index)] = origin_word[0]( {/ Q; D' G. m/ ]) C/ F3 w# y8 i( c
    31. df2 = df2.reindex(columns=['worlds','expalins'])- S+ s2 ]; h& ?9 t2 S& b
    32. df2 = df2.drop_duplicates('worlds')
      % L* a! l3 ~6 S+ W
    33. df_not_in_collins = df2[df2['worlds'].apply(lambda x: if_in_collins(x))]$ D( _$ h6 c% J- n: @% L" h
    34. - i  y% l7 S$ a0 F5 r$ `
    35. df1.to_json('./words_queried_by_youdao.json')
      * g6 M8 J; R/ l5 L6 z
    36. df_not_in_collins.to_csv('./df_not_in_collins.csv')% H; J4 B/ C! Q* P9 S
    37. * r- s- X5 u, X/ N. O7 X1 g  Z; h
    38. 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

    查看全部评分

    本帖被以下淘专辑推荐:

  • 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 编辑 ! @# K" x( L( K' m$ S) K

    3 \7 L. Y( J9 y5 W: ?/ K, d3 e大赞代码流。# D% S2 S5 |* J( R
    ! ^2 o+ N2 @  M# O/ c
    不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过我在这篇帖子:【整理版】几种好玩的查词典方式
    - d, E( A. V8 I1 K& fhttps://www.pdawiki.com/forum/thread-31879-1-1.html?x=294297 里分享的方法记录下来。但让我后续再洗数据,这个我就懒得做了(也没必要洗了,因为当初放进去的就是完美版)。
    , X2 Y& i" a0 j- s3 T那么记录下来以后怎么办呢?我不会去用市面上的一些背单词软件。我的想法是想自己开发一个app,去从印象笔记里获取这些数据,然后展示,各种媒介上展示(这还只是想法,因为懒… 还没有去实施。)相当于自己做一个记单词软件的样子,但应该会有不同(具体怎么不同,就先不说了)。& H2 n; e9 ~0 J, |

    ; E6 b1 h% A/ `- t5 _. ?另外说下对背单词的看法,我觉得单词没必要特意背,只需要去查就好了,expose自己到词典的海洋里,我也不会逼迫自己当时必须记住,我只要求自己有一点印象就好了,后面要做的事情就是持续不断的expose自己到这些查过的单词。现在做的还不是很好,但想法就是上面的想法,一直还没有实施。
    0 @' f2 R) ~' o
    " P9 S( Z- H$ T" y下一步就是把我这些年记在印象笔记里的1万多单词笔记合理利用起来。
    * a- {: X3 r5 N但一直懒… / V' V3 M' f* I0 ?- g' x

    $ O8 C4 Z: N4 B+ t6 D目前虽然回顾比较少,但好在一个单词如果真的重要一定会出现很多次的,查的次数多了自然就记住了。 : V1 J7 ~# ?, U" N

    . t$ g/ Q+ o/ c, L, c) E! `. f, i& w( G# q8 p
    / o6 J) ^: R* `1 A! u* s
    另外,我不喜欢欧路词典。+ h$ W! Z$ y5 P1 F; j
    # v' d9 q2 }; U  J/ g6 m
    大爱 GoldenDict + EbMac + 深蓝
      |5 G- s% k+ X, {1 a) k0 p6 C2 G7 a$ c7 f1 d: u. L/ q
    0 @5 c, m$ a8 ~
    4 [3 `$ D; C7 n$ }
    7 p; U! y5 W& l3 L+ L
    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 k+ \6 P' T- X
    mdict_query  module 是不是该发上来?
    5 K) E. L/ t, @( `
    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:471 e/ \* Y! e* Q# @7 I6 H: L
    大赞代码流。
    ) {5 a0 d, v) U. H
    + P& |/ K1 R( F1 J不过我的思路跟你好像不大一样,我是查了单词以后,看到好的释义或者例句,会很愿意及时通过 ...
    # K% x5 u- [# [
    我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:
    & _$ F" J0 N8 {1 y8 ]1,如果不想打断阅读思路一般会迅速撩一眼意思然后接着往下读。这种情况对于我来说会经常对所查的单词毫无意向。5 L3 D0 `1 ~8 k4 Z( H
    2,更重要的是,不会仔细回味琢磨单词的发音和发音结构。我个人认为单词发音是一定要弄清楚而且不可以出错的。
    4 v6 u" [6 Z( i8 B& \不过也无所谓啦,各有各的路。自己相信的路才是最好的
  • TA的每日心情
    擦汗
    2019-11-13 23:25
  • 签到天数: 44 天

    [LV.5]常住居民I

     楼主| 发表于 2019-1-9 17:04:26 | 显示全部楼层
    zhin 发表于 2019-1-9 16:39* T  n  G! i4 I9 l+ Z" D
    我倒是觉得无所谓,毕竟是少数情况。而且复习的时候也能明显看出。

    3 \: V7 N/ F) \开始我也是觉得无所谓的,后来发现十分影响心情~
    bbs 该用户已被删除
    发表于 2019-1-9 17:39:46 | 显示全部楼层
    ipda_cluo 发表于 2019-1-9 16:48$ T% s. |  f5 l% y. v
    git上的模块,可以自行下载:https://github.com/mmjang/mdict-query , https://github.com/felixonmars ...
    ) W6 R' f1 p- n8 ]3 G$ X
    奇怪了。如下报错。7 n9 V1 x9 _6 i+ p, \; F
    # v% X, L+ R& u1 N( y
    Traceback (most recent call last):
    : l, n  j9 I. ?+ U( @! G- d  File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <module>
    8 u7 b7 D6 d  F7 R( n    df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))5 P3 T/ ?' G5 b6 V' h# a4 E/ {+ e
      File "D:\Python27\lib\site-packages\pandas\core\series.py", line 3194, in apply
    $ [0 P6 K" \/ V9 l7 e    mapped = lib.map_infer(values, f, convert=convert_dtype)6 X1 P; u7 `% F$ }  ?. r9 F. F& x  z
      File "pandas/_libs/src\inference.pyx", line 1472, in pandas._libs.lib.map_infer6 c  j0 C. [+ i' o% H
      File "C:\Users\Administrator\Desktop\words\words.py", line 32, in <lambda>% I8 {' O2 g" f7 x( |/ |( b
        df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))
    ( X  O' n1 p! O  File "C:\Users\Administrator\Desktop\words\words.py", line 24, in translate_from_yd7 G; J5 u7 |1 k3 X, G$ `
        result = ydcv.lookup_word_inner(word)
    2 T5 V2 s! F0 }( @& r9 NAttributeError: '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
    1 U6 G4 M( Q. S& L$ ]  d我深思也实践过不去特意背诵这种方法,对我来说有几个弊端:7 |  M# h1 `! \5 a1 e
    1,如果不想打断阅读思路一般会迅速撩一眼意 ...

    % x8 w+ F- S( p# a% q  x% x# y我主要靠上下文去判断一个生词的意思,不可能每个生词都去查的。这样也失去阅读的意义了。如果一个单词连续出现多次,那么我会查一查。
  • 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  j) a9 T9 q! _% |& i, X
    奇怪了。如下报错。
    & z6 b1 }: C3 r5 ^( a1 \7 l6 t0 u+ P6 w' L/ a7 M+ j. h1 {& f
    Traceback (most recent call last):
    6 j& p4 c- A7 r8 L; O4 S
    已经传到了git上,可以在试试看。
    5 {% V' P* y2 X0 b3 z) ], U这回能省点事情。
  • 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-8-11 17:53 , Processed in 0.027278 second(s), 26 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

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