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

news2024/9/27 5:10:13

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

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

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

页面展示:

代码:

handlergpt.py
from openai.lib.azure import AzureOpenAI

api_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 = Input
        return 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] = language

        translated_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)
                continue

            formatted_body = format_body(body)
            # 传递 language 参数到 handler
            translated_body = handler(formatted_body, language)['Output']

            # 插入翻译内容到指定目标列
            row[target_column - 1] = translated_body

            translated_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)  # 将日志作为结果返回给 Gradio


def 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.coloradmin.cn/o/2168908.html

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

相关文章

IOS-IPA签名工具 request_post 任意文件读取复现

0x01 产品描述&#xff1a; 苹果手机中的IPA是指iOS应用程序&#xff08;iPhone应用程序&#xff09;的安装包文件&#xff0c;其文件扩展名为.ipa。IPA文件是经过编译的、已签名的应用程序文件&#xff0c;可以在iOS设备上安装和运行。通常&#xff0c;开发者通过Xcode等开发工…

OpenHarmony(鸿蒙南向)——平台驱动指南【I2C】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 I2C&#xff08;Inter Integrated Circuit&#x…

【HarmonyOS】分页滚动文本组件

【HarmonyOS】实现分页滚动文本组件&#xff1a;为何选择 Scroll Text 而非 textOverflow import { promptAction } from kit.ArkUIEntry Component struct Page37 {State lineHeight: number 0 // 单行文本的高度State pageHeight: number 0 // 每页的最大高度State totalC…

相机、镜头参数详解以及相关计算公式

一、工业相机参数 1、分辨率 相机每次采集图像的像素点数&#xff0c;也是指这个相机总共有多少个感光晶片。在采集图像时&#xff0c;相机的分辨率对检测精度有很大的影响&#xff0c;在对同样打的视场成像时&#xff0c;分辨率越高&#xff0c;对细节的展示越明显。 相机像素…

【高频SQL基础50题】1-5

目录 1.可回收且低脂的产品 2. 使用唯一标识码替换员工ID 3.有趣的电影 4.每位教师所教授的科目种类的数量 5.每位经理的下属员工数量 1.可回收且低脂的产品 查询题。 # Write your MySQL query statement below SELECT product_id FROM Products WHERE low_fats"…

基于微信的原创音乐小程序的设计与实现+ssm论文源码调试讲解

第二章 开发工具及关键技术介绍 2.1 JAVA技术 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterrise JavaBeans&#xff09;的全面支持&#xff0c;java servlet AI&#xff0c;JS&#xff08;java server ages&…

基于单片机的宠物喂食(ESP8266、红外、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;采用L298N驱动连接P2.3和P2.4口进行电机驱动&#xff0c; 然后串口连接P3.0和P3.1模拟ESP8266&#xff0c; 红外传感器连接ADC0832数模转换器连接单片机的P1.0~P1.…

网络基础概念和 socket 编程

网络基础概念和 socket 编程 学习目标&#xff1a; 了解 OSI 七层模型、TCP/IP 四层模型结构了解常见的网络协议格式掌握网络字节序和主机字节序之间的转换理解 TCP 服务器端通信流程理解 TCP 客户端通信流程实现 TCP 服务器端和客户端的代码 推荐一个非常好的学习资料仓库 协…

RPA自动化流程机器人有哪些优势?

在数字化快速推进的大背景下&#xff0c;人工智能正在以前所未有的速度改变着生活和生产方式&#xff0c;而RPA自动化流程机器人作为其中一种最重要的革命性的技术&#xff0c;已经成为企业数字化中不可或缺的重要力量&#xff0c;让员工加速从“重复性工作”中摆脱出来。 金智…

OceanBase技术解析: 执行器中的自适应技术

在《OceanBase 数据库源码解析》这本书中&#xff0c;对于执行器的探讨还不够深入&#xff0c;它更多地聚焦于执行器的并行处理机制。因此&#xff0c;通过本文与大家分享OceanBase执行器中几种典型的自适应技术&#xff0c;作为对书中执行器部分的一个补充。 提升数据库分析性…

[Redis][主从复制][下]详细讲解

目录 1.复制1.全量复制2.1部分复制2.2复制积压缓冲区3.实时复制 2.总结 1.复制 1.全量复制 什么时候进行全量复制&#xff1f; 首次和主节点进行数据同步主节点不方便进行部分复制的时候 全量复制流程&#xff1a; 从节点发送psync命令给主节点进⾏数据同步&#xff0c;由于是…

①EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器

EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器https://item.taobao.com/item.htm?ftt&id798036415719 EtherCAT 串口网关 EtherCAT 转 RS485 型号&#xff1a; 1路总线EC网关 MS-A2-1011 2路总线EC网关 MS-A2-1021 4路总线EC网关 MS-A2-1041 技…

arcgis for js实现阴影立体效果

效果 实现 主要通过effect属性实现 代码: (这里以GeoJSON图层为例, 代码复制即可用) <!DOCTYPE html> <html lang"zn"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge&quo…

PHP 于小项目:从鉴权说起

PHP 于小项目&#xff1a;从鉴权说起 在当今这个开发技术多样化的时代&#xff0c;选择合适的开发语言和框架常常决定了项目的效率与成败。对于个人开发者&#xff0c;特别是那些进行小型、短期项目的人来说&#xff0c;PHP 是一种特别友好的选择。本文将通过介绍 PHP 实现鉴权…

YOLOv9改进,YOLOv9主干网络替换为GhostNetV3(2024年华为提出的轻量化架构,全网首发),助力涨点

摘要 GhostNetV3 是由华为诺亚方舟实验室的团队发布的,于2024年4月发布。 摘要:紧凑型神经网络专为边缘设备上的应用设计,具备更快的推理速度,但性能相对适中。然而,紧凑型模型的训练策略目前借鉴自传统模型,这忽略了它们在模型容量上的差异,可能阻碍紧凑型模型的性能…

仓库场景物品检测分类系统源码分享

仓库场景物品检测分类检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

显示adb报错,uniapp安装自定义基座

uni-app,uniCloud,serverless,真机运行常见问题,第1步 HX中没有运行到手机的菜单,第2步 电脑是否能检测到手机,第3步 电脑与手机是否建立信任调试关系,3.1 Android设备信任,3.2 iOS设备信任,第4步 HBuilderX检测手机,4.1 检测Android手https://uniapp.dcloud.net.cn/tutorial/r…

PHP爬虫APP程序:打造智能化数据抓取工具

在信息爆炸的时代&#xff0c;数据的重要性日益凸显。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;因其强大的功能和灵活性&#xff0c;成为开发爬虫程序的理想选择。本文将探讨如何使用PHP构建一个爬虫APP程序&#xff0c;以及其背后的思维逻辑和实现步骤。 什么是PHP爬…

【高分系列卫星简介——高分七号卫星(GF-7)】

高分七号卫星&#xff08;GF-7&#xff09; 高分七号&#xff08;GF-7&#xff09;卫星是中国高分辨率对地观测系统&#xff08;高分专项&#xff09;的重要组成部分&#xff0c;具有显著的技术突破和广泛的应用价值。以下是对高分七号卫星的详细介绍&#xff1a; 一、基本信息…

word2vector训练代码详解

目录 1.代码实现 2.知识点 1.代码实现 #导包 import math import torch from torch import nn import dltools #加载PTB数据集 &#xff0c;需要把PTB数据集的文件夹放在代码上一级目录的data文件中&#xff0c;不用解压 #批次大小、窗口大小、噪声词大小 batch_size, ma…