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 相关文章推荐
Python解析网页源代码中的115网盘链接实例
Sep 30 Python
python如何获取服务器硬件信息
May 11 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
python读取几个G的csv文件方法
Jan 07 Python
python和c语言的主要区别总结
Jul 07 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
pycharm设置当前工作目录的操作(working directory)
Feb 14 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
python FTP编程基础入门
Feb 27 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 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初学者们头痛的十四个问题
2007/01/15 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
php中文验证码实现示例分享
2014/01/12 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
JavaScript实现职责链模式概述
2018/01/25 Javascript
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
如何用Python合并lmdb文件
2018/07/02 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
Python如何定义接口和抽象类
2020/07/28 Python
Python读写压缩文件的方法
2020/07/30 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
运动会通讯稿50字
2014/01/30 职场文书
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
班主任班级寄语大全
2014/04/04 职场文书
单位消防安全责任书
2014/07/23 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书