Python 翻译词典小程序功能说明

本工具是基于Python开发的智能翻译系统,采用有道词典进行翻译,并具有本地词典缓存以及单词本功能,这篇文章主要介绍了Python 翻译词典小程序,需要的朋友可以参考下

目录
  • 一、概述
  • 二、核心功能说明
    • 1. 基础翻译功能
    • 2. 数据存储系统

一、概述

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

二、核心功能说明

1. 基础翻译功能

  • 即时翻译:输入英文单词自动获取中文释义
  • 词性识别:自动标注单词词性(名词/动词等)
  • 网络查询:实时获取最新词典数据
  • 离线查询: 对以查过的单词,首先在本地SQLITE数据库查找

2. 数据存储系统

  • 翻译历史
    • 自动存储所有查询记录
    • 字段包含:英文单词、中文释义、词性、查询时间
  • 生词本管理
    • 支持手动添加/移除生词
    • 按添加时间倒序排列
    • 独立数据库表存储收藏关系
"""
小小词典 V1.0 
Copyright (C) 2025  Yang xiaofan 
    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. 木菠萝;菠萝蜜

到此这篇关于Python 翻译词典小程序功能说明的文章就介绍到这了,更多相关Python 翻译词典内容请搜索骃骐网以前的文章或继续浏览下面的相关文章希望大家以后多多支持骃骐网!

您可能感兴趣的文章:

  • 告别网页搜索!教你用python实现一款属于自己的翻译词典软件
  • python爬虫实现中英翻译词典

相关推荐:

如何在 QGraphicsView 中实现平移与缩放功能并保持状态不丢失

本文介绍如何为实时更新的相机图像显示控件(qgraphicsview)添加稳定、可持久化的缩放和平移功能,解决图像刷新后缩放重置的问题,并确保缩放以鼠标位置为中心。 本文介绍如何为实时更新的相机图像显示控件(qgraphicsview)添加稳定、可持久化的缩放和平移功能,解决图像刷新后缩放重置的问题,并确保缩放以鼠标位置为中心。 在基于 PyQt5 的实时图像显示应用中(如工业相机或视频流),QG...

怎样在Python Django项目中实现文件上传功能_配置MEDIA_ROOT与URL

Django生产环境上传文件访问404,根本原因是DEBUG=False时Django不再提供media服务,必须由Nginx/Apache等Web服务器通过location /media/ { alias MEDIA_ROOT; }显式托管,且MEDIA_URL与MEDIA_ROOT路径需严格匹配。 为什么上传的文件访问 404?先确认 MEDIA_URL 和 MEDIA_ROOT 是否匹配 绝...

uni-app运动步数统计功能的开发

开发uni-app的运动步数统计功能需要以下步骤:1. 使用uni.getsysteminfosync()和uni.getprovider()获取ios和android设备的步数数据;2. 通过uni.setstorage()和uni.getstorage()存储和读取步数数据;3. 使用vue的双向数据绑定和uni-app的ui组件库展示步数数据,确保用户体验流畅。 开发uni-app的运动步数...

通过IIS实现URL参数值的文件下载功能

本文介绍如何通过IIS服务器,接收URL中的参数值,并将其作为文件提供下载。重点讲解了使用Session传递数据和直接从URL获取参数两种方法,并提供了详细的代码示例,帮助开发者快速实现该功能。避免了URL参数长度限制的问题,确保长字符串也能顺利传递。 通过IIS实现URL参数值的文件下载功能 本教程将引导你完成一个常见的Web开发任务:接收URL中的参数,并将其内容作为文件提供下载。我们将使用I...

实现网页选项过滤功能的教程

本文档旨在指导开发者如何实现一个简单的网页选项过滤功能。通过创建动态卡片并利用 JavaScript 控制其显示与隐藏,用户可以根据预设的类别筛选内容。本文将提供完整的代码示例,并详细解释实现步骤,帮助开发者快速构建类似的功能。 搭建HTML结构 首先,我们需要创建一个基本的HTML结构,包括用于显示过滤选项的按钮和用于显示卡片的容器。 All Catholic School Regular Sc...

如何在网页中实现交互式图片裁剪功能

本教程详细介绍了如何在网页中实现客户端图片裁剪功能,利用Croppie.js库结合HTML和CSS构建用户界面,并通过JavaScript处理文件上传、实时预览和最终裁剪操作。文章涵盖了环境搭建、核心代码实现以及关键API的使用,旨在帮助开发者为用户提供直观的图片编辑体验。客户端图片裁剪技术详解 在现代web应用中,用户上传图片并进行个性化处理(如裁剪、缩放)已成为常见需求。本教程将深入探讨如何利...

js如何实现倒计时功能

要确保javascript倒计时在不同设备和浏览器上的准确性,核心是避免完全依赖客户端时间,可通过服务器时间校准来解决:在页面加载时从后端获取准确时间戳,计算本地与服务器时间差,在倒计时逻辑中使用校准后的时间;2. 使用setinterval虽常见,但存在精度偏差,可结合requestanimationframe实现更流畅的更新,尤其适用于高频更新场景;3. 注意时区处理,目标时间应以utc存储并...

耳机在iOS和安卓系统上功能有何不同?

iOS侧重生态联动与AAC编解码优化,安卓支持更多编解码器但体验碎片化,导致音质、功能及系统集成存在差异。 耳机在iOS和安卓系统上的功能差异主要体现在编解码器支持、系统级优化、以及一些独有的功能体验上。简单来说,iOS更倾向于自家生态的优化,而安卓则更加开放,但不同品牌和型号的安卓设备之间也存在差异。 编解码器支持、音频优化、生态联动 iOS和安卓对蓝牙音频编解码器的支持有什么区别? iOS设备...