cloudlanguagetools 11.1.0__tar.gz → 11.2.1__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/PKG-INFO +1 -1
  2. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/cereproc.py +2 -16
  3. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/deepl.py +35 -33
  4. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/easypronunciation.py +42 -24
  5. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/elevenlabs.py +2 -23
  6. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/forvo.py +4 -0
  7. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/languages.py +1 -0
  8. cloudlanguagetools-11.2.1/cloudlanguagetools/service.py +53 -0
  9. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools.egg-info/PKG-INFO +1 -1
  10. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/setup.py +1 -1
  11. cloudlanguagetools-11.1.0/cloudlanguagetools/service.py +0 -23
  12. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/LICENSE +0 -0
  13. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/README.rst +0 -0
  14. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/__init__.py +0 -0
  15. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/amazon.py +0 -0
  16. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/argostranslate.py +0 -0
  17. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/azure.py +0 -0
  18. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/chatapi.py +0 -0
  19. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/constants.py +0 -0
  20. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/dictionarylookup.py +0 -0
  21. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/encryption.py +0 -0
  22. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/epitran.py +0 -0
  23. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/errors.py +0 -0
  24. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/fptai.py +0 -0
  25. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/google.py +0 -0
  26. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/keys.py +0 -0
  27. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/libretranslate.py +0 -0
  28. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/mandarincantonese.py +0 -0
  29. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/naver.py +0 -0
  30. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/openai.py +0 -0
  31. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/options.py +0 -0
  32. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/pythainlp.py +0 -0
  33. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/servicemanager.py +0 -0
  34. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/spacy.py +0 -0
  35. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/test_services.py +0 -0
  36. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/tokenization.py +0 -0
  37. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/translationlanguage.py +0 -0
  38. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/transliterationlanguage.py +0 -0
  39. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/ttsvoice.py +0 -0
  40. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/vocalware.py +0 -0
  41. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/voicen.py +0 -0
  42. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/watson.py +0 -0
  43. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools/wenlin.py +0 -0
  44. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools.egg-info/SOURCES.txt +0 -0
  45. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools.egg-info/dependency_links.txt +0 -0
  46. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools.egg-info/requires.txt +0 -0
  47. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/cloudlanguagetools.egg-info/top_level.txt +0 -0
  48. {cloudlanguagetools-11.1.0 → cloudlanguagetools-11.2.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudlanguagetools
3
- Version: 11.1.0
3
+ Version: 11.2.1
4
4
  Summary: Interface with various cloud APIs for language processing such as translation, text to speech
5
5
  Home-page: https://github.com/Language-Tools/cloud-language-tools-core
6
6
  Author: Luc
@@ -50,7 +50,7 @@ class CereProcVoice(cloudlanguagetools.ttsvoice.TtsVoice):
50
50
 
51
51
  class CereProcService(cloudlanguagetools.service.Service):
52
52
  def __init__(self):
53
- pass
53
+ self.service = cloudlanguagetools.constants.Service.CereProc
54
54
 
55
55
  def configure(self, config):
56
56
  self.username = config['username']
@@ -98,27 +98,13 @@ class CereProcService(cloudlanguagetools.service.Service):
98
98
  return result
99
99
 
100
100
  def get_tts_audio(self, text, voice_key, options):
101
- output_temp_file = tempfile.NamedTemporaryFile()
102
- output_temp_filename = output_temp_file.name
103
-
104
101
  voice_name = voice_key['name']
105
102
  url = f'https://api.cerevoice.com/v2/speak?voice={voice_name}&audio_format=mp3'
106
103
 
107
-
108
104
  ssml_text = f"""<?xml version="1.0" encoding="UTF-8"?>
109
105
  <speak xmlns="http://www.w3.org/2001/10/synthesis">{text}</speak>""".encode(encoding='utf-8')
110
106
 
111
- # logging.debug(f'querying url: {url}')
112
- response = requests.post(url, data=ssml_text, headers=self.get_auth_headers(), timeout=cloudlanguagetools.constants.RequestTimeout)
113
-
114
- if response.status_code == 200:
115
- with open(output_temp_filename, 'wb') as audio:
116
- audio.write(response.content)
117
- return output_temp_file
118
-
119
- # otherwise, an error occured
120
- error_message = f"Status code: {response.status_code} reason: {response.reason} voice: [{voice_name}]]"
121
- raise cloudlanguagetools.errors.RequestError(error_message)
107
+ return self.get_tts_audio_base_post_request(url, data=ssml_text, headers=self.get_auth_headers())
122
108
 
123
109
 
124
110
  def get_transliteration_language_list(self):
@@ -3,15 +3,16 @@ import requests
3
3
  import tempfile
4
4
  import logging
5
5
  import os
6
+ import pprint
6
7
 
7
8
  import cloudlanguagetools.service
8
9
  import cloudlanguagetools.constants
9
10
  import cloudlanguagetools.languages
10
- import cloudlanguagetools.ttsvoice
11
11
  import cloudlanguagetools.translationlanguage
12
12
  import cloudlanguagetools.transliterationlanguage
13
13
  import cloudlanguagetools.errors
14
14
 
15
+ logger = logging.getLogger(__name__)
15
16
 
16
17
  class DeepLTranslationLanguage(cloudlanguagetools.translationlanguage.TranslationLanguage):
17
18
  def __init__(self, language, language_id):
@@ -34,42 +35,43 @@ class DeepLService(cloudlanguagetools.service.Service):
34
35
  def get_tts_voice_list(self):
35
36
  return []
36
37
 
38
+ def get_headers(self):
39
+ return {
40
+ 'Authorization': f'DeepL-Auth-Key {self.api_key}'
41
+ }
37
42
 
38
- def get_translation_language_list(self):
43
+ def get_language_enum(self, deepl_language_code):
44
+ lowercase_str = deepl_language_code.lower()
45
+ override_map = {
46
+ 'id': 'id_',
47
+ 'zh': 'zh_cn',
48
+ 'pt': 'pt_pt'
49
+ }
50
+ lowercase_str = override_map.get(lowercase_str, lowercase_str)
39
51
  language = cloudlanguagetools.languages.Language
40
- result = [
41
- DeepLTranslationLanguage(language.bg, 'BG'),
42
- DeepLTranslationLanguage(language.cs, 'CS'),
43
- DeepLTranslationLanguage(language.da, 'DA'),
44
- DeepLTranslationLanguage(language.de, 'DE'),
45
- DeepLTranslationLanguage(language.el, 'EL'),
46
- DeepLTranslationLanguage(language.en, 'EN'),
47
- DeepLTranslationLanguage(language.es, 'ES'),
48
- DeepLTranslationLanguage(language.et, 'ET'),
49
- DeepLTranslationLanguage(language.fi, 'FI'),
50
- DeepLTranslationLanguage(language.fr, 'FR'),
51
- DeepLTranslationLanguage(language.hu, 'HU'),
52
- DeepLTranslationLanguage(language.id_, 'ID'),
53
- DeepLTranslationLanguage(language.it, 'IT'),
54
- DeepLTranslationLanguage(language.ja, 'JA'),
55
- DeepLTranslationLanguage(language.lt, 'LT'),
56
- DeepLTranslationLanguage(language.lv, 'LV'),
57
- DeepLTranslationLanguage(language.nl, 'NL'),
58
- DeepLTranslationLanguage(language.pl, 'PL'),
59
- DeepLTranslationLanguage(language.pt_pt, 'PT-PT'),
60
- DeepLTranslationLanguage(language.pt_br, 'PT-BR'),
61
- DeepLTranslationLanguage(language.ro, 'RO'),
62
- DeepLTranslationLanguage(language.ru, 'RU'),
63
- DeepLTranslationLanguage(language.sk, 'SK'),
64
- DeepLTranslationLanguage(language.sl, 'SL'),
65
- DeepLTranslationLanguage(language.sv, 'SV'),
66
- DeepLTranslationLanguage(language.tr, 'TR'),
67
- DeepLTranslationLanguage(language.uk, 'UK'),
68
- DeepLTranslationLanguage(language.zh_cn, 'ZH'),
69
- ]
70
- return result
52
+ return language[lowercase_str]
71
53
 
72
54
 
55
+ def get_translation_language_list(self):
56
+ language = cloudlanguagetools.languages.Language
57
+ url = 'https://api.deepl.com/v2/languages'
58
+ response = requests.get(url, headers=self.get_headers(), timeout=cloudlanguagetools.constants.RequestTimeout)
59
+ response.raise_for_status()
60
+ # pprint.pprint(response.json())
61
+ results = []
62
+ for language_entry in response.json():
63
+ try:
64
+ # pprint.pprint(language_entry)
65
+ deepl_language_code = language_entry['language']
66
+ language_enum = self.get_language_enum(deepl_language_code)
67
+ results.append(DeepLTranslationLanguage(language_enum, deepl_language_code))
68
+ # if it's portuguese, replicate the entry for PT-PT and PT-BR
69
+ if language_enum == language.pt_pt:
70
+ results.append(DeepLTranslationLanguage(language.pt_br, deepl_language_code))
71
+ except Exception as e:
72
+ logger.exception(f'could not process Deepl language entry: {language_entry}')
73
+ return results
74
+
73
75
  def get_tts_voice_list(self):
74
76
  result = []
75
77
  return result
@@ -1,6 +1,8 @@
1
1
  import os
2
2
  import requests
3
3
  import urllib.parse
4
+ import json
5
+ import logging
4
6
 
5
7
  import cloudlanguagetools.service
6
8
  import cloudlanguagetools.constants
@@ -10,6 +12,8 @@ import cloudlanguagetools.transliterationlanguage
10
12
  VARIANT_JAPANESE_ROMAJI = 'Romaji'
11
13
  VARIANT_JAPANESE_KANA = 'Kana'
12
14
 
15
+ logger = logging.getLogger(__name__)
16
+
13
17
  class EasyPronunciationTransliterationLanguage(cloudlanguagetools.transliterationlanguage.TransliterationLanguage):
14
18
  def __init__(self, url_path, language, api_params, api_key, variant = None):
15
19
  self.service = cloudlanguagetools.constants.Service.EasyPronunciation
@@ -209,27 +213,41 @@ class EasyPronunciationService(cloudlanguagetools.service.Service):
209
213
  full_url = f'{api_url}?{encoded_parameters}'
210
214
 
211
215
  # print(full_url)
212
- request = requests.get(full_url)
213
- result = request.json()
214
-
215
- # print(request)
216
- # print(result)
217
-
218
- if 'phonetic_transcription' in result:
219
- phonetic_transcription = result['phonetic_transcription']
220
- result_components = []
221
- for entry in phonetic_transcription:
222
- result_components.append(entry['transcriptions'][0])
223
-
224
- if 'variant' in transliteration_key:
225
- if transliteration_key['variant'] == VARIANT_JAPANESE_ROMAJI:
226
- result_components = [x['romaji'] for x in result_components]
227
- if transliteration_key['variant'] == VARIANT_JAPANESE_KANA:
228
- result_components = [x['kana'] for x in result_components]
229
-
230
- # print(result_components)
231
- return ' '.join(result_components)
232
-
233
- # an error occured
234
- error_message = f'EasyPronunciation: could not perform conversion: {str(result)}'
235
- raise cloudlanguagetools.errors.RequestError(error_message)
216
+ try:
217
+ response = requests.get(full_url)
218
+ response.raise_for_status()
219
+ result = response.json()
220
+
221
+ # print(request)
222
+ # print(result)
223
+
224
+ if 'phonetic_transcription' in result:
225
+ phonetic_transcription = result['phonetic_transcription']
226
+ result_components = []
227
+ for entry in phonetic_transcription:
228
+ result_components.append(entry['transcriptions'][0])
229
+
230
+ if 'variant' in transliteration_key:
231
+ if transliteration_key['variant'] == VARIANT_JAPANESE_ROMAJI:
232
+ result_components = [x['romaji'] for x in result_components]
233
+ if transliteration_key['variant'] == VARIANT_JAPANESE_KANA:
234
+ result_components = [x['kana'] for x in result_components]
235
+
236
+ # print(result_components)
237
+ return ' '.join(result_components)
238
+
239
+ # an error occured
240
+ error_message = f'EasyPronunciation: could not perform conversion: {str(result)}'
241
+ raise cloudlanguagetools.errors.RequestError(error_message)
242
+
243
+ except requests.exceptions.ReadTimeout as exception:
244
+ raise cloudlanguagetools.errors.TimeoutError(f'timeout while retrieving EasyPronouncation transliteration')
245
+ # handle json decode error
246
+ except json.decoder.JSONDecodeError as exception:
247
+ logger.error(f'could not decode json response from EasyPronounciation: {response.content}')
248
+ raise cloudlanguagetools.errors.RequestError('Unable to retrieve transliteration from EasyPronounciation')
249
+ except Exception as exception:
250
+ # make sure not to leak url and key
251
+ msg = 'could not retrieve EasyPronouncation transliteration'
252
+ logger.exception(msg)
253
+ raise cloudlanguagetools.errors.RequestError(msg)
@@ -67,7 +67,7 @@ class ElevenLabsVoice(cloudlanguagetools.ttsvoice.TtsVoice):
67
67
 
68
68
  class ElevenLabsService(cloudlanguagetools.service.Service):
69
69
  def __init__(self):
70
- pass
70
+ self.service = cloudlanguagetools.constants.Service.ElevenLabs
71
71
 
72
72
  def configure(self, config):
73
73
  self.api_key = config['api_key']
@@ -79,16 +79,12 @@ class ElevenLabsService(cloudlanguagetools.service.Service):
79
79
  }
