File size: 3,300 Bytes
fa90b1d 0d89ff1 7a05cd7 77f147b 7a05cd7 0d89ff1 3aa1058 a0b5eac 77f147b f89616a 77f147b a6888ed 77f147b 7ade3be 0d89ff1 7ade3be 77f147b cb15d3a 77f147b 0d89ff1 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 3aa1058 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 110 111 112 113 114 115 116 117 118 119 120 |
__copyright__ = "Copyright (C) 2020 Nidhal Baccouri"
import os
from typing import List, Optional
import requests
from deep_translator.base import BaseTranslator
from deep_translator.constants import (
BASE_URLS,
QCRI_ENV_VAR,
QCRI_LANGUAGE_TO_CODE,
)
from deep_translator.exceptions import (
ApiKeyException,
ServerException,
TranslationNotFound,
)
from deep_translator.validate import request_failed
class QcriTranslator(BaseTranslator):
"""
class that wraps functions, which use the QRCI translator under the hood to translate word(s)
"""
def __init__(
self,
source: str = "en",
target: str = "en",
api_key: Optional[str] = os.getenv(QCRI_ENV_VAR, None),
**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 ApiKeyException(QCRI_ENV_VAR)
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 request_failed(status_code=response.status_code):
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)
|