Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写、选择单词,根据词意选择单词

Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写、选择单词,根据词意选择单词,可乱序抽查,可对错题进行反复抽查在这里插入图片描述
完整程序源代码下载:Python背单词记单词小程序
词库生成代码
gen_old_tem8.py

import random
import time
import json
import tempfile
import sys
import os
import logging
import base64import requestsfrom wordson.gen.gensource import GenSourceif sys.version_info[0] < 3:try:from io import openexcept ImportError:from codecs import opentry:FileNotFoundError
except NameError:FileNotFoundError = IOErrorclass GenOldTEM8(GenSource):SEED = 0LOGGER = logging.getLogger('wordson.gen.gen_old_tem8.GenOldTEM8')def __init__(self, practice_day):name = time.strftime('%Y-%m-%d', time.localtime())super(GenOldTEM8, self).__init__('English', u'daily-tem8', name)self.start = (practice_day - 1) * 20self.end = self.start + 20def get_source(self):source_file = os.path.join(self.WORDSDIR, 'TEM8-old', 'tem8_all.json')with open(source_file, 'r', encoding='utf-8') as f:source_all = json.load(f)random.seed(self.SEED)random.shuffle(source_all)source_need = source_all[self.start: self.end]self.old_source_id_to_info = dict(('_'.join(each['word']), each) for each in source_need)return ((key, value['word']) for key, value in self.old_source_id_to_info.items())def get_meaning(self, word_id):info = self.old_source_id_to_info[word_id]old_meaning_info = info['meaning']result = []for old_type, old_meaning in old_meaning_info:if old_type is None:new_type = Noneelse:new_type = [old_type]new_meaning = [old_meaning]result.append({'type': new_type,'meaning': new_meaning,})return resultdef get_pronunciation(self, word_id):words = self.old_source_id_to_info[word_id]['word']word = words[0]result = []temp_dir = tempfile.gettempdir()info_file = os.path.join(temp_dir, word + '.json')try:with open(info_file, 'r', encoding='utf-8') as f:pr_info = json.load(f)except (FileNotFoundError, IOError):self.LOGGER.info('get from merriam for %s', word)pr_info = self.pronunciation_from_merriam(word)with open(info_file, 'w', encoding='utf-8') as f:json.dump(pr_info, f)for sound_mark, sound_url in pr_info.items():# sound_mark_b64 = self.str_b64(sound_mark)# sound_mark_b64 = wordsound_mark_safe = sound_marksound_wav = os.path.join(temp_dir, sound_mark_safe + '.wav')sound_mp3 = os.path.join(temp_dir, sound_mark_safe + '.mp3')try:with open(sound_wav, 'rb') as f:wav_bin = f.read()except (FileNotFoundError, IOError):if not os.path.isfile(sound_mp3):self.LOGGER.info('get from merriam for %s, mp3 %s', word, sound_url)resp = requests.get(sound_url)assert 200 <= resp.status_code < 300self.LOGGER.info('save mp3 to %s', sound_mp3)with open(sound_mp3, 'wb') as f:f.write(resp.content)assert os.path.isfile(sound_mp3)self.LOGGER.info('conver %s to %s', sound_mp3, sound_wav)try:self.ffmpeg_convert(sound_mp3, sound_wav)except BaseException:try:os.remove(sound_wav)except BaseException:passraisewith open(sound_wav, 'rb') as f:wav_bin = f.read()result.append((sound_mark, wav_bin))else:result.append((sound_mark, wav_bin))return self.ONE2ONE, result@staticmethoddef str_b64(s):return base64.b64encode(s.encode('utf-8')).decode('utf-8')if __name__ == '__main__':from wordson.bashlog import getloggergetlogger(None, logging.DEBUG)_, day_str = sys.argvpract = int(day_str)saver = GenOldTEM8(pract)saver.run()saver.save()

gensource.py

