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与shell的3种交互方式介绍
Apr 11 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
使用python实现BLAST
Feb 12 Python
详谈python中冒号与逗号的区别
Apr 18 Python
使用matplotlib画散点图的方法
May 25 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
Python中return self的用法详解
Jul 27 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
python3代码输出嵌套式对象实例详解
Dec 03 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实现智能文件类型检测的实现代码
2011/08/02 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
php常用表单验证类用法实例
2015/06/18 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
清空上传控件input file的值
2010/07/03 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
JS实现留言板功能
2017/06/17 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
python实现划词翻译
2020/04/23 Python
Python中的tuple元组详细介绍
2015/02/02 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
对python中return与yield的区别详解
2020/03/12 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
《美丽的田园》教学反思
2014/03/01 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
《飘》英文读后感五篇
2019/10/11 职场文书
win10安装配置nginx的过程
2021/03/31 Servers