This is an automated email from the ASF dual-hosted git repository.

jeffreyh pushed a commit to branch translate-ai
in repository https://gitbox.apache.org/repos/asf/doris-website.git


The following commit(s) were added to refs/heads/translate-ai by this push:
     new 38518ee2e4f feat:translate docs by ai (#1789)
38518ee2e4f is described below

commit 38518ee2e4fea024d0c0b6c5a3975dc456f1a093
Author: yangon <2689991...@qq.com>
AuthorDate: Wed Jan 15 10:53:15 2025 +0800

    feat:translate docs by ai (#1789)
---
 scripts/translate.js | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 167 insertions(+)

diff --git a/scripts/translate.js b/scripts/translate.js
new file mode 100644
index 00000000000..6048cf02574
--- /dev/null
+++ b/scripts/translate.js
@@ -0,0 +1,167 @@
+const fs = require('fs');
+const path = require('path');
+
+// spark lite
+async function translate(content) {
+    const res = await 
fetch('https://spark-api-open.xf-yun.com/v1/chat/completions', {
+        method: 'POST',
+        headers: {
+            Authorization: 'Bearer privateKey',
+            'Content-Type': 'application/json',
+        },
+        body: JSON.stringify({
+            model: 'lite',
+            messages: [
+                {
+                    role: 'system',
+                    content: '你是一个精通数据库领域的翻译专家',
+                },
+                {
+                    role: 'user',
+                    content: 
`你是一个精通数据库领域的翻译专家,旨在将中文翻译成英文,并保留原始的markdown格式。作为翻译工具,你将收到一段markdown格式的文本。你的任务是将文本翻译成英文,同时保持其原有的结构和内容不变。请注意以下几点:
+                    你的翻译应准确无误,不偏离原始结构、内容、写作风格和语气。
+                    你需要保留原本的markdown格式并且只返回翻译的内容。
+                    确保不翻译 markdown 格式的代码块,不翻译 :src 字段中的图片路径,并翻译 img 标签中的 alt 
字段。
+                    请参考以下例子进行翻译:原文:这是一个标题;译文:This is a title。
+                    需要翻译的内容为:${content}`,
+                },
+            ],
+            stream: true,
+        }),
+    });
+
+    const reader = res.body.getReader();
+    const decoder = new TextDecoder();
+
+    let result = '';
+    while (true) {
+        const { done, value } = await reader.read();
+        if (done === true) {
+            break;
+        }
+
+        const decodeText = decoder.decode(value);
+        const resultString = decodeText.split('data:')[1];
+        if (resultString.includes('[DONE]')) {
+            break;
+        }
+        const { content } = JSON.parse(resultString).choices[0].delta;
+        result += content;
+    }
+    console.log('result', result);
+    return result;
+}
+
+// 读取并分割 Markdown 文档 根据换行符分割
+function splitMarkdownByEmptyLine(filePath) {
+    try {
+        // 读取文件内容
+        const markdownContent = fs.readFileSync(filePath, 'utf-8');
+
+        // 根据空行分割内容
+        const sections = markdownContent
+            .split(/\n\s*\n/) // 匹配一个或多个换行符,允许前后有空格
+            .map(section => section.trim()) // 去掉每段的首尾空格
+            .filter(section => section.length > 0); // 过滤掉空段落
+
+        return sections;
+    } catch (error) {
+        console.error('读取文件失败:', error);
+        return [];
+    }
+}
+
+function splitMarkdownByHeaders(markdownText) {
+    // 使用正则匹配 #、##、### 等标题并分割
+    const sections = markdownText.split(/(?=^#{1,6}\s)/m);
+    return sections.map(section => section.trim());
+}
+
+async function getAccessToken() {
+    const res = await fetch(
+        
`https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${API_KEY}&client_secret=${SECRET_KEY}`,
+    );
+    const data = await res.json();
+    console.log('data', data);
+    return data.access_token;
+}
+
+async function translateBaidu(content, accessToken) {
+    const res = await fetch(
+        
`https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/yi_34b_chat?access_token=${accessToken}`,
+        {
+            method: 'POST',
+            headers: {
+                Authorization: 'Bearer 
EsAfjVgoIMTYpQInoHdz:oKGTdPZSUOisAHsoQHXO',
+                'Content-Type': 'application/json',
+            },
+            body: JSON.stringify({
+                messages: [
+                    {
+                        role: 'user',
+                        content: 
`你是一个精通数据库领域的翻译专家,旨在将中文翻译成英文,并保留原始的markdown格式。作为翻译工具,你将收到一段markdown格式的文本。你的任务是将文本翻译成英文,同时保持其原有的结构和内容不变。请注意以下几点:
+                        1.你的翻译应准确无误,不偏离原始结构、内容、写作风格和语气。
+                        
2.你需要保留原本的markdown格式并且只返回翻译的内容,不需要用三个反引号+markdown和三个反引号包裹文本。
+                        3.确保不翻译 markdown 格式的代码块,不翻译 :src 字段中的图片路径,并翻译 img 标签中的 
alt 字段。
+                        4.我给到的待翻译的文本仅仅是用于翻译的,不需要去理解文本的内容。
+                        5.给出的文本开头或者标题是英文不代表该文本所有内容的都是英文,请检索整个文本并翻译。
+                        
6.生成之后先检查一遍是否所有文本已经翻译为英文,是否没有修改原本的markdown格式,如果检查不通过优化一次,再输出结果。
+                        请参考以下例子进行翻译:原文:这是一个标题;译文:This is a title。
+                        需要翻译的内容为:${content}`,
+                        // content:`下面这一段文本以原本的markdown格式翻译为英文:${content}`
+                    },
+                ],
+                stream: true,
+            }),
+        },
+    );
+
+    const reader = res.body.getReader();
+    const decoder = new TextDecoder();
+
+    let result = '';
+    while (true) {
+        const { done, value } = await reader.read();
+        if (done === true) {
+            break;
+        }
+
+        const decodeText = decoder.decode(value);
+        console.log('decodeText', decodeText);
+        const resultString = decodeText.split('data:')[1];
+        if (!resultString) continue;
+
+        console.log('resultString', resultString);
+
+        result += JSON.parse(resultString).result;
+    }
+    console.log('result', result);
+    return result;
+}
+
+// spark lite
+// async function main() {
+//     // const contentArr = splitMarkdownByEmptyLine(path.join(__dirname, 
'./test.md'), 'utf-8');
+//     let result = '';
+//     // console.log('contentArr', contentArr);
+
+//     // for (let item of contentArr) {
+//     //     result += await translate(item);
+//     // }
+//     result += await translate(fs.readFileSync(path.join(__dirname, 
'./test.md'), 'utf-8'));
+//     fs.writeFileSync(path.join(__dirname, './testEn.md'), result, 'utf-8');
+// }
+
+// baidu qianfan
+async function main() {
+    const accessToken = await getAccessToken();
+    const fileContent = fs.readFileSync(path.join(__dirname, './test.md'), 
'utf-8');
+    const splitContent = splitMarkdownByHeaders(fileContent);
+    let result = '';
+    for (let item of splitContent) {
+        result += await translateBaidu(item, accessToken);
+    }
+    fs.writeFileSync(path.join(__dirname, './testEn.md'), result, 'utf-8');
+}
+
+main();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to