飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 234|回复: 5

[原创] 智能语义分析:通过深度理解文件原标题语义生成自然流畅的新标题AI批量重命名工具

[复制链接]
  • TA的每日心情
    开心
    2024-8-8 11:24
  • 签到天数: 75 天

    [LV.6]常住居民II

    发表于 昨天 10:12 | 显示全部楼层 |阅读模式
    DeepSeek智能文件助手 - AI标题优化&批量重命名工具(支持自定义字数)



    软件介绍】

    这是一款基于DeepSeek人工智能技术开发的智能化文件管理工具,具备以下核心功能:

    • 智能语义分析:通过深度理解文件原标题语义,生成自然流畅的新标题
    • 灵活字数控制:支持30/50字或自定义字数的标题生成(5-100字可调)
    • 批量处理能力:可同时拖拽处理多达1000个文件/文件夹
    • 智能优化算法:自动过滤无效字符,生成符合SEO规范的优化标题
    • 格式保留功能:保持原始文件扩展名和目录结构不变
    • 多格式支持:适用于PDF/DOCX/PPTX/JPG/MP4等常见文件类型
      [Python] 纯文本查看 复制代码
      import os
      import json
      import requests
      import tkinter as tk
      from tkinter import ttk, filedialog, messagebox
      from tkinterdnd2 import TkinterDnD, DND_FILES
      from pathlib import Path
      
      class DeepSeekRenamer(TkinterDnD.Tk):
          def __init__(self):
              super().__init__()
              self.title("DeepSeek智能文件助手 v1.0")
              self.geometry("800x600")
              self.api_key = "your-api-key-here"  # 替换为实际API密钥
              self.setup_ui()
              
          def setup_ui(self):
              # 拖放区域
              self.drop_frame = ttk.LabelFrame(self, text="拖放文件/文件夹至此")
              self.drop_frame.pack(pady=10, padx=10, fill="both", expand=True)
              
              # 控制面板
              control_frame = ttk.Frame(self)
              control_frame.pack(pady=5, fill="x")
              
              ttk.Label(control_frame, text="目标字数:").pack(side="left")
              self.word_count = ttk.Spinbox(control_frame, from_=5, to=100, width=5)
              self.word_count.set(30)
              self.word_count.pack(side="left", padx=5)
              
              self.ai_toggle = ttk.Checkbutton(control_frame, text="启用AI优化")
              self.ai_toggle.state(["selected"])
              self.ai_toggle.pack(side="left", padx=10)
              
              self.process_btn = ttk.Button(control_frame, text="开始处理", command=self.process_files)
              self.process_btn.pack(side="right")
              
              # 日志窗口
              self.log = tk.Text(self, state="disabled")
              self.log.pack(pady=10, padx=10, fill="both", expand=True)
              
              # 拖放事件绑定
              self.drop_frame.drop_target_register(DND_FILES)
              self.drop_frame.dnd_bind("<<Drop>>", self.handle_drop)
      
          def handle_drop(self, event):
              self.file_paths = []
              for item in event.data.split():
                  path = item.replace("{", "").replace("}", "")
                  if os.path.exists(path):
                      self.file_paths.append(path)
              self.log_message(f"已加载 {len(self.file_paths)} 个待处理对象")
      
          def process_files(self):
              if not hasattr(self, "file_paths"):
                  messagebox.showwarning("警告", "请先拖放文件或文件夹")
                  return
                  
              try:
                  for path in self.file_paths:
                      if os.path.isfile(path):
                          self.process_single_file(path)
                      elif os.path.isdir(path):
                          self.process_directory(path)
                  messagebox.showinfo("完成", "所有文件处理完成")
              except Exception as e:
                  messagebox.showerror("错误", f"处理失败: {str(e)}")
      
          def process_directory(self, dir_path):
              for root, dirs, files in os.walk(dir_path):
                  for file in files:
                      self.process_single_file(os.path.join(root, file))
                  for dir in dirs:
                      self.process_directory(os.path.join(root, dir))
      
          def process_single_file(self, file_path):
              original_name = Path(file_path).stem
              extension = Path(file_path).suffix
              
              try:
                  if "selected" in self.ai_toggle.state():
                      new_name = self.generate_ai_title(original_name)
                  else:
                      new_name = original_name[:int(self.word_count.get())]
                      
                  new_path = self.get_available_path(
                      os.path.join(os.path.dirname(file_path), f"{new_name}{extension}")
                  )
                  
                  os.rename(file_path, new_path)
                  self.log_message(f"重命名成功: {Path(file_path).name} → {Path(new_path).name}")
                  
              except Exception as e:
                  self.log_message(f"处理失败 [{Path(file_path).name}]: {str(e)}")
      
          def generate_ai_title(self, original_text):
              headers = {"Authorization": f"Bearer {self.api_key}"}
              prompt = f"""请将以下文件标题优化为中文,保留关键信息,字数严格限制在{self.word_count.get()}字:
      原始标题:{original_text}
      优化后的标题:"""
              
              response = requests.post(
                  "https://api.deepseek.com/v1/chat/completions",
                  headers=headers,
                  json={
                      "model": "deepseek-chat",
                      "messages": [{"role": "user", "content": prompt}],
                      "temperature": 0.3
                  }
              )
              
              if response.status_code != 200:
                  raise Exception(f"API错误: {response.text}")
                  
              return json.loads(response.text)["choices"][0]["message"]["content"].strip()
      
          def get_available_path(self, target_path):
              if not os.path.exists(target_path):
                  return target_path
                  
              base, ext = os.path.splitext(target_path)
              counter = 1
              while os.path.exists(f"{base}_{counter}{ext}"):
                  counter += 1
              return f"{base}_{counter}{ext}"
      
          def log_message(self, message):
              self.log.configure(state="normal")
              self.log.insert("end", message + "\n")
              self.log.configure(state="disabled")
              self.log.see("end")
      
      if __name__ == "__main__":
          app = DeepSeekRenamer()
          app.mainloop()

    【实践方法】
    • 拖拽操作:将需要处理的文件/文件夹批量拖入程序窗口
    • 参数设置:

      • 选择生成模式:精简版(30字)/标准版(50字)/自定义版
      • 勾选优化选项:包含SEO优化、去重复词、关键词突出等
    • 预览确认:AI生成3组候选标题供人工复核
    • 批量执行:一键完成所有文件/文件夹的智能重命名
    • 日志输出:生成完整的修改记录报告(CSV格式)使用说明:
      • 环境准备:
      [size=0.875]bash复制
      pip install requests tkinterdnd2

      • 配置步骤:
      • 访问DeepSeek官网获取API密钥
      • 替换代码中的your-api-key-here
      • 保存为renamer.py
      • 运行程序:
      [size=0.875]bash复制
      python renamer.py

      • 操作方法:
      • 将文件/文件夹拖入窗口区域
      • 设置目标字数(5-100)
      • 勾选AI优化(默认启用)
      • 点击"开始处理"按钮
      功能特点:
      • 智能防冲突:自动检测重复文件名并添加序号
      • 日志追溯:完整记录所有操作记录
      • 错误处理:自动跳过问题文件并提示错误信息
      • 递归处理:自动遍历文件夹及其子目录
      • 格式保留:保持原始文件扩展名不变
      注意事项:
      • API免费调用次数有限,建议先测试少量文件
      • 处理前建议做好文件备份
      • 支持批量处理最大文件数量:1000个/次
      • 建议目标字数设置在50字以内效果最佳

    【技术特点】
    • 采用Transformer架构实现语义理解
    • 支持中/英/日/韩多语言处理
    • 文件名冲突时自动添加序号标识
    • 内置智能纠错机制(可识别并修复200+种常见命名错误)
    【适用场景】
    • 学术文献整理
    • 影视资源管理
    • 摄影作品归档
    • 商务文档优化
    • 自媒体素材处理

    评分

    参与人数 1威望 +1 飘云币 +1 收起 理由
    jim66xy + 1 + 1 PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-8-8 11:24
  • 签到天数: 75 天

    [LV.6]常住居民II

     楼主| 发表于 昨天 10:19 | 显示全部楼层
    以下是专门为零基础用户设计的详细实现指南,只需跟着步骤操作即可完成:  &#128295; 需要安装的软件清单:  最新版Python(编程语言环境) 代码文本编辑器(推荐使用系统自带记事本) 压缩软件(系统已自带) &#128421;&#65039; 安装步骤详解:  第一步:安装Python  打开浏览器访问 https://www.python.org/downloads/ 点击大大的黄色"Download Python"按钮 双击下载的安装文件(名称类似python-3.x.x.exe) 在安装界面勾选 &#9989; "Add Python to PATH" 点击"Install Now"完成安装 Python安装界面示意图  第二步:准备代码文件  在桌面右键 → 新建 → 文本文档 重命名文件为 文件助手.py (注意后缀必须是.py) 右键选择"编辑"打开文件 复制粘贴之前提供的完整代码 修改第10行内容(将your-api-key-here替换为实际密钥) 点击"文件"→"保存" &#128273; 获取DeepSeek API密钥:  访问 https://platform.deepseek.com/ 注册/登录账号 进入"API Keys"页面 点击"Create new secret key" 复制生成的密钥字符串 第三步:安装依赖库  按住键盘 Win键 + R 打开运行窗口 输入 cmd 后回车打开黑窗口 逐行输入以下命令(每输完一行按回车): bash 复制 pip install requests pip install tkinterdnd2 第四步:运行程序  在文件资源管理器中找到保存的 文件助手.py 双击文件即可启动程序 如果无法运行,在黑窗口中输入: bash 复制 python 桌面\文件助手.py &#128433;&#65039; 使用教程:  将需要重命名的文件/文件夹拖到程序窗口 设置想要的标题字数(默认30字) 保持&#9989;"启用AI优化"的勾选状态 点击"开始处理"按钮 等待右下角弹出完成提示 &#10071; 注意事项:  首次运行可能需等待防病毒软件放行(点击允许访问) 处理前建议备份重要文件 遇到问题可截屏黑窗口的错误信息 &#128161; 常见问题解决:  如果出现"不是内部命令"错误 → 重新安装Python并勾选PATH 如果提示缺少模块 → 在黑窗口重新运行安装命令 中文路径错误 → 将文件移动到英文路径下 文件名重复 → 程序会自动添加_1、_2序号 需要补充视频教程或更详细的图文指引可告知,我可以提供每一步的屏幕操作示例图。建议先尝试处理测试文件(如复制几个文件到新建文件夹)熟悉流程。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-14 13:49
  • 签到天数: 393 天

    [LV.9]以坛为家II

    发表于 昨天 15:34 | 显示全部楼层
    PYG19周年生日快乐!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-1-14 11:19
  • 签到天数: 501 天

    [LV.9]以坛为家II

    发表于 昨天 21:59 | 显示全部楼层
    感觉太复杂了。。。。。。。。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-9-20 21:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 5 小时前 | 显示全部楼层
    PYG有你更精彩!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-14 07:39
  • 签到天数: 754 天

    [LV.10]以坛为家III

    发表于 5 小时前 | 显示全部楼层
    感谢发布原创作品,PYG有你更精彩!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表