python创建属于自己的单词词库 便于背单词


Posted in Python onJuly 30, 2019

本文实例为大家分享了python创建单词词库的具体代码,供大家参考,具体内容如下

基本思路:以COCA两万单词表为基础,用python爬取金山词霸的单词词性,词义,音频分别存入sqllite。背单词的时候根据需要自定义数据的选择方式。

效果如下:

python创建属于自己的单词词库 便于背单词

代码写的比较随意,还请见谅。

创建数据库

cu.execute('create table test (id INTEGER PRIMARY KEY AUTOINCREMENT,dc varchar(20),cx varchar(20),cy varchar(50),mp3 varchar(50));')

完整代码,效率不高,不过够用了

import requests
from bs4 import BeautifulSoup
import re
import traceback
import sqlite3
import time
import sys

def ycl(word):
 try:
 url = "http://www.iciba.com/{}".format(word)
 headers = { 'Host': 'www.iciba.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate', 'Referer': 'http://www.baidu.com', 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', }
 response = requests.get(url = url,headers = headers)
 soup = BeautifulSoup(response.text,"lxml")
 #输出单词词性
 cx = soup.find(class_='base-list switch_part')(class_='prop')
 #输出词性词义
 mp3 = soup.find_all(class_='new-speak-step')[1]
 pattern = re.compile(r'http://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+.mp3')
 mp3url = re.findall(pattern,mp3['ms-on-mouseover'])
 mp3url = '.'.join(mp3url)
 r = requests.get(mp3url)
 #单词音频输出路径
 dress = "E:\\sound\\"
 mp3path = dress +word+".mp3"
 with open(mp3path, 'wb') as f:
  f.write(r.content)
 #获取词性个数
 meanings =soup.find_all(class_='prop')
 #实行每个词性的词义同行输出
 for i in range(len(meanings)):
  s = soup.find(class_='base-list switch_part')('li')[i]('span')
  c = cx[i].text
  a = ''
  for x in range(len(s)):
  b = s[x].text
  a = a + b
  print(word)
  print(c)
  print(a)
  # 存入数据库的方法
  conn = sqlite3.connect("word.db")
  cu = conn.cursor() 
  sql =cu.execute("INSERT INTO test (id,dc,cx,cy,mp3)VALUES(NULL,'%s','%s','%s','%s');"%(word,c,a,mp3path))
  print(sql)
  conn.commit()
  print('\n')
 except Exception as e:
 print(e)
 print("error")
 with open("log.txt",'a') as f:
  f.write(word+'\n')
def duqudanci(file):
 wordcount = 0
 for line in open(file):
 word = line.strip('\n')
 wordcount += 1
 print(wordcount)
 ycl(word)
 
if __name__ == '__main__':
 conn = sqlite3.connect("word.db")
 cu = conn.cursor()
 word = ""
 #需要爬取的单词
 duqudanci(sys.argv[1])
 print('下载完成')
 conn.commit()
 conn.close()

自定义背单词: 根据需要可以将单词放入txt文件中进行测试,可以输出词义拼写单词,也可以输出单词,选择对应释义。 当然还可以给每个单词词义加两个属性值,分别表示学习次数和答错次数,然后可以根据这两个值来选择单词,如果有兴趣的话,可以尝试一下。

import sqlite3
import random
import sys
from playsound import playsound 
# 中译英
def CtoE():
 for j in list1:

 sql =cu.execute('select id,dc,cx,cy,mp3 from wordinfo where id = ?',(j,))
 for it in sql:
 # 返回的是元组,直接对元组查询
 c=0
 while c<3:
 print("当前单词ID = "+str(it[0]))
 print("释义:"+it[3])
 # 播放音频
 playsound(it[4])
 a = input("请拼写单词,共有三次机会:")
 if a == it[1]:
 print("拼写正确")
 break;
 c += 1
 print('第%d次拼写错误'%c)
 print('\n')
 print("下一个")
 print('\n')
# 英译中
def EtoC():
 for j in list1:
 sql =cu.execute('select id,dc,cx,cy,mp3 from wordinfo where id = ?',(j,))
 d =0
 for it in sql:
 # 返回的是元组,直接对元组查询
 c=0
 while c<3:
 # 释放list2
 list2 = []
 sql =cu.execute('select cy from wordinfo where id !=? order by random() limit 3',(j,)) 
 for t in sql:
 for o in range(len(t)):
 #将随机取出的数据放入列表
 list2.append(t[o]) 
 # 加入正确答案
 p = random.randint(0,3)
 list2.insert(p,it[3])
 print("当前单词ID = "+str(it[0]))
 print("选择单词的对应释义:----"+it[1])
 playsound(it[4])
 dict1 = {'A':list2[0],'B':list2[1],'C':list2[2],'D':list2[3]}
 print("A:"+dict1.get('A')+'\n')
 print("B:"+dict1.get('B')+'\n')
 print("C:"+dict1.get('C')+'\n')
 print("D:"+dict1.get('D')+'\n')
 answer1 = input("请选择,共有三次机会(大写):")
 if dict1.get(answer1)== it[3]:
 print("正确")
 break;
 c += 1
 print('第%d次拼写错误'%c)
 d += 1
 print('\n')
 print("下一个")
 print('\n')
def main(file):
 for line in open(file):
 word = line.strip('\n')
 sql =cu.execute('select id from wordinfo where dc = ?',(word,))
 for x in sql:
 list1.append(x[0])
 cho = input("英译中请选1,中译英请选2:")
 if cho =="1":
 EtoC() 
 elif cho =="2":
 CtoE()
 else:
 print("错误,请重试")

if __name__ == '__main__':
 conn = sqlite3.connect("word.db")
 cu = conn.cursor() 
 list1 = []
 word = ""
 main(sys.argv[1])
 conn.commit()
 conn.close()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
Python实现带百分比的进度条
Jun 28 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 Python
Python单元测试实例详解
May 25 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
Python selenium文件上传下载功能代码实例
Apr 13 Python
基于python实现查询ip地址来源
Jun 02 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
Dec 01 Python
Python基础之变量的相关知识总结
Jun 23 Python
python中append实例用法总结
Jul 30 #Python
简单了解django orm中介模型
Jul 30 #Python
Python爬虫学习之翻译小程序
Jul 30 #Python
安装docker-compose的两种最简方法
Jul 30 #Python
Django的性能优化实现解析
Jul 30 #Python
Python爬虫学习之获取指定网页源码
Jul 30 #Python
django-初始配置(纯手写)详解
Jul 30 #Python
You might like
PHP自定义大小验证码的方法详解
2013/06/07 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
python实现数据分析与建模
2019/07/11 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
python中数字是否为可变类型
2020/07/08 Python
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
博士生入学考试推荐信
2013/11/17 职场文书
物流合作计划书
2014/01/10 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
计生专干事迹
2014/05/28 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
2015年教务工作总结
2015/05/23 职场文书
预备党员入党感言
2015/08/01 职场文书