TA的每日心情 | 擦汗 2019-11-13 23:25 |
---|
签到天数: 44 天 [LV.5]常住居民I
|
本帖最后由 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
- import pandas as pd
2 ^. u% D8 g5 u, M2 T: u0 g+ R9 W& g - import numpy
( C) w& b+ P1 D; } - import ydcv
o8 f8 A. E7 O0 ]8 S, S6 h - import sys; g5 v- g0 N5 f. U
- sys.path.append('./mdictlib')$ Z; `8 Y) m8 L- L1 a* ^, S
- from mdict_query import IndexBuilder; y. B& @0 L i6 o" p8 y! h
- builder = IndexBuilder('./Collins.mdx')
% x: X6 B' D- g' G- t: i9 U
7 I1 L, ^9 X' ]- def has_explains(result): u% {) P5 M9 x1 \! U
- return ('basic' in result) and ('explains' in result['basic'])
0 ^$ b) J$ p' a" ]: l - % }; d, L# A# h+ ~. [0 x7 A. l
- def get_explian_from_result(result):- y; o- {/ J3 ]3 Y+ v2 q* v) X
- if not has_explains(result):
L" F9 s+ X/ N$ q" D6 b' f6 v9 h - return ''
' a5 U9 z) ^. p - return ';'.join(result['basic']['explains']) z2 I3 H! Z0 j( S
- 6 e" K4 j1 y* Q- G: R6 F' F
- def translate_from_yd(word):
' G( C9 s/ o" Z- Y$ D+ v - result = ydcv.lookup_word_inner(word)
+ |2 @5 d: X% T) u - return result$ [$ Q6 O! c/ g" b1 C
7 D* C2 l8 b: G: U% L- S- def if_in_collins(word):7 L$ t8 x+ d: w0 J0 y
- return len(builder.mdx_lookup(word)) > 0
4 x) o j7 d3 H; T' J' |- A - 2 o' D& t Z4 g
- df1 = pd.read_csv('./2018.12.20-wordbook-neat.txt',names=['worlds'])
e1 N1 e9 m$ F# J8 L - df1 = df1.sort_values(by = 'worlds'). z6 F/ w8 |' G8 f* j: s: u
- df1['yd_explain'] = df1['worlds'].apply(lambda x :translate_from_yd(x))) E8 u L9 \8 l1 ]
- df1['expalins'] = df1['yd_explain'].apply(get_explian_from_result)
P8 @0 A/ R0 ?0 a) H - origin_word = df1['expalins'].str.extractall(r'[(\(]([a-z]+)的.*[)\)]').unstack()
Z1 e; x- _3 r/ g+ q1 G. p - df2 = df1.copy()( q% W+ D1 c9 c- n* Q0 i5 D$ z
- df2.loc[list(origin_word[0].index)] = origin_word[0]
7 y9 J* [! i3 k% a6 u - df2 = df2.reindex(columns=['worlds','expalins'])( F. y& ] n6 a' b3 ^
- df2 = df2.drop_duplicates('worlds'), r2 B5 ?7 @2 {" x5 v( S
- df_not_in_collins = df2[df2['worlds'].apply(lambda x: if_in_collins(x))]
/ `$ p' ]( O" d* i, R2 Q4 Q - 1 \2 i$ ], L* W9 ~- \4 L
- df1.to_json('./words_queried_by_youdao.json')
! E+ n3 a; E3 n; q( D! |( \ - df_not_in_collins.to_csv('./df_not_in_collins.csv')
% n2 b A# f* v - ; F0 h& v# O- h D1 ~# }
- 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
查看全部评分
-
|