Python 翻译词典小程序

news2025/5/20 0:38:14

一、概述

本工具是基于Python开发的智能翻译系统,采用有道词典进行翻译,并具有本地词典缓存以及单词本功能。 版本号:v1.0  (2025-05-15)

二、核心功能说明

1. 基础翻译功能

  • 即时翻译:输入英文单词自动获取中文释义

  • 词性识别:自动标注单词词性(名词/动词等)

  • 网络查询:实时获取最新词典数据

  • 离线查询: 对以查过的单词,首先在本地SQLITE数据库查找

2. 数据存储系统

  • 翻译历史

    • 自动存储所有查询记录

    • 字段包含:英文单词、中文释义、词性、查询时间

  • 生词本管理

    • 支持手动添加/移除生词

    • 按添加时间倒序排列

    • 独立数据库表存储收藏关系

      """
      小小词典 V1.0 
      Copyright (C) 2025  yoyo
      
          This program is free software: you can redistribute it and/or modify
          it under the terms of the GNU General Public License as published by
          the Free Software Foundation, either version 3 of the License, or
          (at your option) any later version.
      
          This program is distributed in the hope that it will be useful,
          but WITHOUT ANY WARRANTY; without even the implied warranty of
          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
          GNU General Public License for more details.
      
          You should have received a copy of the GNU General Public License
          along with this program.  If not, see <https://www.gnu.org/licenses/>.
      """
      import sqlite3
      import requests
      from bs4 import BeautifulSoup
      
      def init_db():
          conn = sqlite3.connect('translations.db')
          c = conn.cursor()
          c.execute('''CREATE TABLE IF NOT EXISTS translations
                       (id INTEGER PRIMARY KEY AUTOINCREMENT,
                        english TEXT UNIQUE NOT NULL,
                        chinese TEXT NOT NULL,
                        pos TEXT,
                        create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP)''')
          # 新增生词本表
          c.execute('''CREATE TABLE IF NOT EXISTS vocabulary_book
                       (id INTEGER PRIMARY KEY AUTOINCREMENT,
                        word_id INTEGER UNIQUE,
                        add_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                        FOREIGN KEY(word_id) REFERENCES translations(id))''')
          conn.commit()
          conn.close()
          
      def add_to_vocabulary(word):
          conn = sqlite3.connect('translations.db')
          c = conn.cursor()
          # 获取单词ID
          c.execute("SELECT id FROM translations WHERE english=?", (word,))
          word_id = c.fetchone()
          if word_id:
              try:
                  c.execute("INSERT OR IGNORE INTO vocabulary_book (word_id) VALUES (?)", 
                           (word_id[0],))
                  conn.commit()
                  print(f"【{word}】已成功加入生词本")
              except sqlite3.IntegrityError:
                  print(f"【{word}】已在生词本中")
          else:
              print("请先查询该单词确保其存在于数据库")
          conn.close()
      
      def show_vocabulary():
          conn = sqlite3.connect('translations.db')
          c = conn.cursor()
          c.execute('''SELECT t.english, t.chinese, t.pos 
                       FROM translations t JOIN vocabulary_book v ON t.id = v.word_id
                       ORDER BY v.add_time DESC''')
          print("\n=== 我的生词本 ===")
          for idx, (en, cn, pos) in enumerate(c.fetchall(), 1):
              print(f"{idx}. {en} ({pos}): {cn}")
          conn.close()
          
      def save_to_db(english, chinese, pos):
          conn = sqlite3.connect('translations.db')
          c = conn.cursor()
          c.execute("INSERT OR IGNORE INTO translations (english, chinese, pos) VALUES (?, ?, ?)",
                    (english, chinese, pos))
          conn.commit()
          conn.close()
          
      def check_in_db(word):
          conn = sqlite3.connect('translations.db')
          c = conn.cursor()
          c.execute("SELECT english, chinese, pos FROM translations WHERE english=?", (word,))
          result = c.fetchone()
          conn.close()
          return result if result else None
          
      def translate_with_pos(word):
          # 先查本地数据库
          db_result = check_in_db(word)
          if db_result:
              print(f"该单词已在本地数据库查找到,翻译解释如下:")
              print(f"{db_result[0]} ({db_result[2]}): {db_result[1]}")
              choice = input("继续网络查询请输入w,直接退出请按回车:").strip().lower()
              if choice != 'w':
                  return None
          url = f"https://dict.youdao.com/w/eng/{word}/"
          headers = {'User-Agent': 'Mozilla/5.0'}
          
          try:
              response = requests.get(url, headers=headers)
              soup = BeautifulSoup(response.text, 'html.parser')
              
              # 获取中文释义
              trans = soup.find('div', class_='trans-container').get_text(strip=True)
              
              # 获取词性标注
              pos_tag = soup.find('span', class_='pos')
              pos = pos_tag.get_text() if pos_tag else "无词性标注"
              save_to_db(word, trans, pos)
              return f"{word} ({pos}): {trans}"
          except Exception as e:
              return f"翻译失败: {str(e)}"
      
      if __name__ == "__main__":
          init_db()
          print("命令: \q 退出;\w 加入生词本 \s 查看生词本 \h 查看帮助")
          while True:
              query = input("请输入英文单词或命令(输入\q退出): ").strip()
              if query.lower() == '\q':
                  break
              if query.lower() == '\w':
                  word = input("输入要收藏的单词: ").strip()
                  add_to_vocabulary(word)
                  continue
              if query.lower() == '\s':
                  show_vocabulary()
                  continue
              if query.lower() == '\h':
                  print("命令: \q 退出;\w 加入生词本 \s 查看生词本 \h 查看帮助")
                  continue
              trans = translate_with_pos(query)
              if trans:
                  print(f"-    {trans}")

      运行实例:

    • (.venv) D:\sanxia-src>translate.py
      命令: \q 退出;\w 加入生词本 \s 查看生词本 \h 查看帮助
      请输入英文单词或命令(输入\q退出): \s
      
      === 我的生词本 ===
      1. water (n.): n. 水,雨水;水域,(江、河、湖、海等)大片的水;(某个国家的)领海,海域(waters);不明朗(或未知的、困难、危险等)局面(waters);羊水(waters);(湖、海的)水面;水位;乘船,走水路v. 给……浇水,灌溉;给…...水喝,饮(动物);(风等使眼睛)流泪;流口水;(江河)流经并给(某地区)供水;加水冲淡,稀释【名】 (Water)(英)沃特(人名)[
                          复数
              waters
                           第三人称单数
              waters
                           现在分词
              watering
                           过去式
              watered
                           过去分词
              watered
                         ]
      请输入英文单词或命令(输入\q退出): yes
      -    yes (n.): adv. 是,是的n. 是(表示肯定)[
                          复数
              yesses或yeses
                           第三人称单数
              yesses或yeses
                           现在分词
              yessing
                           过去式
              yessed
                           过去分词
              yessed
                         ]
      请输入英文单词或命令(输入\q退出): level
      -    level (n.): n. 数量,程度;标准,水平;层次,级别;看待(或应对、理解)事物的方式;水平高度,相对高度;楼层;平地;水平仪adj. 平坦的,水平的;相同价值的,相同地位的;比分相同的;平静的,冷静的v. 使平整;推倒,夷平;(使)比分相同;(尤指用枪)瞄准;针对……(进行批评等);稳定下来,达到平衡(level off);坦诚相见;作水准测量【名】 (Level)(法)勒韦尔(人名)[
                          复数
              levels
                           第三人称单数
              levels
                           现在分词
              levelling或leveling
                           过去式
              levelled或leveled
                           过去分词
              levelled或leveled
                         ]
      请输入英文单词或命令(输入\q退出): jackfruit
      -    jackfruit (n.): n. 木菠萝;菠萝蜜

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux笔记】——线程互斥与互斥锁的封装

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;Linux &#x1f339;往期回顾&#x1f339;&#xff1a;【Linux笔记】——Linux线程封装 &#x1f516;流水不争&#xff0c;争的是滔滔不息 一、线程互斥的概念二、互…

