通过分析,我们把字典分为两类比较好。一类是只提供记忆功能的星级卡片,仅仅包括collins5,4,3三个等级。第二类是包含所有等级的查询词库。
第一类用来学习和复习记忆基础词汇,第二类用来做阅读扩展支持。
第一类需要用到的是星级,词汇,声音和拼写。并不需要音标,因为已经有发音了。第二类尽可能资料齐全,但是也只是需要第一词义,但需要包含星级和词频信息。
对于每个学习者,都有自己的单词量和学习目标。或许一个人是2000单词量,正在学习三星词库,对不认识的五星和四星词库也需要学习。另外一个人是5800词汇量,正在学习二星词汇,对不认识的三星、四星和五星都需要学习。
那么首先通过单词量,设定学习级别,是二星还是三星。对于初中生来说,三星是需要拓展的,但二星暂时并没有必要。在他的水平高了之后再做打算。这个拓展的意思是,是否需要将阅读中的二星词汇加入生词本。
根据透析法,阅读中的大部分单词是不需要查的,只需要猜意思即可,也就是不影响阅读的情况下,两页查一个单词。这种方法的目的是,在阅读的乐趣中积累单词,而不是一直查单词干扰了阅读。
在新的模式下,我们可以点击不认识的单词,将它备注为不认识,然后不认识的单词达到一定数量后,系统自动查询单词词频。将词频最高的单词的意思显示出来,如果是属于正在学习的星级或者需要拓展的星级,就会自动加入生词本,否则只是显示中文。不同的星级用不同的颜色表示。
点击时执行播放单词读音,在生词量达到10个后,选择词频最高的两个显示意思,并根据情况加入生词本,其他的则只是显示中文,并不浪费时间和打断阅读乐趣,也不会增加主动记忆负担。需要主动记忆的最多只是两个单词而已。这10个单词会并排出现,显示星级和词频。当然,软件还会对本书进行扫描,如果发现某个词出现的频次很高,也会标志出来。所以根据星级,本书出现的频次,词频等,就可以做出要不要加入生词本的判断。
现在使用bs4,从词典转换的txt中以行为单位,提取信息,首先提取所有的词汇,然后再生成
五星,四星和三星词库。
词汇
soup.font.string
就是词汇,string是找到的第一个font标签中的内容。星级
soup.find_all('font')[1].string[1:]
[1]表示是找到的第二个font标签,末尾加[1:]是因为星级前面有空格。
现在其他的内容可能会分为若干条。首先获取最接近词义的div。因为在词义上有3层嵌套的div,所以使用:
div = soup.div.div.div
这样就直接能选中最里层的div,然后进行细节的逐项分割。
先进行词条划分:
d = div.find_all('div', class_='collins_en_cn')
然后输入len(d),就可以看到词条有几项。
然后d[0]就是第一项,这个也是每个词都有的,在5、4、3星级词库中,我们只需要这一项即可。但现在还需要较完整保留词典的信息,对于词条多的词,我们保留前3条词条即可。
d[0]就是第一个词条。每个词条中都有两大部分,一个是词义的解释,一个是例句。
解释是d[0].div.div
,例如是d[0].ol
。解释中有5个部分,前3个span和第4个英文解释,最后1个语法信息。令d0 = d[0].div
,d0.contents就是标签中的内容。
词义序号
d0.contents[0].string
就是1.序号词性
d0.contents[1].string
就是VERB 动词 等词性词义
d0.contents[2].string
就是词义, 离弃;遗弃;抛弃
6.英文解释
_str = ''
l = len(d0.contents)
for i in range(l):
if i > 2:
print('d0.contents[i].string =', d0.contents[i].string)
print('_str =', _str)
_str += d0.contents[i].string
print('d0.contents[i].name =', d0.contents[i].name)
if d0.contents[i].name == 'span':
break
BUG:
d0.contents[i].string = If you
_str =
d0.contents[i].name = None
d0.contents[i].string = abandon
_str = If you
d0.contents[i].name = b
d0.contents[i].string = a place, thing, or person, you leave the place, thing, or person permanently or for a long time, especially when you should not do so.
_str = If you abandon
d0.contents[i].name = None
d0.contents[i].string = None
_str = If you abandon a place, thing, or person, you leave the place, thing, or person permanently or for a long time, especially when you should not do so.
Traceback (most recent call last):
File "<stdin>", line 5, in <module>
TypeError: Can't convert 'NoneType' object to str implicitly