【azure-openai】批量翻译demo【python】【gradio】

要求:拥有azure-openai-api,上传文件为csv格式,utf-8编码

注意:如果出现乱码,重新运行,换种方式打开,有时候wps会自动改编码。

实现功能:选择语言,使用gpt4omini(可改)进行翻译,翻译某一列,把翻译后的内容放到某一列,翻译后的文件可浏览器下载,适合验证翻译质量。

页面展示:

代码:

handlergpt.py
from openai.lib.azure import AzureOpenAIapi_key = "sk-...."def get_response_gpt(sys_msg, input_new):client = AzureOpenAI(azure_endpoint="https://....openai.azure.com/",api_key="....",  ##省略号的内容都需要azure官网获取。详见主页博客api_version="2024-06-01")messages = [{"role": "system", "content": sys_msg},{"role": "user", "content": input_new}]response = client.chat.completions.create(model="4omini",messages=messages)return response.choices[0].message.content.strip()def bai2en(Input, language):sys_msg = (f"The current language of translation is <{language}>. ""Translate only the text while maintaining the original punctuation. ""Output only the translated text without any additional explanations. ""''contains the content you want to translate.""Only output the content in ''. Any other explanatory statements are prohibited.""Here is the text to be translated:\n")# sys_msg = (f"The current language of translation is English. "#                "Translate only the text while maintaining the original punctuation. "#                "Output only the translated text without any additional explanations. "#                "''contains the content you want to translate."#                "Only output the content in ''. Any other explanatory statements are prohibited."#                "Here is the text to be translated:\n"#            )if Input:input_new = Inputreturn str(get_response_gpt(sys_msg, input_new))else:return "文本有误,重新输入"def handler(input,language):Output = bai2en(input,language)return {"Output": Output}if __name__ == '__main__':Input = input()print(bai2en(Input))
main.py 
import os
import csv
import gradio as gr
from handlergpt import handler# 批量翻译,无延时
def process_csv_file(csv_filepath, output_filepath, language, source_column, target_column):output_log = []  # 用于存储输出日志with open(csv_filepath, 'r', encoding='utf-8') as csvfile:reader = csv.reader(csvfile)headers = next(reader)  # 读取表头# 确保表头列表足够长max_column = max(source_column, target_column)if len(headers) < max_column:headers.extend([''] * (max_column - len(headers)))# 设置目标列的表头为语言参数headers[target_column - 1] = languagetranslated_rows = []row_count = 0  # 计数器,用于输出当前处理的行数for row in reader:row_count += 1# 确保每一行的列数足够if len(row) < max_column:row.extend([''] * (max_column - len(row)))  # 扩展到所需列数body = row[source_column - 1].strip()  # 获取指定列的内容if not body:translated_rows.append(row)  # 保持空行log_message = f"Row {row_count}: Empty body in source column {source_column}, skipped translation."output_log.append(log_message)print(log_message)continueformatted_body = format_body(body)# 传递 language 参数到 handlertranslated_body = handler(formatted_body, language)['Output']# 插入翻译内容到指定目标列row[target_column - 1] = translated_bodytranslated_rows.append(row)# 输出当前处理的进度log_message = f"Row {row_count}: Translated body from '{body[:30]}...' to '{translated_body[:30]}...'"output_log.append(log_message)print(log_message)  # 控制台输出# 保存结果到新的 CSV 文件,包含修改后的表头with open(output_filepath, 'w', newline='', encoding='utf-8') as outfile:writer = csv.writer(outfile)writer.writerow(headers)  # 写入表头writer.writerows(translated_rows)completion_message = f"Translation complete. File saved to {output_filepath}"output_log.append(completion_message)print(completion_message)  # 控制台输出return "\n".join(output_log)  # 将日志作为结果返回给 Gradiodef format_body(body):# 对正文进行格式化处理return body# Gradio UI函数
def translate_file(csv_file, language, source_column, target_column):if csv_file is None:return "Please upload a CSV file."# 为了确保文件保存为本地可下载文件,使用临时文件路径output_filepath = os.path.join(os.getcwd(), "自定义路径.csv")csv_filepath = csv_file.name# 调用翻译函数process_csv_file(csv_filepath, output_filepath, language, int(source_column), int(target_column))# 返回生成的文件路径,供用户下载return output_filepath# 创建 Gradio 界面
def main():# 定义语言选择、源列、目标列和文件上传language = gr.Dropdown(choices=["English", "Chinese", "Spanish", "Portuguese", "French", "German", "Italian", "Japanese", "Korean","Hindi", "Bengali", "Russian", "Indonesian", "Vietnamese", "Dutch", "Hungarian", "Turkish", "Polish"],  ##可以添加语言,无特殊标志符,只要gpt能懂就行label="Target Language")csv_file_path = gr.File(label="CSV File to Translate")source_column = gr.Number(label="Source Column (e.g., 1 for first column)", value=1, precision=0)target_column = gr.Number(label="Target Column (e.g., 3 for third column)", value=3, precision=0)# 创建 Gradio 界面,允许用户上传文件并提供下载iface = gr.Interface(fn=translate_file,inputs=[csv_file_path, language, source_column, target_column],outputs=gr.File(label="Download Translated CSV"),  # 设置为文件下载类型title="CSV Translation Tool",description="Upload a CSV file, choose a target language, specify source and target columns, and download the translated CSV.")iface.launch(server_name="192.xxx.xx.xx", server_port=xxxx)  # 允许局域网访问,设置端口if __name__ == '__main__':main()

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

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

相关文章

使用docker形式部署prometheus+alertmanager+钉钉告警

一、拉取所需要的镜像 docker pull prom/node-exporter docker pull grafana/grafana docker pull prom/prometheus docker pull prom/alertmanager 其中 prom/node-exporter&#xff1a;用于收集主机系统信息和指标的 grafana/grafana&#xff1a;是一个用于可视化和分…

mac 上配置Jmeter代理进行web脚本录制过程容易踩坑的点

macOS 配置 Jmeter代理录制web脚本&容易踩坑的点 mac配置下载&#xff1a;前景提要&#xff1a;Jmeter中具体操作容易踩坑的点1、进入浏览器后&#xff0c;显示访问连接不安全。2、证书失效需要重新生成3、重新生成证书的方式4、没有生成新的证书5、jmeter安装路径找不到 m…

硬件设计很简单?合宙低功耗4G模组Air780E—开机启动及外围电路设计

Air780E是合宙低功耗4G-Cat.1模组经典型号之一&#xff0c;上期我们解答了大家关心的系列问题&#xff0c;并讲解了选型的注意要点。 有朋友问&#xff1a;能不能讲些硬件设计相关的内容&#xff1f; 模组的上电开机&#xff0c;是硬件设计调试的第一步。 本期特别分享——Ai…

MySQL数据库进阶知识(五)《锁》

学习目标&#xff1a; 一周掌握数据库锁相关知识 学习内容&#xff1a; 一. 概述 介绍 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共…

将本地文件上传至虚拟机

1、查看虚拟机ip地址 ip addr 2、xshell连接上虚拟机 连接root连接不上的解决办法更改配置文件vim /etc/ssh/sshd_config 重启&#xff08;sudo service ssh restart&#xff09;并查看是否开启ssh服务&#xff08;sudo ps -e | grep ssh&#xff09; 即可连接成功 3、复制文…

在实时语音交互上超过GPT-4o,端到端语音模型Mini-Omni部署

Mini-Omni是清华大学开源的多模态大型语言模型&#xff0c;具备实时语音输入和流式音频输出的能力。 Mini-Omni模型能够一边听、一边说&#xff0c;一边思考&#xff0c;类似于ChatGPT的语言对话模式。 Mini-Omni模型的主要特点是能够直接通过音频模态进行推理&#xff0c;并…

Skywalking告警配置

背景 skywalking 9.7.0&#xff0c;地址&#xff1a;Backend setup | Apache SkyWalking helm&#xff1a;skywalking-helm:4.5.0&#xff0c;地址&#xff1a;skywalking-helm/chart/skywalking/values.yaml at v4.5.0 首先来说一下为什么使用skywalking告警&#xff1f; …

JS设计模式之组合模式:打造灵活高效的对象层次结构

引言 当我们构建复杂的应用程序时&#xff0c;经常会遇到处理对象层次结构的情况。这些层次结构通常是树形结构&#xff0c;由组合节点和叶子节点组成。在这样的情况下&#xff0c;JavaScript 设计模式之一的组合模式就能派上用场。 组合模式是一种结构型设计模式&#xff0c…

MySQL从入门到精通 - 基础篇

一、MySQL概述 1. 数据库相关概念 二、SQL &#xff08;1&#xff09;SQL通用语法 &#xff08;2&#xff09;SQL分类 &#xff08;3&#xff09;数据定义语言DDL 数据库操作 表操作 数据类型 1. 数值类型 2. 字符串类型 二进制数据&#xff1a;以二进制格式&#xff08;0和…

【JavaEE初阶】深入解析死锁的产生和避免以及内存不可见问题

前言&#xff1a; &#x1f308;上期博客&#xff1a;【后端开发】JavaEE初阶—线程安全问题与加锁原理&#xff08;超详解&#xff09;-CSDN博客 &#x1f525;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 ⭐️小编会在后端开发的学习中不断更新~~~ &#…

C#图像处理学习笔记(屏幕截取,打开保存图像、旋转图像、黑白、马赛克、降低亮度、浮雕)

1、创建Form窗体应用程序 打开VS&#xff0c;创建新项目-语言选择C#-Window窗体应用&#xff08;.NET Framework) 如果找不到&#xff0c;检查一下有没有安装.NET 桌面开发模块&#xff0c;如果没有&#xff0c;需要下载&#xff0c;记得勾选相关开发工具 接上一步&#xff0c;…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第四篇-着色器投影-接收阴影部分】

上一章中实现了体积渲染的光照与自阴影&#xff0c;那我们这篇来实现投影 回顾 勘误 在开始本篇内容之前&#xff0c;我已经对上一章中的内容的错误进行了修改。为了确保不会错过这些更正&#xff0c;同时也避免大家重新阅读一遍&#xff0c;我将在这里为大家演示一下修改的…

叉车司机信息权限采集系统,保障与优化叉车运输网络的安全

叉车司机信息权限采集系统可以通过监控司机的行车行为和车辆状况&#xff0c;实时掌握车辆位置和行驶路线&#xff0c;从而提高运输安全性&#xff0c;优化运输网络&#xff0c;降低事故风险。同时&#xff0c;该系统还可以通过对叉车司机信息和行车数据的分析&#xff0c;优化…

Flutter屏幕适配

我们可以根据下面有适配属性的Widget来进行屏幕适配 1.MediaQuery 通过它可以直接获得屏幕的大小&#xff08;宽度 / 高度&#xff09;和方向&#xff08;纵向 / 横向&#xff09; Size screenSize MediaQuery.of(context).size; double width screenSize.width; double h…

springboot异常(三):异常处理原理

&#x1f345;一、BasicErrorController ☘️1.1 描述 BasicErrorController是Springboot中默认的异常处理方法&#xff0c;无需额外的操作&#xff0c;当程序发生了异常之后&#xff0c;Springboot自动捕获异常&#xff0c;重新请求到BasicErrorController中&#xff0c;在B…

网络安全 DVWA通关指南 DVWA Stored Cross Site Scripting (存储型 XSS)

DVWA Stored Cross Site Scripting (存储型 XSS) 文章目录 DVWA Stored Cross Site Scripting (存储型 XSS)XSS跨站原理存储型 LowMediumHighImpossible 参考文献 WEB 安全靶场通关指南 相关阅读 Brute Force (爆破) Command Injection&#xff08;命令注入&#xff09; Cro…

Spring:项目中的统一异常处理和自定义异常

介绍异常的处理方式。在项目中&#xff0c;都会进行自定义异常&#xff0c;并且都是需要配合统一结果返回进行使用。 1.背景引入 &#xff08;1&#xff09;背景介绍 为什么要处理异常&#xff1f;如果不处理项目中的异常信息&#xff0c;前端访问我们后端就是显示访问失败的…

eslint-plugin-react的使用中,所出现的react版本警告

记一次使用eslint-plugin-react的警告 Warning: React version not specified in eslint-plugin-react settings. See https://github.com/jsx-eslint/eslint-plugin-react#configuration . 背景 我们在工程化项目中&#xff0c;常常会通过eslint来约束我们代码的一些统一格…

基于RPA+BERT的文档辅助“悦读”系统 | OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

关于寻址方式的讨论

### 对话内容 **学生B&#xff08;ESFP&#xff09;**&#xff1a;老师&#xff0c;寻址方式听起来很复杂&#xff0c;能详细讲解一下吗&#xff1f;而且最好能举些具体例子&#xff01;&#x1f60a; **老师&#xff08;ENTP&#xff09;**&#xff1a;当然可以&#xff01;…