Android屏幕采集编码打包推送RTMP技术详解:从开发到优化与应用

在现代移动应用中&#xff0c;屏幕采集已成为一个广泛使用的功能&#xff0c;尤其是在实时直播、视频会议、远程教育、游戏录制等场景中&#xff0c;屏幕采集技术的需求不断增长。Android 平台为开发者提供了 MediaProjection API&#xff0c;这使得屏幕录制和采集变得更加简单…

【深度学习】残差网络(ResNet)

如果按照李沐老师书上来&#xff0c;学完 VGG 后还有 NiN 和 GoogLeNet 要学&#xff0c;但是这两个我之前听都没听过&#xff0c;而且我看到我导师有发过 ResNet 相关的论文&#xff0c;就想跳过它们直接看后面的内容。 现在看来这不算是不踏实&#xff0c;因为李沐老师说如果…

《Python星球日记》 第94天:走近自动化训练平台

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、自动化训练平台简介1. Kubeflow Pipelines2. TensorFlow Extended (TFX) 二…

S7 200 smart连接Profinet转ModbusTCP网关与西门子1200PLC配置案例

控制要求&#xff1a;使用MODBUSTCP通信进行两台PLC之间的数据交换&#xff0c;由于改造现场不能改动程序&#xff0c;只留出了对应的IQ地址。于是客户决定使用网关进行通讯把数据传到plc。 1、读取服务器端40001~40005地址中的数据&#xff0c;放入到VW200~VW208中&#xff1…

