From 95761bcc621efe81e9506cff21b588b0cc4a8fbb Mon Sep 17 00:00:00 2001 From: NorthOC Date: Thu, 23 Feb 2023 19:45:05 +0200 Subject: [PATCH 1/3] Reduced the number of API calls on large batch translations by checking against a dictionary of already translated identical sentences --- deep_translator/base.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/deep_translator/base.py b/deep_translator/base.py index 9b20cb5..c607338 100644 --- a/deep_translator/base.py +++ b/deep_translator/base.py @@ -27,6 +27,7 @@ def __init__( payload_key: Optional[str] = None, element_tag: Optional[str] = None, element_query: Optional[dict] = None, + already_translated: dict[str, str] = {}, **url_params, ): """ @@ -35,6 +36,7 @@ def __init__( """ self._base_url = base_url self._languages = languages + self._already_translated = already_translated self._supported_languages = list(self._languages.keys()) if not source: raise InvalidSourceOrTargetLanguage(source) @@ -177,7 +179,11 @@ def _translate_batch(self, batch: List[str], **kwargs) -> List[str]: if not batch: raise Exception("Enter your text list that you want to translate") arr = [] - for i, text in enumerate(batch): - translated = self.translate(text, **kwargs) + for _i, text in enumerate(batch): + if text in self._already_translated.keys: + translated = self._already_translated[text] + else: + translated = self.translate(text, **kwargs) + self._already_translated[text] = translated arr.append(translated) return arr From 3cd73291503b3a77e6b589ff583e67f20d1e1bff Mon Sep 17 00:00:00 2001 From: NorthOC Date: Sat, 4 Mar 2023 17:17:43 +0200 Subject: [PATCH 2/3] removed redundant keys method on dict iteration --- deep_translator/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deep_translator/base.py b/deep_translator/base.py index c607338..786368e 100644 --- a/deep_translator/base.py +++ b/deep_translator/base.py @@ -180,7 +180,7 @@ def _translate_batch(self, batch: List[str], **kwargs) -> List[str]: raise Exception("Enter your text list that you want to translate") arr = [] for _i, text in enumerate(batch): - if text in self._already_translated.keys: + if text in self._already_translated: translated = self._already_translated[text] else: translated = self.translate(text, **kwargs) From 3322721c2c576f1b017d04d62b009b795fec069d Mon Sep 17 00:00:00 2001 From: NorthOC Date: Mon, 6 Mar 2023 22:31:48 +0200 Subject: [PATCH 3/3] moved already_translated variable into _translate_batch() function --- deep_translator/base.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/deep_translator/base.py b/deep_translator/base.py index 786368e..d5d2b78 100644 --- a/deep_translator/base.py +++ b/deep_translator/base.py @@ -27,7 +27,6 @@ def __init__( payload_key: Optional[str] = None, element_tag: Optional[str] = None, element_query: Optional[dict] = None, - already_translated: dict[str, str] = {}, **url_params, ): """ @@ -36,7 +35,6 @@ def __init__( """ self._base_url = base_url self._languages = languages - self._already_translated = already_translated self._supported_languages = list(self._languages.keys()) if not source: raise InvalidSourceOrTargetLanguage(source) @@ -179,11 +177,12 @@ def _translate_batch(self, batch: List[str], **kwargs) -> List[str]: if not batch: raise Exception("Enter your text list that you want to translate") arr = [] + already_translated = {} for _i, text in enumerate(batch): - if text in self._already_translated: - translated = self._already_translated[text] + if text in already_translated: + translated = already_translated[text] else: translated = self.translate(text, **kwargs) - self._already_translated[text] = translated + already_translated[text] = translated arr.append(translated) return arr