46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
import aiohttp
|
||
import json
|
||
from langdetect import detect
|
||
import re
|
||
|
||
class Translate:
|
||
def __init__(self, api_url="https://libretranslate.com/translate"):
|
||
self.api_url = api_url
|
||
|
||
async def translate_text(self, text, source_lang, target_lang="ru"):
|
||
params = {
|
||
'q': text,
|
||
'source': source_lang,
|
||
'target': target_lang,
|
||
}
|
||
|
||
async with aiohttp.ClientSession() as session:
|
||
async with session.get(self.api_url, params=params) as response:
|
||
data = await response.text()
|
||
|
||
translation = json.loads(data)[0]['translatedText']
|
||
return translation
|
||
|
||
async def preprocess_text(self, text):
|
||
text = re.sub(r'\s+', ' ', text) # Remove extra spaces
|
||
text = re.sub(r'[^A-Za-z0-9А-Яа-я\s]', '', text) # Remove special characters
|
||
return text
|
||
|
||
async def postprocess_text(self, text):
|
||
return f"[Translated]: {text}"
|
||
|
||
async def batch_translate_text(self, text_list, source_lang, target_lang="ru"):
|
||
translations = []
|
||
|
||
for text in text_list:
|
||
preprocessed_text = self.preprocess_text(text)
|
||
translated_text = await self.translate_text(preprocessed_text, source_lang, target_lang)
|
||
postprocessed_text = self.postprocess_text(translated_text)
|
||
translations.append(postprocessed_text)
|
||
|
||
return translations
|
||
|
||
async def detect_language(self, text):
|
||
detected_lang = detect(text)
|
||
return detected_lang
|