File size: 3,117 Bytes
fa90b1d 7a05cd7 77f147b 7a05cd7 78d0ff1 a0b5eac 77f147b f89616a 77f147b a6888ed 77f147b 7ade3be 77f147b cb15d3a 77f147b 1f09504 77f147b 78d0ff1 2bbc526 f651d07 2bbc526 78d0ff1 2bbc526 77f147b 7ade3be cb15d3a 7ade3be 1f09504 78d0ff1 1f09504 77f147b 1f09504 77f147b 1f09504 77f147b 7ade3be 77f147b 78d0ff1 2bbc526 78d0ff1 77f147b 1f09504 77f147b 1f09504 77f147b 1f09504 af08fe3 1f09504 7ade3be 2bbc526 7ade3be 77f147b b046d4e 77f147b 2bbc526 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
__copyright__ = "Copyright (C) 2020 Nidhal Baccouri"
from typing import List, Optional
import requests
from deep_translator.base import BaseTranslator
from deep_translator.constants import BASE_URLS, QCRI_LANGUAGE_TO_CODE
from deep_translator.exceptions import ServerException, TranslationNotFound
class QcriTranslator(BaseTranslator):
"""
class that wraps functions, which use the QRCI translator under the hood to translate word(s)
"""
def __init__(
self,
api_key: Optional[str] = None,
source: str = "en",
target: str = "en",
**kwargs,
):
"""
@param api_key: your qrci api key.
Get one for free here https://mt.qcri.org/api/v1/ref
"""
if not api_key:
raise ServerException(401)
self.api_key = api_key
self.api_endpoints = {
"get_languages": "getLanguagePairs",
"get_domains": "getDomains",
"translate": "translate",
}
self.params = {"key": self.api_key}
super().__init__(
base_url=BASE_URLS.get("QCRI"),
source=source,
target=target,
languages=QCRI_LANGUAGE_TO_CODE,
**kwargs,
)
def _get(
self,
endpoint: str,
params: Optional[dict] = None,
return_text: bool = True,
):
if not params:
params = self.params
try:
res = requests.get(
self._base_url.format(endpoint=self.api_endpoints[endpoint]),
params=params,
)
return res.text if return_text else res
except Exception as e:
raise e
@property
def languages(self):
return self.get_supported_languages()
def get_domains(self):
domains = self._get("get_domains")
return domains
@property
def domains(self):
return self.get_domains()
def translate(self, text: str, **kwargs) -> str:
params = {
"key": self.api_key,
"langpair": f"{self._source}-{self._target}",
"domain": kwargs["domain"],
"text": text,
}
try:
response = self._get("translate", params=params, return_text=False)
except ConnectionError:
raise ServerException(503)
else:
if response.status_code != 200:
ServerException(response.status_code)
else:
res = response.json()
translation = res.get("translatedText")
if not translation:
raise TranslationNotFound(text)
return translation
def translate_file(self, path: str, **kwargs) -> str:
return self._translate_file(path, **kwargs)
def translate_batch(self, batch: List[str], **kwargs) -> List[str]:
"""
translate a batch of texts
@domain: domain
@param batch: list of texts to translate
@return: list of translations
"""
return self._translate_batch(batch, **kwargs)
|