80
80
 
81
81
  def get_tts_audio(self, text, voice_key, options):
82
- import requests
83
-
84
- CHUNK_SIZE = 1024
85
82
  voice_id = voice_key['voice_id']
86
83
  url = f'https://api.elevenlabs.io/v1/text-to-speech/{voice_id}'
87
84
 
88
85
  headers = self.get_headers()
89
86
  headers['Accept'] = "audio/mpeg"
90
87
 
91
-
92
88
  data = {
93
89
  "text": text,
94
90
  "model_id": voice_key['model_id'],
@@ -98,24 +94,7 @@ class ElevenLabsService(cloudlanguagetools.service.Service):
98
94
  }
99
95
  }
100
96
 
101
- response = requests.post(url, json=data, headers=headers, timeout=cloudlanguagetools.constants.RequestTimeout)
102
- if response.status_code != 200:
103
- error_message = f'ElevenLabs: error processing TTS request: {response.status_code} {response.text}'
104
- logger.error(error_message)
105
- raise cloudlanguagetools.errors.RequestError(error_message)
106
-
107
-
108
- response.raise_for_status()
109
-
110
- output_temp_file = tempfile.NamedTemporaryFile()
111
- output_temp_filename = output_temp_file.name
112
-
113
- with open(output_temp_filename, 'wb') as f:
114
- for chunk in response.iter_content(chunk_size=CHUNK_SIZE):
115
- if chunk:
116
- f.write(chunk)
117
-
118
- return output_temp_file
97
+ return self.get_tts_audio_base_post_request(url, json=data, headers=headers)
119
98
 
