首页 > 其他分享 >借助AI进行Odoo-OCA模块的中国本地化自动化翻译

借助AI进行Odoo-OCA模块的中国本地化自动化翻译

时间:2024-06-16 23:35:22浏览次数:11  
标签:翻译 msgs AI batch filename OCA Odoo po batchs

背景描述

最近在参与OCA模块的中文翻译,在线操作Weblate逐条不够丝滑,遂下载po文件使用poedit进行翻译;
但是用poedit操作几次之后发现几乎都是重复劳动,本着程序员一个活重复干三遍以上就自动化的原则,驱动通义千问去编写脚本调用AI的接口进行自动化的翻译。

LLM API Provider

用的月之暗面的免费接口,可以去申请一下
https://platform.moonshot.cn/console/pay-detail

上代码


import argparse
import os
import json
import time
from openai import OpenAI
from polib import pofile

CHAT_API_URL = '*****'
CHAT_API_KEY = '*****'
CHAT_MODEL = 'moonshot-v1-8k'


def _read_po(filename):

    def _po_to_json_batches(po_filepath, batch_size=30):
        """
        从PO文件读取翻译项,并按批次转换为JSON字符串。

        :param po_filepath: PO文件路径
        :param batch_size: 每个批次包含的条目数
        :return: 一个生成器,每次迭代返回一个批次的JSON字符串
        """
        try:
            po = pofile(po_filepath)
        except Exception as ex:
            raise ValueError(f'解析po文件{po_filepath}失败,错误如下:\n{ex}')
        entries = list(po)
        total_entries = len(entries)

        batchs = []
        for i in range(0, total_entries, batch_size):
            batch_data = {}
            for j in range(i, min(i + batch_size, total_entries)):
                entry = entries[j]
                if not entry.translated():
                    batch_data[str(j)] = {
                        'en_US': entry.msgid,
                        'zh_ZN': ''
                    }
            if len(batch_data) > 0:
                batchs.append(json.dumps(batch_data, ensure_ascii=False))
        return batchs

    msg_batchs = _po_to_json_batches(filename)
    for i in range(len(msg_batchs)):
        msg_batch = msg_batchs[i]
        print(f'正在处理翻译:{i+1} / {len(msg_batchs)}')
        _translate_with_ai(filename, msg_batch)
        time.sleep(5)


def _translate_with_ai(filename, msgs):
    client = OpenAI(api_key=CHAT_API_KEY, base_url=CHAT_API_URL)

    response = client.chat.completions.create(
        model="moonshot-v1-8k",
        messages=[
            {
                "role": "system",
                "content": '''你是一个翻译专家,擅长信息化系统的中英文翻译;
在后续的对话中请帮助我处理一些翻译工作,要求如下:
将输入的JSON格式中的en_US的词条进行翻译后回填到zh_CN字段中
按原格式同时返回源词条,注意标点符号的一致性''',
            },
            {"role": "user", "content": msgs},
        ],
        temperature=0.3,
        stream=False,
    )
    if len(response.choices) == 1:
        res = response.choices[0].message.content
        try:
            res_msgs = json.loads(res)
            # print(res_msgs)
        except Exception as ex:
            print('解析返回JSON失败:', ex, '\n', res)
        _save_translations(filename, res_msgs)
    else:
        raise ValueError('未知错误')


def _save_translations(filename, msgs):
    po = pofile(filename)
    for i in list(msgs.keys()):
        entry = po[int(i)]
        entry.msgstr = msgs[str(i)]['zh_CN']
    po.save()
    print('翻译完成!~~')


def main():
    parser = argparse.ArgumentParser(description='Translate the po file')
    parser.add_argument("-f", "--file", help="po文件的路径", type=str, required=True)
    # parser.add_argument("-f", "--file", help="po文件的路径", type=str, default='zh_CN.po')
    args = parser.parse_args()
    filename = args.file
    print(f"po文件的路径: {args.file}")
    if os.path.exists(filename):
        _read_po(filename)
    else:
        raise FileNotFoundError(f'文件{filename}不存在!')


if __name__ == "__main__":
    main()

半分钟翻完一个文件,效果相当哇噻

标签:翻译,msgs,AI,batch,filename,OCA,Odoo,po,batchs
From: https://www.cnblogs.com/xtanuiha/p/18251478

