translatekit 0.3.1__tar.gz → 0.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {translatekit-0.3.1 → translatekit-0.3.2}/MANIFEST.in +3 -3
- {translatekit-0.3.1/translatekit.egg-info → translatekit-0.3.2}/PKG-INFO +2 -5
- {translatekit-0.3.1 → translatekit-0.3.2}/setup.py +1 -1
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/__init__.py +1 -1
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/llm_general.py +13 -1
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/null_translator.py +56 -56
- {translatekit-0.3.1 → translatekit-0.3.2/translatekit.egg-info}/PKG-INFO +2 -5
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit.egg-info/SOURCES.txt +0 -4
- translatekit-0.3.1/.gitignore +0 -222
- translatekit-0.3.1/docs/TRANSLATION_CONFIG.md +0 -120
- translatekit-0.3.1/docs/example.py +0 -182
- translatekit-0.3.1/docs/kit.md +0 -224
- {translatekit-0.3.1 → translatekit-0.3.2}/LICENSE +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/README.md +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/pyproject.toml +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/requirements.txt +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/setup.cfg +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/test/test_argu.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/baidu.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/base.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/deepl.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/google.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/kit.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/libre.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/linguee.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/microsoft.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/mymemory.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/papago.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/pons.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/qcri.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/sizhi.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/tencent-hunyuan.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/tencent.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/yandex.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit/youdao.py +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit.egg-info/dependency_links.txt +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit.egg-info/requires.txt +0 -0
- {translatekit-0.3.1 → translatekit-0.3.2}/translatekit.egg-info/top_level.txt +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
include README.md
|
|
2
|
-
include LICENSE
|
|
3
|
-
include requirements.txt
|
|
1
|
+
include README.md
|
|
2
|
+
include LICENSE
|
|
3
|
+
include requirements.txt
|
|
4
4
|
recursive-include py_translate_kit *.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: translatekit
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: 一个简单快捷的翻译服务工具包,支持自定义脚本扩展
|
|
5
5
|
Home-page: https://github.com/HZBHZB1234/Py-Translate-Kit
|
|
6
6
|
Author: HZBHZB1234
|
|
@@ -39,11 +39,8 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
39
39
|
Classifier: Programming Language :: Python :: 3.10
|
|
40
40
|
Requires-Python: >=3.6.0
|
|
41
41
|
Description-Content-Type: text/markdown
|
|
42
|
-
License-File: LICENSE
|
|
43
|
-
Requires-Dist: requests>=2.25.1
|
|
44
|
-
Requires-Dist: beautifulsoup4>=4.9.3
|
|
45
|
-
Requires-Dist: jsonpatch>=1.26
|
|
46
42
|
Provides-Extra: extras
|
|
43
|
+
License-File: LICENSE
|
|
47
44
|
|
|
48
45
|
# Py-Translate-Kit 🌐
|
|
49
46
|
|
|
@@ -12,7 +12,7 @@ URL = 'https://github.com/HZBHZB1234/Py-Translate-Kit'
|
|
|
12
12
|
EMAIL = 'HZBHZB1234@outlook.com'
|
|
13
13
|
AUTHOR = 'HZBHZB1234'
|
|
14
14
|
REQUIRES_PYTHON = '>=3.6.0'
|
|
15
|
-
VERSION = '0.3.
|
|
15
|
+
VERSION = '0.3.2'
|
|
16
16
|
|
|
17
17
|
# What packages are required for this module to be executed?
|
|
18
18
|
REQUIRED = [
|
|
@@ -33,7 +33,8 @@ class LLMGeneralTranslator(TranslatorBase):
|
|
|
33
33
|
"frequency_penalty": 0.0,
|
|
34
34
|
"presence_penalty": 0.0,
|
|
35
35
|
"system_prompt": "你是一个专业的翻译助手,严格按照要求完成翻译任务,只返回翻译结果,不添加任何额外解释、说明或格式。",
|
|
36
|
-
"response_format": "text"
|
|
36
|
+
"response_format": "text",
|
|
37
|
+
"extra_body": {}
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
DESCRIBE_API_KEY = [
|
|
@@ -106,6 +107,13 @@ class LLMGeneralTranslator(TranslatorBase):
|
|
|
106
107
|
"type": "string",
|
|
107
108
|
"required": False,
|
|
108
109
|
"description": "响应格式定义,可选json_object,text"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "extra_body",
|
|
113
|
+
"name": "额外请求体",
|
|
114
|
+
"type": "dictionary",
|
|
115
|
+
"required": False,
|
|
116
|
+
"description": "额外的请求体参数,将以字典形式合并到API请求体中,用于传递特殊参数(如OpenAI的reasoning_effort、seed等)"
|
|
109
117
|
}
|
|
110
118
|
]
|
|
111
119
|
|
|
@@ -264,6 +272,10 @@ class LLMGeneralTranslator(TranslatorBase):
|
|
|
264
272
|
"response_format": {"type": self.response_format},
|
|
265
273
|
"messages": self._build_translation_prompt(text)
|
|
266
274
|
}
|
|
275
|
+
|
|
276
|
+
# 合并额外请求体参数(extra_body中的键会覆盖已有键)
|
|
277
|
+
if self.extra_body:
|
|
278
|
+
request_data.update(self.extra_body)
|
|
267
279
|
|
|
268
280
|
try:
|
|
269
281
|
# 发送API请求
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
"""
|
|
2
|
-
空翻译器实现,对于所有输入文本都返回原文,用于调试目的
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from typing import Dict, Any, Optional
|
|
6
|
-
from .base import TranslatorBase, TranslationConfig, Metadata
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class NullTranslator(TranslatorBase):
|
|
10
|
-
"""空翻译器实现类,对于所有输入文本都返回原文,用于调试目的"""
|
|
11
|
-
|
|
12
|
-
# 服务元信息
|
|
13
|
-
SERVICE_NAME = "null_translator"
|
|
14
|
-
SUPPORTED_LANGUAGES = {
|
|
15
|
-
'auto': '自动检测',
|
|
16
|
-
'en': '英语'
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
METADATA = Metadata(
|
|
20
|
-
console_url="",
|
|
21
|
-
description="空翻译器,对于所有输入文本都返回原文,用于调试目的",
|
|
22
|
-
documentation_url="",
|
|
23
|
-
short_description="空翻译器(调试用)",
|
|
24
|
-
usage_documentation="不发送任何网络请求,直接返回原文,用于调试翻译流程"
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
def _translate_default(self, text: str, source_lang: str, target_lang: str, **kwargs) -> str:
|
|
28
|
-
"""
|
|
29
|
-
默认翻译方法,直接返回原文
|
|
30
|
-
|
|
31
|
-
Args:
|
|
32
|
-
text: 要翻译的文本
|
|
33
|
-
source_lang: 源语言
|
|
34
|
-
target_lang: 目标语言
|
|
35
|
-
**kwargs: 额外参数
|
|
36
|
-
|
|
37
|
-
Returns:
|
|
38
|
-
原始文本,不做任何翻译
|
|
39
|
-
"""
|
|
40
|
-
return text
|
|
41
|
-
|
|
42
|
-
def _parse_api_response(self, response: Any, **kwargs) -> str:
|
|
43
|
-
"""
|
|
44
|
-
解析API响应,对于NullTranslator,响应就是原始文本
|
|
45
|
-
|
|
46
|
-
Args:
|
|
47
|
-
response: API响应(在这里就是原始文本)
|
|
48
|
-
**kwargs: 额外参数
|
|
49
|
-
|
|
50
|
-
Returns:
|
|
51
|
-
解析后的翻译文本
|
|
52
|
-
"""
|
|
53
|
-
return response
|
|
54
|
-
|
|
55
|
-
def _validate_languages(self, source_lang: str, target_lang: str):
|
|
56
|
-
"""验证语言对,NullTranslator不做验证,允许所有语言对"""
|
|
1
|
+
"""
|
|
2
|
+
空翻译器实现,对于所有输入文本都返回原文,用于调试目的
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from typing import Dict, Any, Optional
|
|
6
|
+
from .base import TranslatorBase, TranslationConfig, Metadata
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class NullTranslator(TranslatorBase):
|
|
10
|
+
"""空翻译器实现类,对于所有输入文本都返回原文,用于调试目的"""
|
|
11
|
+
|
|
12
|
+
# 服务元信息
|
|
13
|
+
SERVICE_NAME = "null_translator"
|
|
14
|
+
SUPPORTED_LANGUAGES = {
|
|
15
|
+
'auto': '自动检测',
|
|
16
|
+
'en': '英语'
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
METADATA = Metadata(
|
|
20
|
+
console_url="",
|
|
21
|
+
description="空翻译器,对于所有输入文本都返回原文,用于调试目的",
|
|
22
|
+
documentation_url="",
|
|
23
|
+
short_description="空翻译器(调试用)",
|
|
24
|
+
usage_documentation="不发送任何网络请求,直接返回原文,用于调试翻译流程"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
def _translate_default(self, text: str, source_lang: str, target_lang: str, **kwargs) -> str:
|
|
28
|
+
"""
|
|
29
|
+
默认翻译方法,直接返回原文
|
|
30
|
+
|
|
31
|
+
Args:
|
|
32
|
+
text: 要翻译的文本
|
|
33
|
+
source_lang: 源语言
|
|
34
|
+
target_lang: 目标语言
|
|
35
|
+
**kwargs: 额外参数
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
原始文本,不做任何翻译
|
|
39
|
+
"""
|
|
40
|
+
return text
|
|
41
|
+
|
|
42
|
+
def _parse_api_response(self, response: Any, **kwargs) -> str:
|
|
43
|
+
"""
|
|
44
|
+
解析API响应,对于NullTranslator,响应就是原始文本
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
response: API响应(在这里就是原始文本)
|
|
48
|
+
**kwargs: 额外参数
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
解析后的翻译文本
|
|
52
|
+
"""
|
|
53
|
+
return response
|
|
54
|
+
|
|
55
|
+
def _validate_languages(self, source_lang: str, target_lang: str):
|
|
56
|
+
"""验证语言对,NullTranslator不做验证,允许所有语言对"""
|
|
57
57
|
pass
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: translatekit
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: 一个简单快捷的翻译服务工具包,支持自定义脚本扩展
|
|
5
5
|
Home-page: https://github.com/HZBHZB1234/Py-Translate-Kit
|
|
6
6
|
Author: HZBHZB1234
|
|
@@ -39,11 +39,8 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
39
39
|
Classifier: Programming Language :: Python :: 3.10
|
|
40
40
|
Requires-Python: >=3.6.0
|
|
41
41
|
Description-Content-Type: text/markdown
|
|
42
|
-
License-File: LICENSE
|
|
43
|
-
Requires-Dist: requests>=2.25.1
|
|
44
|
-
Requires-Dist: beautifulsoup4>=4.9.3
|
|
45
|
-
Requires-Dist: jsonpatch>=1.26
|
|
46
42
|
Provides-Extra: extras
|
|
43
|
+
License-File: LICENSE
|
|
47
44
|
|
|
48
45
|
# Py-Translate-Kit 🌐
|
|
49
46
|
|
translatekit-0.3.1/.gitignore
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
# custom gitignore
|
|
2
|
-
prompt.md
|
|
3
|
-
dev
|
|
4
|
-
test.py
|
|
5
|
-
test*.py
|
|
6
|
-
!test_argu.py
|
|
7
|
-
test_assets/
|
|
8
|
-
*.docx
|
|
9
|
-
*.pdf
|
|
10
|
-
*.pptx
|
|
11
|
-
.iflowignore
|
|
12
|
-
iflow.md
|
|
13
|
-
.kit
|
|
14
|
-
.vscode
|
|
15
|
-
.rmv
|
|
16
|
-
# Byte-compiled / optimized / DLL files
|
|
17
|
-
__pycache__/
|
|
18
|
-
*.py[codz]
|
|
19
|
-
*$py.class
|
|
20
|
-
|
|
21
|
-
# C extensions
|
|
22
|
-
*.so
|
|
23
|
-
|
|
24
|
-
# Distribution / packaging
|
|
25
|
-
.Python
|
|
26
|
-
build/
|
|
27
|
-
develop-eggs/
|
|
28
|
-
dist/
|
|
29
|
-
downloads/
|
|
30
|
-
eggs/
|
|
31
|
-
.eggs/
|
|
32
|
-
lib/
|
|
33
|
-
lib64/
|
|
34
|
-
parts/
|
|
35
|
-
sdist/
|
|
36
|
-
var/
|
|
37
|
-
wheels/
|
|
38
|
-
share/python-wheels/
|
|
39
|
-
*.egg-info/
|
|
40
|
-
.installed.cfg
|
|
41
|
-
*.egg
|
|
42
|
-
MANIFEST
|
|
43
|
-
|
|
44
|
-
# PyInstaller
|
|
45
|
-
# Usually these files are written by a python script from a template
|
|
46
|
-
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
47
|
-
*.manifest
|
|
48
|
-
*.spec
|
|
49
|
-
|
|
50
|
-
# Installer logs
|
|
51
|
-
pip-log.txt
|
|
52
|
-
pip-delete-this-directory.txt
|
|
53
|
-
|
|
54
|
-
# Unit test / coverage reports
|
|
55
|
-
htmlcov/
|
|
56
|
-
.tox/
|
|
57
|
-
.nox/
|
|
58
|
-
.coverage
|
|
59
|
-
.coverage.*
|
|
60
|
-
.cache
|
|
61
|
-
nosetests.xml
|
|
62
|
-
coverage.xml
|
|
63
|
-
*.cover
|
|
64
|
-
*.py.cover
|
|
65
|
-
.hypothesis/
|
|
66
|
-
.pytest_cache/
|
|
67
|
-
cover/
|
|
68
|
-
|
|
69
|
-
# Translations
|
|
70
|
-
*.mo
|
|
71
|
-
*.pot
|
|
72
|
-
|
|
73
|
-
# Django stuff:
|
|
74
|
-
*.log
|
|
75
|
-
local_settings.py
|
|
76
|
-
db.sqlite3
|
|
77
|
-
db.sqlite3-journal
|
|
78
|
-
|
|
79
|
-
# Flask stuff:
|
|
80
|
-
instance/
|
|
81
|
-
.webassets-cache
|
|
82
|
-
|
|
83
|
-
# Scrapy stuff:
|
|
84
|
-
.scrapy
|
|
85
|
-
|
|
86
|
-
# Sphinx documentation
|
|
87
|
-
docs/_build/
|
|
88
|
-
|
|
89
|
-
# PyBuilder
|
|
90
|
-
.pybuilder/
|
|
91
|
-
target/
|
|
92
|
-
|
|
93
|
-
# Jupyter Notebook
|
|
94
|
-
.ipynb_checkpoints
|
|
95
|
-
|
|
96
|
-
# IPython
|
|
97
|
-
profile_default/
|
|
98
|
-
ipython_config.py
|
|
99
|
-
|
|
100
|
-
# pyenv
|
|
101
|
-
# For a library or package, you might want to ignore these files since the code is
|
|
102
|
-
# intended to run in multiple environments; otherwise, check them in:
|
|
103
|
-
# .python-version
|
|
104
|
-
|
|
105
|
-
# pipenv
|
|
106
|
-
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
107
|
-
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
108
|
-
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
109
|
-
# install all needed dependencies.
|
|
110
|
-
#Pipfile.lock
|
|
111
|
-
|
|
112
|
-
# UV
|
|
113
|
-
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
114
|
-
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
115
|
-
# commonly ignored for libraries.
|
|
116
|
-
#uv.lock
|
|
117
|
-
|
|
118
|
-
# poetry
|
|
119
|
-
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
120
|
-
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
121
|
-
# commonly ignored for libraries.
|
|
122
|
-
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
123
|
-
#poetry.lock
|
|
124
|
-
#poetry.toml
|
|
125
|
-
|
|
126
|
-
# pdm
|
|
127
|
-
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
128
|
-
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
129
|
-
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
130
|
-
#pdm.lock
|
|
131
|
-
#pdm.toml
|
|
132
|
-
.pdm-python
|
|
133
|
-
.pdm-build/
|
|
134
|
-
|
|
135
|
-
# pixi
|
|
136
|
-
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
137
|
-
#pixi.lock
|
|
138
|
-
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
139
|
-
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
140
|
-
.pixi
|
|
141
|
-
|
|
142
|
-
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
143
|
-
__pypackages__/
|
|
144
|
-
|
|
145
|
-
# Celery stuff
|
|
146
|
-
celerybeat-schedule
|
|
147
|
-
celerybeat.pid
|
|
148
|
-
|
|
149
|
-
# SageMath parsed files
|
|
150
|
-
*.sage.py
|
|
151
|
-
|
|
152
|
-
# Environments
|
|
153
|
-
.env
|
|
154
|
-
.envrc
|
|
155
|
-
.venv
|
|
156
|
-
env/
|
|
157
|
-
venv/
|
|
158
|
-
ENV/
|
|
159
|
-
env.bak/
|
|
160
|
-
venv.bak/
|
|
161
|
-
|
|
162
|
-
# Spyder project settings
|
|
163
|
-
.spyderproject
|
|
164
|
-
.spyproject
|
|
165
|
-
|
|
166
|
-
# Rope project settings
|
|
167
|
-
.ropeproject
|
|
168
|
-
|
|
169
|
-
# mkdocs documentation
|
|
170
|
-
/site
|
|
171
|
-
|
|
172
|
-
# mypy
|
|
173
|
-
.mypy_cache/
|
|
174
|
-
.dmypy.json
|
|
175
|
-
dmypy.json
|
|
176
|
-
|
|
177
|
-
# Pyre type checker
|
|
178
|
-
.pyre/
|
|
179
|
-
|
|
180
|
-
# pytype static type analyzer
|
|
181
|
-
.pytype/
|
|
182
|
-
|
|
183
|
-
# Cython debug symbols
|
|
184
|
-
cython_debug/
|
|
185
|
-
|
|
186
|
-
# PyCharm
|
|
187
|
-
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
188
|
-
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
189
|
-
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
190
|
-
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
191
|
-
#.idea/
|
|
192
|
-
|
|
193
|
-
# Abstra
|
|
194
|
-
# Abstra is an AI-powered process automation framework.
|
|
195
|
-
# Ignore directories containing user credentials, local state, and settings.
|
|
196
|
-
# Learn more at https://abstra.io/docs
|
|
197
|
-
.abstra/
|
|
198
|
-
|
|
199
|
-
# Visual Studio Code
|
|
200
|
-
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
201
|
-
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
202
|
-
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
203
|
-
# you could uncomment the following to ignore the entire vscode folder
|
|
204
|
-
# .vscode/
|
|
205
|
-
|
|
206
|
-
# Ruff stuff:
|
|
207
|
-
.ruff_cache/
|
|
208
|
-
|
|
209
|
-
# PyPI configuration file
|
|
210
|
-
.pypirc
|
|
211
|
-
|
|
212
|
-
# Cursor
|
|
213
|
-
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
|
|
214
|
-
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
|
|
215
|
-
# refer to https://docs.cursor.com/context/ignore-files
|
|
216
|
-
.cursorignore
|
|
217
|
-
.cursorindexingignore
|
|
218
|
-
|
|
219
|
-
# Marimo
|
|
220
|
-
marimo/_static/
|
|
221
|
-
marimo/_lsp/
|
|
222
|
-
__marimo__/
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
# 翻译配置参数详解
|
|
2
|
-
|
|
3
|
-
本文档详细介绍了 Py-Translate-Kit 中 [TranslationConfig](file:///e:/desktop/limbus%20transfer/Py-Translate-Kit/translatekit/kit.py#L287-L317) 类的所有配置参数,帮助用户更好地理解和使用该翻译工具包。
|
|
4
|
-
|
|
5
|
-
## 配置参数分类
|
|
6
|
-
|
|
7
|
-
### 1. API配置
|
|
8
|
-
|
|
9
|
-
- **api_setting**: `Dict[str, str] = None`
|
|
10
|
-
- 用于存储API密钥的字典,不同翻译服务需要不同的密钥格式
|
|
11
|
-
- 默认为None,若未提供则初始化为空字典
|
|
12
|
-
- 使用示例:`{"appkey": "your_app_key", "secret": "your_secret"}`
|
|
13
|
-
|
|
14
|
-
### 2. 翻译参数
|
|
15
|
-
|
|
16
|
-
- **source_lang**: `str = "auto"`
|
|
17
|
-
- 源语言代码,指定待翻译文本的语言
|
|
18
|
-
- 默认为"auto",表示自动检测语言
|
|
19
|
-
- 支持的语言代码因翻译服务而异
|
|
20
|
-
|
|
21
|
-
- **target_lang**: `str = "en"`
|
|
22
|
-
- 目标语言代码,指定翻译后的语言
|
|
23
|
-
- 默认为"en"(英语)
|
|
24
|
-
|
|
25
|
-
- **method**: `str = "default"`
|
|
26
|
-
- 翻译方法选择,用于指定使用哪种翻译策略
|
|
27
|
-
- 默认为"default"方法
|
|
28
|
-
|
|
29
|
-
### 3. 文本处理
|
|
30
|
-
|
|
31
|
-
- **text_max_length**: `int = 2000`
|
|
32
|
-
- 单次翻译文本的最大长度
|
|
33
|
-
- 默认值为2000字符,超过此长度的文本将被分块处理
|
|
34
|
-
|
|
35
|
-
- **split_strategy**: `SplitStrategy = SplitStrategy.SENTENCE`
|
|
36
|
-
- 文本分割策略,可选值包括:
|
|
37
|
-
- [SplitStrategy.SENTENCE](translatekit/base.py#L615-L620): 按句子分割
|
|
38
|
-
- [SplitStrategy.PARAGRAPH](translatekit/base.py#L621-L625): 按段落分割
|
|
39
|
-
- [SplitStrategy.FIXED_LENGTH](translatekit/base.py#L626-L650): 按固定长度分割
|
|
40
|
-
- [SplitStrategy.SEMANTIC](translatekit/base.py#L651-L655): 语义分割(待实现)
|
|
41
|
-
|
|
42
|
-
- **enable_preprocessing**: `bool = True`
|
|
43
|
-
- 是否启用预处理功能
|
|
44
|
-
- 默认启用,预处理需要手动添加相关函数
|
|
45
|
-
- 预处理函数列表默认为空
|
|
46
|
-
|
|
47
|
-
- **enable_postprocessing**: `bool = True`
|
|
48
|
-
- 是否启用后处理功能
|
|
49
|
-
- 默认启用,后处理需要手动添加相关函数
|
|
50
|
-
- 后处理函数列表默认为空
|
|
51
|
-
|
|
52
|
-
### 4. 重试与容错
|
|
53
|
-
|
|
54
|
-
- **max_retries**: `int = 3`
|
|
55
|
-
- 最大重试次数,当翻译请求失败时的重试次数
|
|
56
|
-
- 默认为3次
|
|
57
|
-
|
|
58
|
-
- **retry_strategy**: `RetryStrategy = RetryStrategy.EXPONENTIAL`
|
|
59
|
-
- 重试策略,可选值包括:
|
|
60
|
-
- [RetryStrategy.EXPONENTIAL](translatekit/base.py#L687-L696): 指数退避策略
|
|
61
|
-
- [RetryStrategy.LINEAR](translatekit/base.py#L687-L696): 线性退避策略
|
|
62
|
-
- [RetryStrategy.ADAPTIVE](translatekit/base.py#L687-L696): 自适应策略
|
|
63
|
-
|
|
64
|
-
- **timeout**: `float = 30.0`
|
|
65
|
-
- 请求超时时间(秒)
|
|
66
|
-
- 默认为30.0秒
|
|
67
|
-
|
|
68
|
-
### 5. 并发设置
|
|
69
|
-
|
|
70
|
-
- **max_workers**: `int = 5`
|
|
71
|
-
- 最大工作线程数,用于并发处理翻译任务
|
|
72
|
-
- 默认为5个线程
|
|
73
|
-
|
|
74
|
-
- **batch_size**: `int = 10`
|
|
75
|
-
- 批处理大小,批量翻译时每批处理的文本数量
|
|
76
|
-
- 默认为10条
|
|
77
|
-
|
|
78
|
-
### 6. 高级功能
|
|
79
|
-
|
|
80
|
-
- **enable_cache**: `bool = False`
|
|
81
|
-
- 是否启用缓存功能
|
|
82
|
-
- 默认关闭,开启后可缓存翻译结果,自动匹配相同文本,可以减少重复翻译
|
|
83
|
-
|
|
84
|
-
- **cache_size**: `Optional[int] = None`
|
|
85
|
-
- 缓存大小限制
|
|
86
|
-
- 默认为None,表示无限制
|
|
87
|
-
|
|
88
|
-
- **enable_metrics**: `bool = False`
|
|
89
|
-
- 是否启用性能指标收集
|
|
90
|
-
- 默认关闭,开启后可以追踪翻译使用量
|
|
91
|
-
|
|
92
|
-
- **debug_mode**: `bool = False`
|
|
93
|
-
- 是否启用调试模式
|
|
94
|
-
- 默认关闭,开启后会将logger.level设置为DEBUG,输出更多日志信息
|
|
95
|
-
|
|
96
|
-
## 使用示例
|
|
97
|
-
|
|
98
|
-
```python
|
|
99
|
-
import translatekit as tkit
|
|
100
|
-
|
|
101
|
-
# 创建带自定义配置的翻译器
|
|
102
|
-
config = tkit.TranslationConfig(
|
|
103
|
-
api_setting={"appkey": "your_app_key"},
|
|
104
|
-
debug_mode=True,
|
|
105
|
-
enable_cache=True,
|
|
106
|
-
cache_size=1000,
|
|
107
|
-
source_lang="zh",
|
|
108
|
-
target_lang="en",
|
|
109
|
-
text_max_length=5000,
|
|
110
|
-
max_retries=5,
|
|
111
|
-
timeout=60.0
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
# 创建翻译器实例
|
|
115
|
-
translator = tkit.BaiduTranslator(config=config)
|
|
116
|
-
|
|
117
|
-
# 使用翻译器
|
|
118
|
-
result = translator.translate("你好,世界!")
|
|
119
|
-
print(result)
|
|
120
|
-
```
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import translatekit as tkit
|
|
2
|
-
|
|
3
|
-
# 获取目标翻译器配置逻辑
|
|
4
|
-
default_api_key = tkit.BaiduTranslator.DEFAULT_API_KEY
|
|
5
|
-
describe_api_key = tkit.BaiduTranslator.DESCRIBE_API_KEY
|
|
6
|
-
for index, describe in enumerate(describe_api_key):
|
|
7
|
-
print(f'''
|
|
8
|
-
参数{index+1}
|
|
9
|
-
参数ID:{describe["id"]}
|
|
10
|
-
参数名称:{describe["name"]}
|
|
11
|
-
参数是否必填:{describe["required"]}
|
|
12
|
-
参数类型:{describe["type"]}
|
|
13
|
-
参数描述:{describe["description"]},
|
|
14
|
-
''')
|
|
15
|
-
|
|
16
|
-
# 可以通过打印TranslationConfig类来获取默认配置
|
|
17
|
-
print(tkit.TranslationConfig)
|
|
18
|
-
|
|
19
|
-
# 可以使用TranslationConfig类来配置翻译器参数
|
|
20
|
-
config = tkit.TranslationConfig(
|
|
21
|
-
api_setting={"appkey": "your_app_key"},
|
|
22
|
-
debug_mode=True,
|
|
23
|
-
enable_cache=True,
|
|
24
|
-
cache_size=1000
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
# 创建翻译器实例
|
|
28
|
-
translator = tkit.BaiduTranslator(
|
|
29
|
-
config=config,
|
|
30
|
-
# 也可以通过kwargs的方式传入并修改参数
|
|
31
|
-
# 先判断并修改config中的参数,没有的话再修改config.api_setting中的参数
|
|
32
|
-
source_lang="zh",
|
|
33
|
-
target_lang="en",
|
|
34
|
-
appid = "your_app_id"
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
text = "你好,世界!"
|
|
38
|
-
|
|
39
|
-
# 调用翻译器进行翻译
|
|
40
|
-
result = translator.translate(text)
|
|
41
|
-
|
|
42
|
-
print(result)
|
|
43
|
-
|
|
44
|
-
texts = ["你好,世界!", "晚安"]
|
|
45
|
-
|
|
46
|
-
# 调用翻译器进行批量翻译,翻译器会自动判断类型
|
|
47
|
-
results = translator.translate(texts)
|
|
48
|
-
|
|
49
|
-
print(results)
|
|
50
|
-
|
|
51
|
-
# 调用翻译器进行领域翻译
|
|
52
|
-
# 你可以在调用translate方法时传入参数method=以改变翻译方法
|
|
53
|
-
# 一般而言,也会提供一个单独的方法来调用其他翻译方法,如translate_with_domain
|
|
54
|
-
|
|
55
|
-
result_domain = translator.translate(text, method="domain", domain="news")
|
|
56
|
-
result_domain_ = translator.translate_with_domain(text, "news", "en")
|
|
57
|
-
print(result_domain)
|
|
58
|
-
print(result_domain_)
|
|
59
|
-
|
|
60
|
-
# 你可以在调用translate方法时传入参数来临时改变翻译配置
|
|
61
|
-
result = translator.translate(text, source_lang="zh", target_lang="en", text_max_length=5000)
|
|
62
|
-
print(result)
|
|
63
|
-
|
|
64
|
-
# 也可以使用update_config方法来更新翻译配置(永久)
|
|
65
|
-
translator.update_config(source_lang="zh", target_lang="en", text_max_length=5000)
|
|
66
|
-
result = translator.translate(text)
|
|
67
|
-
print(result)
|
|
68
|
-
|
|
69
|
-
# 通过get_supported_languages方法可以获取支持的语言列表
|
|
70
|
-
meta = translator.get_supported_languages()
|
|
71
|
-
print(meta)
|
|
72
|
-
|
|
73
|
-
# 通过get_special_api_reference方法可以获取翻译器的特殊函数参考
|
|
74
|
-
meta = translator.get_special_api_reference()
|
|
75
|
-
print(meta)
|
|
76
|
-
|
|
77
|
-
# 通过get_metadata方法可以获取翻译器的元数据
|
|
78
|
-
meta = translator.get_metadata()
|
|
79
|
-
print(meta)
|
|
80
|
-
|
|
81
|
-
# 也可以通过一系列方法来获取翻译器的单独元数据等
|
|
82
|
-
meta_console_url = translator.get_console_url()
|
|
83
|
-
print(meta_console_url)
|
|
84
|
-
meta_description = translator.get_description()
|
|
85
|
-
print(meta_description)
|
|
86
|
-
meta_documentation_url = translator.get_documentation_url()
|
|
87
|
-
print(meta_documentation_url)
|
|
88
|
-
meta_short_description = translator.get_short_description()
|
|
89
|
-
print(meta_short_description)
|
|
90
|
-
# 注:大部分翻译器还未实现get_usage_documentation方法
|
|
91
|
-
meta_usage_documentation = translator.get_usage_documentation()
|
|
92
|
-
print(meta_usage_documentation)
|
|
93
|
-
# 注:大部分翻译器还未实现get_custom_content方法
|
|
94
|
-
meta_custom_content = translator.get_custom_content()
|
|
95
|
-
print(meta_custom_content)
|
|
96
|
-
|
|
97
|
-
# 使用get_performance_metrics方法获取当次开销
|
|
98
|
-
usage = translator.get_performance_metrics()
|
|
99
|
-
print(usage)
|
|
100
|
-
|
|
101
|
-
# 使用clear_cache方法清除缓存
|
|
102
|
-
translator.clear_cache()
|
|
103
|
-
|
|
104
|
-
# 你可以通过add_preprocess和add_postprocess方法来添加预处理和后处理函数
|
|
105
|
-
# 预处理函数会在调用translate方法之前被调用
|
|
106
|
-
# 后处理函数会在调用translate方法之后被调用
|
|
107
|
-
# 预处理函数和后处理函数的调用顺序是按照添加的顺序
|
|
108
|
-
# 你可以通过clear_preprocess和clear_postprocess方法来清除所有预处理和后处理函数
|
|
109
|
-
|
|
110
|
-
translator.add_preprocess(lambda x: x.upper())
|
|
111
|
-
translator.add_postprocess(lambda x: x.lower())
|
|
112
|
-
result = translator.translate(text)
|
|
113
|
-
print(result)
|
|
114
|
-
|
|
115
|
-
translator.clear_preprocess()
|
|
116
|
-
translator.clear_postprocess()
|
|
117
|
-
result = translator.translate(text)
|
|
118
|
-
print(result)
|
|
119
|
-
|
|
120
|
-
# 这是默认config的配置逻辑,我将使用他来介绍各个参数功能
|
|
121
|
-
|
|
122
|
-
"""
|
|
123
|
-
class TranslationConfig:
|
|
124
|
-
# API配置
|
|
125
|
-
# 本文开头已经介绍了API配置的过程,这里不再赘述
|
|
126
|
-
api_setting: Dict[str, str] = None
|
|
127
|
-
|
|
128
|
-
# 目标语言和源语言
|
|
129
|
-
source_lang: str = "auto"
|
|
130
|
-
target_lang: str = "en"
|
|
131
|
-
|
|
132
|
-
# 翻译方法选择
|
|
133
|
-
method: str = "default"
|
|
134
|
-
|
|
135
|
-
# 文本处理
|
|
136
|
-
# 文本最大长度
|
|
137
|
-
text_max_length: int = 2000
|
|
138
|
-
# 文本分割策略
|
|
139
|
-
split_strategy: SplitStrategy = SplitStrategy.SENTENCE
|
|
140
|
-
# 启用文本预处理(需要自定义)
|
|
141
|
-
enable_preprocessing: bool = True
|
|
142
|
-
# 启用文本后处理(需要自定义)
|
|
143
|
-
enable_postprocessing: bool = True
|
|
144
|
-
|
|
145
|
-
# 重试与容错
|
|
146
|
-
max_retries: int = 3
|
|
147
|
-
retry_strategy: RetryStrategy = RetryStrategy.EXPONENTIAL
|
|
148
|
-
timeout: float = 30.0
|
|
149
|
-
|
|
150
|
-
# 并发设置
|
|
151
|
-
# 并发请求数
|
|
152
|
-
max_workers: int = 5
|
|
153
|
-
# 批量请求数
|
|
154
|
-
batch_size: int = 10
|
|
155
|
-
|
|
156
|
-
# 启用缓存
|
|
157
|
-
enable_cache: bool = False
|
|
158
|
-
# 缓存大小上限
|
|
159
|
-
cache_size: Optional[int] = None
|
|
160
|
-
|
|
161
|
-
# 启用性能记录
|
|
162
|
-
enable_metrics: bool = False
|
|
163
|
-
# 调试模式(设置logget等级为DEBUG)
|
|
164
|
-
debug_mode: bool = False
|
|
165
|
-
"""
|
|
166
|
-
|
|
167
|
-
# llm_general翻译器的传参比较特殊
|
|
168
|
-
|
|
169
|
-
config = tkit.TranslationConfig(
|
|
170
|
-
api_setting={"api_key": "your_api_key",
|
|
171
|
-
"base_url": "https://api.openai.com/v1",
|
|
172
|
-
"user_prompt_base": "第一句话:{0},第二句话:{1},第三句话:{2}"},
|
|
173
|
-
debug_mode=True,
|
|
174
|
-
enable_cache=True,
|
|
175
|
-
cache_size=1000
|
|
176
|
-
)
|
|
177
|
-
|
|
178
|
-
translator = tkit.LLMGeneralTranslator(
|
|
179
|
-
config=config
|
|
180
|
-
)
|
|
181
|
-
|
|
182
|
-
translator.translate(["你好,世界!", "晚安", "再见"])
|
translatekit-0.3.1/docs/kit.md
DELETED
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
# 翻译工具Kit函数详解
|
|
2
|
-
|
|
3
|
-
## 函数compare_json(json1, json2)
|
|
4
|
-
该函数用于比较两个json文件的差异,并返回jsonpatch格式的差异结果。
|
|
5
|
-
|
|
6
|
-
### 参数
|
|
7
|
-
- json1:第一个json文件
|
|
8
|
-
- json2:第二个json文件
|
|
9
|
-
|
|
10
|
-
### 返回值
|
|
11
|
-
- 返回jsonpatch格式的差异结果
|
|
12
|
-
|
|
13
|
-
### 示例
|
|
14
|
-
```python
|
|
15
|
-
json1 = {"name": "John", "age": 30}
|
|
16
|
-
json2 = {"name": "John", "age": 35}
|
|
17
|
-
|
|
18
|
-
kit.compare_json(json1, json2)
|
|
19
|
-
# 输出:[{"op": "replace", "path": "/age", "value": 35}]
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### 注意事项
|
|
23
|
-
- 该函数依赖于jsonpatch库,需要先安装:`pip install jsonpatch`。
|
|
24
|
-
- 本函数完全基于jsonpatch.make_patch()函数实现,并没有额外增加功能。
|
|
25
|
-
|
|
26
|
-
## 函数apply_patch(json1, patch)
|
|
27
|
-
该函数用于将JSON补丁应用到原始JSON对象上,返回应用补丁后的结果。
|
|
28
|
-
|
|
29
|
-
### 参数
|
|
30
|
-
- json1:原始JSON对象
|
|
31
|
-
- patch:要应用的JSON补丁
|
|
32
|
-
|
|
33
|
-
### 返回值
|
|
34
|
-
- 返回应用补丁后的JSON对象
|
|
35
|
-
|
|
36
|
-
### 示例
|
|
37
|
-
```python
|
|
38
|
-
json1 = {"name": "John", "age": 30}
|
|
39
|
-
patch = [{"op": "replace", "path": "/age", "value": 35}]
|
|
40
|
-
|
|
41
|
-
kit.apply_patch(json1, patch)
|
|
42
|
-
# 输出:{"name": "John", "age": 35}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### 注意事项
|
|
46
|
-
- 该函数依赖于jsonpatch库,需要先安装:`pip install jsonpatch`。
|
|
47
|
-
- 本函数完全基于jsonpatch.apply_patch()函数实现,并没有额外增加功能。
|
|
48
|
-
|
|
49
|
-
## 函数make_list_patch(_jsonpatch)
|
|
50
|
-
从JSON补丁中提取值列表,只返回操作类型为'add'或'replace'且值为字符串的项。方便使用翻译函数进行批量翻译。
|
|
51
|
-
|
|
52
|
-
### 参数
|
|
53
|
-
- _jsonpatch:JSON补丁列表
|
|
54
|
-
|
|
55
|
-
### 返回值
|
|
56
|
-
- 返回字符串值的列表
|
|
57
|
-
|
|
58
|
-
### 示例
|
|
59
|
-
```python
|
|
60
|
-
jsonpatch = [
|
|
61
|
-
{"op": "add", "path": "/name", "value": "John"},
|
|
62
|
-
{"op": "add", "path": "/age", "value": 30},
|
|
63
|
-
{"op": "replace", "path": "/city", "value": "New York"}
|
|
64
|
-
]
|
|
65
|
-
result = kit.make_list_patch(jsonpatch)
|
|
66
|
-
|
|
67
|
-
# 输出:["John", "New York"]
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## 函数apply_list_patch(_jsonpatch, translate_list)
|
|
71
|
-
将翻译后的值应用到JSON补丁中,返回更新后的补丁。
|
|
72
|
-
|
|
73
|
-
### 参数
|
|
74
|
-
- _jsonpatch:原始JSON补丁列表
|
|
75
|
-
- translate_list:翻译后的字符串值列表
|
|
76
|
-
|
|
77
|
-
### 返回值
|
|
78
|
-
- 返回更新后的补丁列表
|
|
79
|
-
|
|
80
|
-
### 异常
|
|
81
|
-
- 如果翻译列表中的项数与预期不符,将抛出TranslateKitError异常
|
|
82
|
-
|
|
83
|
-
### 示例
|
|
84
|
-
```python
|
|
85
|
-
jsonpatch = [
|
|
86
|
-
{"op": "add", "path": "/name", "value": "John"},
|
|
87
|
-
{"op": "replace", "path": "/city", "value": "New York"}
|
|
88
|
-
]
|
|
89
|
-
translate_list = ["张三", "北京"]
|
|
90
|
-
|
|
91
|
-
result = kit.apply_list_patch(jsonpatch, translate_list)
|
|
92
|
-
# 输出:
|
|
93
|
-
# [
|
|
94
|
-
# {"op": "add", "path": "/name", "value": "张三"},
|
|
95
|
-
# {"op": "replace", "path": "/city", "value": "北京"}
|
|
96
|
-
# ]
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
## 函数flatten_with_paths(data, prefix="")
|
|
101
|
-
该函数将嵌套的数据结构扁平化为路径-值对的列表,方便使用jsonpatch库进行操作。
|
|
102
|
-
|
|
103
|
-
### 参数
|
|
104
|
-
- data:要扁平化的数据(可以是字典或列表)
|
|
105
|
-
- prefix:路径前缀,默认为空字符串
|
|
106
|
-
|
|
107
|
-
### 返回值
|
|
108
|
-
- 返回包含操作-路径-值对的列表
|
|
109
|
-
|
|
110
|
-
### 示例
|
|
111
|
-
```python
|
|
112
|
-
data = {"user": {"name": "John", "hobbies": ["reading", "swimming"]}}
|
|
113
|
-
result = kit.flatten_with_paths(data)
|
|
114
|
-
|
|
115
|
-
# 输出:
|
|
116
|
-
# [
|
|
117
|
-
# {"path": "", "value": {}},
|
|
118
|
-
# {"path": "/user", "value": {}},
|
|
119
|
-
# {"path": "/user/name", "value": "John"},
|
|
120
|
-
# {"path": "/user/hobbies", "value": []},
|
|
121
|
-
# {"path": "/user/hobbies/0", "value": "reading"},
|
|
122
|
-
# {"path": "/user/hobbies/1", "value": "swimming"}
|
|
123
|
-
# ]
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## 函数deoptimize_patch(original_patch)
|
|
127
|
-
由于jsonpatch库的优化机制,可能会将一些操作合并为一个操作,导致value值变成列表或字典。本函数将JSON Patch拆分为多个单一操作的patch,确保所有值为字符串类型。
|
|
128
|
-
|
|
129
|
-
### 参数
|
|
130
|
-
- original_patch:原始的JSON Patch对象(列表)
|
|
131
|
-
|
|
132
|
-
### 返回值
|
|
133
|
-
- 拆分后的JSON Patch对象(列表的列表)
|
|
134
|
-
|
|
135
|
-
### 示例
|
|
136
|
-
```python
|
|
137
|
-
original_patch = [{"op": "add", "path": "/user", "value": {"name": "John", "age": 30}}]
|
|
138
|
-
result = kit.deoptimize_patch(original_patch)
|
|
139
|
-
|
|
140
|
-
# 输出:
|
|
141
|
-
# [
|
|
142
|
-
# {"op": "add", "path": "/user", "value": {}},
|
|
143
|
-
# {"op": "add", "path": "/user/name", "value": "John"},
|
|
144
|
-
# {"op": "add", "path": "/user/age", "value": 30}
|
|
145
|
-
# ]
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
## 函数filted_patchs(jsonpatchs, allow_list, disallow_list, disallow_op)
|
|
149
|
-
通过正则表达式或操作类型过滤补丁,返回过滤后的补丁列表。
|
|
150
|
-
|
|
151
|
-
### 参数
|
|
152
|
-
- jsonpatchs:原始JSON补丁列表
|
|
153
|
-
- allow_list:允许的路径模式列表,默认为['.*'](允许所有)
|
|
154
|
-
- disallow_list:不允许的路径模式列表,默认为['$.'](不允许根路径)
|
|
155
|
-
- disallow_op:不允许的操作类型列表
|
|
156
|
-
|
|
157
|
-
### 返回值
|
|
158
|
-
- 返回过滤后的补丁列表
|
|
159
|
-
|
|
160
|
-
### 示例
|
|
161
|
-
```python
|
|
162
|
-
patches = [
|
|
163
|
-
{"op": "add", "path": "/datalist/0/name", "value": "John"},
|
|
164
|
-
{"op": "add", "path": "/data/age", "value": 30},
|
|
165
|
-
{"op": "replace", "path": "/data/city", "value": "New York"}
|
|
166
|
-
]
|
|
167
|
-
|
|
168
|
-
filtered = kit.filted_patchs(
|
|
169
|
-
patches,
|
|
170
|
-
allow_list=[r".*/name", r"/data/.*"],
|
|
171
|
-
disallow_op=["replace"] # 不允许replace操作
|
|
172
|
-
)
|
|
173
|
-
|
|
174
|
-
# 输出:[{"op": "add", "path": "/datalist/0/name", "value": "John"},{"op": "add", "path": "/data/age", "value": 30},]
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
## 函数apply_filtered_patchs(original_jsonpatchs, filted_jsonpatchs, allow_list, disallow_list, disallow_op)
|
|
178
|
-
恢复被过滤的补丁,将过滤处理后的补丁重新合并到原始补丁列表中。
|
|
179
|
-
|
|
180
|
-
### 参数
|
|
181
|
-
- original_jsonpatchs:原始JSON补丁列表
|
|
182
|
-
- filted_jsonpatchs:经过过滤处理的补丁列表
|
|
183
|
-
- allow_list:允许的路径模式列表
|
|
184
|
-
- disallow_list:不允许的路径模式列表
|
|
185
|
-
- disallow_op:不允许的操作类型列表
|
|
186
|
-
|
|
187
|
-
### 返回值
|
|
188
|
-
- 返回恢复后的JSON补丁列表
|
|
189
|
-
|
|
190
|
-
### 示例
|
|
191
|
-
filted_patchs()函数的逆操作,此处不再赘述
|
|
192
|
-
|
|
193
|
-
# 完整示例
|
|
194
|
-
```python
|
|
195
|
-
from translatekit import *
|
|
196
|
-
import json
|
|
197
|
-
import jsonpatch
|
|
198
|
-
# 配置翻译参数
|
|
199
|
-
config = TranslationConfig(
|
|
200
|
-
api_setting={"appid":"filted","appkey":"secret"},
|
|
201
|
-
target_lang="zh", # 目标语言
|
|
202
|
-
debug_mode=True,
|
|
203
|
-
enable_cache=True,
|
|
204
|
-
enable_metrics=True
|
|
205
|
-
)
|
|
206
|
-
# 创建翻译器实例
|
|
207
|
-
translator = BaiduTranslator(config=config)
|
|
208
|
-
with open(r"test_assets\EN_1D101A.json", "r", encoding="utf-8") as f:
|
|
209
|
-
dicts = json.load(f)
|
|
210
|
-
jsonpatchs = kit.compare_json({}, dicts)
|
|
211
|
-
jsonpatchs = kit.deoptimize_patch(jsonpatchs)
|
|
212
|
-
allow_list = [r".*/teller", r".*/dialog", r".*/place", r".*/content"]
|
|
213
|
-
filted_jsonpatchs = kit.filted_patchs(jsonpatchs, allow_list=allow_list)
|
|
214
|
-
texts = kit.make_list_patch(filted_jsonpatchs)
|
|
215
|
-
[print(i) for i in texts]
|
|
216
|
-
results = translator.translate(texts)
|
|
217
|
-
[print(i) for i in results]
|
|
218
|
-
filted_jsonpatchs = kit.apply_list_patch(filted_jsonpatchs, results)
|
|
219
|
-
jsonpatchs = kit.apply_filtered_patchs(jsonpatchs, filted_jsonpatchs, allow_list=allow_list)
|
|
220
|
-
results = kit.apply_patch({}, jsonpatchs)
|
|
221
|
-
with open(r"test_assets\EN_1D101A_ZH.json", "w", encoding="utf-8") as f:
|
|
222
|
-
json.dump(results, f, ensure_ascii=False, indent=4)
|
|
223
|
-
print(translator.get_performance_metrics())
|
|
224
|
-
```
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|