学习笔记:黑马程序员JavaWeb开发教程(2025.4.7)

12.9 登录校验-Filter-入门 /*代表所有&#xff0c;WebFilter&#xff08;urlPatterns “/*”&#xff09;代表拦截所有请求 Filter是JavaWeb三大组件&#xff0c;不是SpringBoot提供的&#xff0c;要在SpringBoot里面使用JavaWeb&#xff0c;则需要加上ServletComponentScan注…

OpenCV-python灰度变化和直方图修正类型

实验1 实验内容 该段代码旨在读取名为"test.png"的图像&#xff0c;并将其转换为灰度图像。使用加权平均值法将原始图像的RGB值转换为灰度值。 代码注释 image cv.imread("test.png")h np.shape(image)[0] w np.shape(image)[1] gray_img np.zeros…

图像定制大一统?字节提出DreamO,支持人物生成、 ID保持、虚拟试穿、风格迁移等多项任务,有效解决多泛化性冲突。

字节提出了一个统一的图像定制框架DreamO&#xff0c;支持人物生成、 ID保持、虚拟试穿、风格迁移等多项任务&#xff0c;不仅在广泛的图像定制场景中取得了高质量的结果&#xff0c;而且在适应多条件场景方面也表现出很强的灵活性。现在已经可以支持消费级 GPU&#xff08;16G…

Nginx 动静分离在 ZKmall 开源商城静态资源管理中的深度优化

在 B2C 电商高并发场景下&#xff0c;静态资源&#xff08;图片、CSS、JavaScript 等&#xff09;的高效管理直接影响页面加载速度与用户体验。ZKmall开源商城通过对 Nginx 动静分离技术的深度优化&#xff0c;将静态资源响应速度提升 65%&#xff0c;带宽成本降低 40%&#xf…

在vs code 中无法运行npm并报无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查

问题&#xff1a; npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查 原因&#xff1a; 可能是环境变量未正确继承或终端配置不一致 解决方法&#xff1a; 1.找到自己的node.js的版本号 2.重新下载node.js 下载 node.js - https://nodejs.p…

分布式2(限流算法、分布式一致性算法、Zookeeper )

目录 限流算法 固定窗口计数器&#xff08;Fixed Window Counter&#xff09; 滑动窗口计数器&#xff08;Sliding Window Counter&#xff09; 漏桶算法&#xff08;Leaky Bucket&#xff09; 令牌桶算法&#xff08;Token Bucket&#xff09; 令牌桶与漏桶的对比 分布式…

ARM A64 LDR指令

ARM A64 LDR指令 1 LDR (immediate)1.1 Post-index1.2 Pre-index1.3 Unsigned offset 2 LDR (literal)3 LDR (register)4 其他LDR指令变体4.1 LDRB (immediate)4.1.1 Post-index4.1.2 Pre-index4.1.3 Unsigned offset 4.2 LDRB (register)4.3 LDRH (immediate)4.3.1 Post-index…

实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)

实习记录小程序 目录 基于SSM的习记录小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端&#xff1a; 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码…

老旧设备升级利器:Modbus TCP转 Profinet让能效监控更智能

在工业自动化领域&#xff0c;ModbusTCP和Profinet是两种常见的通讯协议。Profinet是西门子公司推出的基于以太网的实时工业以太网标准&#xff0c;而Modbus则是由施耐德电气提出的全球首个真正开放的、应用于电子控制器上的现场总线协议。这两种协议各有各的优点&#xff0c;但…

【从基础到模型网络】深度学习-语义分割-ROI

在语义分割中&#xff0c;ROI&#xff08;Region of Interest&#xff0c;感兴趣区域&#xff09;是图像中需要重点关注的部分。其作用包括&#xff1a;提高效率&#xff0c;减少高分辨率图像的计算量&#xff1b;增强分割精度&#xff0c;聚焦关键语义信息&#xff1b;减少背景…

掌握Docker:从运行到挂载的全面指南

目录 1. Docker的运行2. 查看Docker的启动日志3. 停止容器4. 容器的启动5. 删除容器6. 查看容器的详细信息7.一条命令关闭所有容器拓展容器的复制&#xff08;修改数据不会同步&#xff09;容器的挂载&#xff08;修改数据可以同步&#xff09;挂载到现有容器 1. Docker的运行 …

Pandas pyecharts数据可视化基础③

pyecharts基础绘图案例解析 引言思维导图代码案例分析 提前安装依赖同样操作安装完重新启动Jupyter Notebook三维散点图&#xff08;代码5 - 40&#xff09; 代码结果代码解析 漏斗图&#xff08;代码5 - 41&#xff09;结果代码解析 词云图&#xff08;代码5 - 42&#xff09;…

数据库中关于查询选课问题的解法

前言 今天上午起来复习了老师上课讲的选课问题。我总结了三个解法以及一点注意事项。 选课问题介绍 简单来说就是查询某某同学没有选或者选了什么课。然后查询出该同学的姓名&#xff0c;学号&#xff0c;课程号&#xff0c;课程名之类的。 sql文件我上传了。大家可以尝试练…

基于Bootstrap 的网页html css 登录页制作成品

目录 前言 一、网页制作概述 二、登录页面 2.1 HTML内容 2.2 CSS样式 三、技术说明书 四、页面效果图 前言 ‌Bootstrap‌是一个用于快速开发Web应用程序和网站的前端框架&#xff0c;由Twitter的设计师Mark Otto和Jacob Thornton合作开发。 它基于HTML、CSS和JavaScri…

组件导航 (Navigation)+flutter项目搭建-混合开发+分栏

组件导航 (Navigation)flutter项目搭建 接上一章flutter项目的环境变量配置并运行flutter 上一章面熟了搭建flutter并用编辑器运行了ohos项目&#xff0c;这章主要是对项目的工程化改造 先创建flutter项目&#xff0c;再配置Navigation 1.在开发视图的resources/base/profi…