import os
import sys
import logging
import subprocess
import jsonfrom bs4 import BeautifulSoup
import requestsfrom wordson.util import PROJECTDIRif sys.version_info[0] < 3:try:from io import openexcept ImportError:from codecs import opentry:FileExistsError
except NameError:FileExistsError = OSErrortry:FileNotFoundError
except NameError:FileNotFoundError = IOErrorclass GenSource(object):LOGGER = logging.getLogger('wordson.gen.gensource.GenSource')WORDSDIR = os.path.join(PROJECTDIR, 'words')MIXED = 0ONE2ONE = 1def __init__(self, language, category, name):self.language = languageself.category = categoryself.name = nameself.rel_folder = os.path.join(language, category, name)self.save_folder = os.path.join(self.WORDSDIR, self.rel_folder)self.save_file = os.path.join(self.save_folder, 'index.json')self.result = []def run(self):result = self.resulttry:os.makedirs(self.save_folder)except (FileExistsError, OSError):passfor word_id, word in self.get_source():meaning = self.get_meaning(word_id)pr = self.get_pronunciation(word_id)if pr is None:pronunciation = Noneelse:# pronunciation = Noneif pr[0] == self.MIXED:_, sound_marks, wav_binaries = prsound_fnames = []for index, wav_bin in enumerate(wav_binaries):fname = '{}-{}.wav'.format(word_id, index)fpath = os.path.join(self.save_folder, fname)with open(fpath, 'wb') as f:f.write(wav_bin)sound_fnames.append(fname)pronunciation = {"mode": "mixed","value": {"soundmarks": sound_marks,"soundpaths": sound_fnames}}elif pr[0] == self.ONE2ONE:_, marks_binaries_pari = prvalue = []for index, (sound_mark, wav_bin) in enumerate(marks_binaries_pari):fname = '{}-{}.wav'.format(word_id, index)fpath = os.path.join(self.save_folder, fname)with open(fpath, 'wb') as f:f.write(wav_bin)value.append({"soundmark": sound_mark,"soundpath": fname})pronunciation = {"mode": "one2one","value": value}else:pronunciation = Noneassert Falseword_info = {'word': word,'meaning': meaning,'pronunciation': pronunciation,}self.LOGGER.info(word_info)result.append(word_info)def save(self):try:os.makedirs(self.save_folder)except FileExistsError:passwith open(self.save_file, 'w', encoding='utf-8') as f:json.dump(self.result, f, indent=4, ensure_ascii=False)config = {'name': self.name,'language': self.language,'category': self.category,'folder': self.rel_folder,'words': 'index.json',}config_file = os.path.join(self.WORDSDIR, 'index.json')try:with open(config_file, 'r', encoding='utf-8') as f:config_full = json.load(f)except (FileNotFoundError, IOError):config_full = []for each in config_full:# no dup saveif each == config:breakelse:config_full.append(config)with open(config_file, 'w', encoding='utf-8') as f:json.dump(config_full, f, indent=4, ensure_ascii=False)def get_source(self):"""e.g.{'word_id': ['spell1', 'spell2'],  // list, required}.items()"""passdef get_meaning(self, word_id):"""e.g.[{"type": ["n"],  // list, None when not avaliable"meaning": ["测试"]  // required, list},{"type": ["v"],"meaning": ["测试动词"]}]"""passdef get_pronunciation(self, word_id):"""three mode:return self.MIXED, ["soundmark1", "soundmark2"], [<wav-binary>, <wav-binary>, <wav-binary>]return self.ONE2ONE, [("soundmark1", <wav-binary>),("soundmark2", <wav-binary>),]"""pass@staticmethoddef pronunciation_from_merriam(word):page_url = 'https://www.merriam-webster.com/dictionary/{}'.format(word)resp = requests.get(page_url)assert 200 <= resp.status_code < 300, resp.status_codesoup = BeautifulSoup(resp.content, 'html5lib')result = {}for pr in soup.find_all(class_='pr'):# print(pr)sound_mark = pr.text.strip()print(sound_mark)prs = pr.parent# print(prs)a = prs.find('a')a_data_file = a.get('data-file')assert a_data_file is not Nonea_data_dir = a.get('data-dir')assert a_data_dir is not Nonesound_url = 'https://media.merriam-webster.com/audio/prons/en/us/mp3/{}/{}.mp3'.format(a_data_dir, a_data_file)print(sound_url)result[sound_mark] = sound_urlreturn result@staticmethoddef ffmpeg_convert(infile, outfile, ffmpeg='/usr/bin/ffmpeg'):cmd = [ffmpeg,'-y','-i', infile,'-strict', '-2',# '-an',outfile]return subprocess.check_call(cmd)if __name__ == '__main__':import sysresp = GenSource.pronunciation_from_merriam(sys.argv[1])print(resp)