相关文章

  • 文字游侠:AI一键创作高质量图文,小白也能上手!附上渠道和指导教程!
    近期发现了一款极为实用的AI文章生成工具——“文字游侠”,这款工具能为自媒体文章创作提升极大的效率。不妨先来看看下面关于文字游侠的视频简单讲解介绍:利用’文字游侠‘在今日头条上发布图文,每天10分钟迅速爆款!那么,如何使用【文字游侠】工具呢?关于文字游侠的具体用......
  • 仅凭一图,即刻定位,AI图像定位技术
    AI图像定位技术,解锁空间密码!仅凭一图,即刻定位,精准至经纬度坐标,让世界无处不晓。试试看能否猜中这张自拍照的背景所在?可别低估了A的眼力,答案说不定会让你大吃一惊呢。近期,一款名为GeoSpy的AI工具成为了公众瞩目的焦点。这款工具凭借其非凡能力,仅凭照片中的细微元素——如光线......
  • 安卓应用开发——Android Studio中This project contains Java compilation errors, w
    这个提示信息表明你的Java项目中存在编译错误,这些错误可能会导致自定义视图(customviews)的渲染失败。要解决这个问题,你需要先修复这些编译问题。以下是一些步骤,你可以按照这些步骤来查找并修复Java编译错误:查看编译错误:在你的集成开发环境(IDE)中,通常会有一个编译错误或警......
  • 盘点国内外免费AI视频工具,助你先人一步拥抱AI
    哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。6月13日,LumaAI在X平台(原Twitter)宣布其视频生成模型DreamMachine开放测试,并提供免费试用,这在海外AI圈掀起了一股热潮,被视为对标OpenAI尚未公开发布的Sora视频模型的有力竞争者。国内市场也同样......
  • 5分钟理透LangChain的Chain
    LangChain几乎是LLM应用开发的第一选择,它的野心也比较大,它致力于将自己打造成LLM应用开发的最大社区。而LangChain最核心的部分非Chain莫属。那Chain到底是个啥,概念比较模糊,像雾像雨又像风,这篇文章将带你快速理透LangChain中的Chain概念。1.Chain是核心LangChain的Chain......
  • 5分钟理透LangChain的Chain
    LangChain几乎是LLM应用开发的第一选择,它的野心也比较大,它致力于将自己打造成LLM应用开发的最大社区。而LangChain最核心的部分非 Chain 莫属。那Chain到底是个啥,概念比较模糊,像雾像雨又像风,这篇文章将带你快速理透LangChain中的Chain概念。1.Chain是核心LangChain的......
  • 论文解读——EMNLP2023《Cross-lingual Prompting: Improving Zero-shot Chain-of-Tho
    一、研究背景  本研究聚焦于改进跨语言链式思考(Chain-of-Thought,CoT)推理,这是针对大型语言模型(LLMs)推理过程中的一种技术。传统上,链式思考通过引导模型按步骤生成推理路径,以提高推理任务的准确性。具体来说,零样本链式思考(zero-shotCoT)通过简单的提示,如“Let’sthinks......
  • AI培训讲师叶梓:高效零样本语音合成技术与FlashSpeech的突破
     在人工智能领域,语音合成技术一直是研究的热点。随着语言模型和扩散模型的进展,零样本语音合成技术取得了显著成就,但这些技术在生成过程中存在速度慢和计算成本高昂的问题。这不仅限制了它们的实际应用,也对资源的有效利用提出了挑战。为了解决现有技术的局限性,研究者们提出了F......
  • IntelliJ IDEA && AI Assistant 2024最新激活,亲测有效
    aiassistant激活成功后,如图aiassistant账号获取渠道:https://web.52shizhan.cn/activity/ai-assistant在去年五月份的GoogleI/O2023上,Google为AndroidStudio推出了StudioBot功能,使用了谷歌编码基础模型Codey,Codey是Google的基础编码模型,是PaLM2的后......
  • 英伟达开源最强通用模型Nemotron-4 340B:开启AI合成数据新纪元
    【震撼发布】英伟达最新力作——Nemotron-4340B,一个拥有3400亿参数的超级通用模型,震撼登场!这不仅是技术的一大飞跃,更是AI领域的一次革命性突破! 【性能卓越】Nemotron-4340B以其卓越的性能超越了Llama-3,专为合成数据而生。它将为医疗健康、金融、制造、零售等行业带来前......