File size: 2,889 Bytes
77f147b 810451b 77f147b 1f09504 77f147b a6888ed 77f147b 55109ff 77f147b 1f09504 b046d4e 77f147b 1f09504 77f147b 1f09504 77f147b 7571a30 186e33e b5fa991 cf99caa b5fa991 186e33e 77f147b 1f09504 77f147b 1f09504 77f147b 55109ff 77f147b b046d4e 1f09504 77f147b 1f09504 77f147b 1f09504 77f147b 1f09504 af08fe3 1f09504 55109ff 77f147b b046d4e 77f147b 55109ff 77f147b |
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 |
import requests
from .constants import BASE_URLS, QCRI_LANGUAGE_TO_CODE
from .exceptions import (ServerException, TranslationNotFound)
class QCRI(object):
"""
class that wraps functions, which use the QRCI translator under the hood to translate word(s)
"""
def __init__(self, api_key=None, source="en", target="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.__base_url = BASE_URLS.get("QCRI")
self.source = source
self.target = target
self.api_key = api_key
self.api_endpoints = {
"get_languages": "getLanguagePairs",
"get_domains": "getDomains",
"translate": "translate",
}
self.params = {
"key": self.api_key
}
def _get(self, endpoint, params=None, return_text=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
@staticmethod
def get_supported_languages(as_dict=False, **kwargs):
# Have no use for this as the format is not what we need
# Save this for whenever
# pairs = self._get("get_languages")
# Using a this one instead
return [*QCRI_LANGUAGE_TO_CODE.keys()] if not as_dict else QCRI_LANGUAGE_TO_CODE
@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, domain, **kwargs):
params = {
"key": self.api_key,
"langpair": "{}-{}".format(self.source, self.target),
"domain": 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_batch(self, batch, domain, **kwargs):
"""
translate a batch of texts
@domain: domain
@param batch: list of texts to translate
@return: list of translations
"""
return [self.translate(domain, text, **kwargs) for text in batch]
|