在这里插入图片描述

完整程序源代码下载:Python背单词记单词小程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33553.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为了背单词,我花了两天写了一款背单词小程序

前言 “要是考试不考英语就好了” 哎&#xff0c;提起英语&#xff0c;都是伤心事。有时候严重怀疑自己不是一块学习英语的料。单词背了忘&#xff0c;忘了背&#xff0c;背了又忘。考试之前看啥单词都会&#xff0c;一上考场&#xff1a;这单词啥意思&#xff1f; …

大量背单词有用吗?

前言 从三年级开始接触英语&#xff0c;到今为止已经14年了&#xff0c;可是自己的英语水平虽不至于茫然无知&#xff0c;可是真正做到和老外进行交流&#xff0c;还是有一定的困难的。不仅是老外&#xff0c;和小伙伴进行topic的时候&#xff0c;也有卡壳的时候&#xff0c;类…

单词背记系统

题目 B4&#xff1a;基于关键词的文本排序检索系统 一、 课题内容和要求 题目 B4&#xff1a; &#xff08;一&#xff09;课题内容 “背单词—个性化背词”是背诵英语单词的软件。用户可以根据自己的需求 导入需背诵的词库&#xff0c;并可以编辑自己的词库。背单词时有两种…

背单词超实用的微信小程序来了

如果你还找不到快速背单词的工具&#xff0c;查询单词最便捷的工具&#xff0c;那你得赶紧了&#xff0c;自己独自开发到上线得微信小程序来了。

分享一款好用的电脑背单词软件

推荐一下这款单词风暴&#xff0c;虽然看起来很老了&#xff0c;但是好用&#xff0c;功能多。 下载地址 单词风暴免费版下载_官方免费版_单词风暴官方网站 (wordstorming.com) 下面是主界面 需要登陆ID:285804755-QGJTE-HCUMQ 下面是词库 不过我最喜欢的功能是这里面可以…

chatgpt赋能python:使用Python编写计算器

使用Python编写计算器 你是否曾经被手头上的计算器的功能所限制&#xff1f;或者需要一种高级计算器来解决你的问题&#xff1f;如果是这样的话&#xff0c;那么你可以使用Python编写一个自己的计算器。Python是一种功能强大而又容易入门的编程语言&#xff0c;可以用于各种各…

chatgpt赋能python:Python计算器代码实现——简单又实用

Python计算器代码实现——简单又实用 Python 作为一门高级编程语言&#xff0c;具有易读易写的特性&#xff0c;其语法简单&#xff0c;易于上手&#xff0c;受到越来越多的程序员和爱好者的喜欢。在Python中&#xff0c;实现计算器功能也是非常简单的一件事情。 为了方便大家…

chatgpt赋能python:Python计算器:简单易用的数学工具

Python计算器&#xff1a;简单易用的数学工具 作为一种脚本语言&#xff0c;Python被广泛用于数据分析、Web开发、机器学习等领域&#xff0c;它也是一款非常适合编写计算器的语言。Python计算器作为一款基于Python语言编写而成的数学工具&#xff0c;它不但可以快速进行各种基…

chatgpt赋能Python-python函数计算器

简介 Python是一种高级编程语言&#xff0c;它在数据科学和机器学习等领域非常流行。但是&#xff0c;很多人可能不知道它也可以用来编写简单的函数计算器。 在本文中&#xff0c;我们将介绍一些基本的Python函数&#xff0c;并教你如何使用它们来编写一个简单但强大的函数计…

chatgpt赋能python:Python计算器-让数学计算更简单

Python计算器- 让数学计算更简单 Python是一种广泛使用的编程语言&#xff0c;它有许多功能&#xff0c;从数据分析到人工智能应用。今天&#xff0c;我们来看看如何使用Python计算器来进行数学计算&#xff0c;这样你就可以处理复杂的数字问题并轻松地获得正确的结果。 Pyth…

