瀏覽代碼

feat (translator) : add argos translate

hellofinch 1 年之前
父節點
當前提交
2c921e8629
共有 3 個文件被更改,包括 46 次插入1 次删除
  1. 2 1
      pdf2zh/converter.py
  2. 2 0
      pdf2zh/gui.py
  3. 42 0
      pdf2zh/translator.py

+ 2 - 1
pdf2zh/converter.py

@@ -35,6 +35,7 @@ from pdf2zh.translator import (
     TencentTranslator,
     DifyTranslator,
     AnythingLLMTranslator,
+    ArgosTranslator,
 )
 from pymupdf import Font
 
@@ -150,7 +151,7 @@ class TranslateConverter(PDFConverterEx):
         service_name = param[0]
         service_model = param[1] if len(param) > 1 else None
         for translator in [GoogleTranslator, BingTranslator, DeepLTranslator, DeepLXTranslator, OllamaTranslator, AzureOpenAITranslator,
-                           OpenAITranslator, ZhipuTranslator, ModelScopeTranslator, SiliconTranslator, GeminiTranslator, AzureTranslator, TencentTranslator, DifyTranslator, AnythingLLMTranslator]:
+                           OpenAITranslator, ZhipuTranslator, ModelScopeTranslator, SiliconTranslator, GeminiTranslator, AzureTranslator, TencentTranslator, DifyTranslator, AnythingLLMTranslator,ArgosTranslator]:
             if service_name == translator.name:
                 self.translator = translator(lang_in, lang_out, service_model, envs=envs, prompt=prompt)
         if not self.translator:

+ 2 - 0
pdf2zh/gui.py

@@ -22,6 +22,7 @@ from pdf2zh.translator import (
     DeepLTranslator,
     DeepLXTranslator,
     DifyTranslator,
+    ArgosTranslator,
     GeminiTranslator,
     GoogleTranslator,
     ModelScopeTranslator,
@@ -49,6 +50,7 @@ service_map: dict[str, BaseTranslator] = {
     "Tencent": TencentTranslator,
     "Dify": DifyTranslator,
     "AnythingLLM": AnythingLLMTranslator,
+    "Argos Translate": ArgosTranslator,
 }
 
 # The following variables associate strings with specific languages

+ 42 - 0
pdf2zh/translator.py

@@ -14,6 +14,8 @@ from tencentcloud.common import credential
 from tencentcloud.tmt.v20180321.tmt_client import TmtClient
 from tencentcloud.tmt.v20180321.models import TextTranslateRequest
 from tencentcloud.tmt.v20180321.models import TextTranslateResponse
+import argostranslate.package
+import argostranslate.translate
 
 import json
 
@@ -546,3 +548,43 @@ class DifyTranslator(BaseTranslator):
 
         # 解析响应
         return response_data.get("data", {}).get("outputs", {}).get("text", [])
+
+
+class ArgosTranslator(BaseTranslator):
+    name = "argos"
+
+    def __init__(self, lang_in, lang_out, model, **kwargs):
+        super().__init__(lang_in, lang_out, model)
+        lang_in = self.lang_map.get(lang_in.lower(), lang_in)
+        lang_out = self.lang_map.get(lang_out.lower(), lang_out)
+        self.lang_in = lang_in
+        self.lang_out = lang_out
+        argostranslate.package.update_package_index()
+        available_packages = argostranslate.package.get_available_packages()
+        try:
+            available_package = list(
+                filter(
+                    lambda x: x.from_code == self.lang_in
+                    and x.to_code == self.lang_out,
+                    available_packages,
+                )
+            )[0]
+        except Exception:
+            raise ValueError(
+                "lang_in and lang_out pair not supported by Argos Translate."
+            )
+        download_path = available_package.download()
+        argostranslate.package.install_from_path(download_path)
+
+    def translate(self, text):
+        # Translate
+        installed_languages = argostranslate.translate.get_installed_languages()
+        from_lang = list(filter(lambda x: x.code == self.lang_in, installed_languages))[
+            0
+        ]
+        to_lang = list(filter(lambda x: x.code == self.lang_out, installed_languages))[
+            0
+        ]
+        translation = from_lang.get_translation(to_lang)
+        translatedText = translation.translate(text)
+        return translatedText