120
99
 
121
100
 
@@ -105,6 +105,10 @@ class ForvoService(cloudlanguagetools.service.Service):
105
105
  raise cloudlanguagetools.errors.TimeoutError(f'timeout while retrieving forvo audio')
106
106
  except cloudlanguagetools.errors.NotFoundError as exception:
107
107
  raise exception
108
+ # handle json decode error
109
+ except json.decoder.JSONDecodeError as exception:
110
+ logger.error(f'could not decode json response from forvo: {response.content}')
111
+ raise cloudlanguagetools.errors.RequestError('Unable to retrieve audio from Forvo')
108
112
  except Exception as exception:
109
113
  # make sure not to leak url and key
110
114
  logger.exception('could not retrieve forvo audio')
@@ -65,6 +65,7 @@ class Language(enum.Enum):
65
65
  id_ = ("Indonesian")
66
66
  ilo = ("Iloko")
67
67
  ga = ("Irish")
68
+ hne = ("Chhattisgarhi")
68
69
  it = ("Italian")
69
70
  ja = ("Japanese")
70
71
  jw = ("Javanese")
@@ -0,0 +1,53 @@
1
+ import requests
2
+ import tempfile
3
+ import logging
4
+
5
+ import cloudlanguagetools.constants
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+ class Service():
10
+ def __init__(self):
11
+ pass
12
+
13
+ def get_service_name(self):
14
+ return self.service.name
15
+
16
+ def post_request(self, url, **kwargs):
17
+ kwargs['timeout'] = cloudlanguagetools.constants.RequestTimeout
18
+ return requests.post(url, **kwargs)
19
+
20
+ def get_tts_audio_base_post_request(self, url, **kwargs):
21
+ try:
22
+ response = self.post_request(url, **kwargs)
23
+ response.raise_for_status()
24
+ output_temp_file = tempfile.NamedTemporaryFile()
25
+ output_temp_filename = output_temp_file.name
26
+ with open(output_temp_filename, 'wb') as audio:
27
+ audio.write(response.content)
28
+ return output_temp_file
29
+ except requests.exceptions.ReadTimeout as exception:
30
+ raise cloudlanguagetools.errors.TimeoutError(f'timeout while retrieving {self.get_service_name()} audio')
31
+ except Exception as exception:
32
+ error_message = f'could not retrieve audio from {self.get_service_name()}'
33
+ logger.exception(error_message)
34
+ raise cloudlanguagetools.errors.RequestError(error_message)
35
+
36
+ # used for pre-loading models
37
+ def load_data(self):
38
+ pass
39
+
40
+ def get_tts_voice_list(self):
41
+ return []
42
+
43
+ def get_translation_language_list(self):
44
+ return []
45
+
46
+ def get_transliteration_language_list(self):
47
+ return []
48
+
49
+ def get_tokenization_options(self):
50
+ return []
51
+
52
+ def get_dictionary_lookup_list(self):
53
+ return []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudlanguagetools
3
- Version: 11.1.0
3
+ Version: 11.2.1
4
4
  Summary: Interface with various cloud APIs for language processing such as translation, text to speech
5
5
  Home-page: https://github.com/Language-Tools/cloud-language-tools-core
6
6
  Author: Luc
@@ -6,7 +6,7 @@ from setuptools.command.install import install
6
6
  # twine upload dist/*
7
7
 
8
8
  setup(name='cloudlanguagetools',
9
- version='11.1.0',
9
+ version='11.2.1',
10
10
  description='Interface with various cloud APIs for language processing such as translation, text to speech',
11
11
  long_description=open('README.rst', encoding='utf-8').read(),
12
12
  url='https://github.com/Language-Tools/cloud-language-tools-core',
@@ -1,23 +0,0 @@
1
-
2
- class Service():
3
- def __init__(self):
4
- pass
5
-
6
- # used for pre-loading models
7
- def load_data(self):
8
- pass
9
-
10
- def get_tts_voice_list(self):
11
- return []
12
-
13
- def get_translation_language_list(self):
14
- return []
15
-
16
- def get_transliteration_language_list(self):
17
- return []
18
-
19
- def get_tokenization_options(self):
20
- return []
21
-
22
- def get_dictionary_lookup_list(self):
23
- return []