chatgpt赋能python:Python简单计算器代码

Python简单计算器代码 Python是一种高级的编程语言&#xff0c;被广泛用于开发各种类型的应用程序&#xff0c;包括计算器应用程序。在本文中&#xff0c;我们将介绍Python简单计算器代码的实现和用法。 Python简单计算器代码介绍 一个简单的计算器能够实现基本的算术运算&a…

熵权法原理及应用

熵权法原理及应用 一、熵权法简述 熵&#xff1a;起源于物理学&#xff0c;表示物质微观热运动时的混乱程度&#xff0c;在信息论中是衡量系统无序程度度量值。 熵权法&#xff1a;根据信息熵的定义&#xff0c;对于某项指标&#xff0c;可以用熵值来判断某个指标的离散程度&…

微信常用接口

微信常用接口 一、公众号 1、准备工作 公众号的帐号及密码 公众号的AppID&#xff0c;AppSecret AppID&#xff1a; ​ 开发者ID是公众号开发识别码&#xff0c;配合开发者密码可调用公众号的接口能力。 AppSecret&#xff1a; ​ 开发者密码是校验公众号开发者身份的密码&a…

如何利用chatgpt进行深度学习

ChatGPT云炬学长 1 人赞同了该文章 我们都知道可以用chatgpt来进行学习&#xff0c;但是具体深入到某一个领域的时候&#xff0c;就会不知所措&#xff0c; 正所谓隔行如隔山&#xff0c; 在没有chatgpt之前&#xff0c;我认为入局某一个行业最好的办法就是知识付费&#x…

国内大模型争霸赛,你最看好哪家?这是你心目中的大模型排名吗?

知乎&#xff1a;绝密伏击地址&#xff1a;https://www.zhihu.com/question/598051793/answer/3034073973深度学习自然语言处理 分享 进NLP群—>加入NLP交流群 OpenAI Vs Google 目前大模型 top2 应该就是 OpenAI 的 GPT-4&#xff0c;以及谷歌的PALM-2。这两家公司早已布局…

OpenAI 创始人再签联名信,一句话声明简短有力AI或引发灭绝风险

作者 | 刘燕&#xff0c;核子可乐 全球 AI 大牛又签署一封公开信&#xff1a; AI 或将引发“灭绝风险” 本周二&#xff0c;人工智能安全中心&#xff08;CAIS&#xff09;发布了一份由 OpenAI 及 DeepMind 高管、图灵奖获得者及其他 AI 研究人员签署的简短声明&#xff0c…

大模型激战正酣,王坚能否带领阿里云王者归来?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 5月11日&#xff0c;有消息称&#xff0c;十年前卸任阿里云总裁的王坚&#xff0c;将于近日以全新职位&#xff0c;全职加入阿里云。公开资料显示&#xff0c;作为阿里云创始人&#xff0c;王坚在2009年创办阿里云&#xff…

吴恩达杨立昆亲自下场开直播:GPT-5不能停!

编&#xff5c;梦晨 源&#xff5c;量子位 大模型研究不能停&#xff01;吴恩达和LeCun为了这事儿&#xff0c;甚至亲自搞了场直播。毕竟再不出手&#xff0c;事态眼看着越来越严重了&#xff1a;马斯克等人叫停GPT-5研发的事态再次升级&#xff0c;已从千人联名发展到超过135…

GPT-5不能停!吴恩达直播回怼马斯克:汽车都还没发明,要什么安全带?

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年3月份热门报告合集 【限时免费】ChatGPT4体验&#xff0c;无需翻墙直接用 ChatGPT&#xff1a;AI模型研究框架 ChatGPT团队背景研究报告 ChatGPT的发展历程、原理、技…

GPT-5 不能停!吴恩达 LeCun 直播回怼马斯克:汽车都还没发明,要什么安全带

转自&#xff1a;量子位 | 公众号 QbitAI 大模型研究不能停&#xff01; 吴恩达和LeCun为了这事儿&#xff0c;甚至亲自搞了场直播。毕竟再不出手&#xff0c;事态眼看着越来越严重了&#xff1a; 马斯克等人叫停GPT-5研发的事态再次升级&#xff0c;已从千人联名发展到超过135…