Exemplo n.º 1
0
def translate(source, lang_from, lang_to):
    """
    Translates source text from and to scpecified language
    """
    lang_from_bingcode = lang_from.bingcode if lang_from else None
    t = Translator(settings.MS_TRANSLATOR_CLIENT_ID, settings.MS_TRANSLATOR_CLIENT_SECRET)
    return t.translate(source, lang_from_bingcode, lang_to.bingcode)
Exemplo n.º 2
0
def btranslate(text_message, langfrom, langto):

    translator = Translator(client_id, client_secret)
    phrase_translated = translator.translate(text_message,
                                             lang_from=langfrom,
                                             lang_to=langto)
    #print phrase_translated
    return phrase_translated.encode('utf8')
Exemplo n.º 3
0
def btranslate(text_message, langfrom, langto):
    client_id = config.get('microsoft', 'client_id')
    client_secret = config.get('microsoft', 'client_secret')

    translator = Translator(client_id, client_secret)
    phrase_translated = translator.translate(
        text_message, lang_from=langfrom, lang_to=langto)

    return phrase_translated.encode('utf8')
Exemplo n.º 4
0
def makeFrenchQuery(myQuery):
    terms = parseQuery(myQuery)
    translator = Translator('myPythonTranslate64',
                            'YqNxIMdOAoaF5Am+/BT84sdQ1q7ZCNA1stU0viWcGi4=')
    frenchQuery = []
    for term in terms:
        translate = translator.translate(term, lang_from='en', lang_to='fr')
        frenchQuery.append(translate)
    return frenchQuery
Exemplo n.º 5
0
class TranslatorTestCase(unittest.TestCase):
    def setUp(self):
        self.translator = Translator(client_id, client_secret)
        self.translator_mock = TranslatorMock(client_id, client_secret)

    def test_translate(self):
        t = self.translator.translate('world', 'en', 'ru')
        self.assertEqual('мир', t)

    def test_translate_array(self):
        ts = self.translator.translate_array(['hello', 'world'], 'en', 'ru')
        translations = [t['TranslatedText'] for t in ts]
        self.assertEqual(['Привет', 'мир'], translations)

    def test_get_translations(self):
        t = self.translator.get_translations('world', 'en', 'ru')
        self.assertIsInstance(t, dict)
        self.assertIn('Translations', t)

    def test_break_sentences(self):
        t = self.translator.break_sentences('Hello. How are you?', 'en')
        self.assertEqual(['Hello. ', 'How are you?'], t)

    def test_add_translation(self):
        url = self.translator_mock.add_translation('orig', 'trans', 'en', 'ru', user='******')
        self.assertIn('originalText=orig', url)
        self.assertIn('translatedText=trans', url)

    def test_get_langs(self):
        langs = self.translator.get_langs()
        self.assertIsInstance(langs, list)
        self.assertIn('en', langs)

    def test_get_lang_names(self):
        lang_names = self.translator.get_lang_names(['ru', 'en'], 'en')
        self.assertEqual(['Russian', 'English'], lang_names)

    def test_get_speackable_langs(self):
        langs = self.translator.get_langs(speakable=True)
        self.assertIsInstance(langs, list)
        self.assertIn('en-us', langs)

    def test_detect_lang(self):
        self.assertEqual('en', self.translator.detect_lang('Hello'))

    def test_detect_langs(self):
        self.assertEqual(['en', 'ru'], self.translator.detect_langs(['Hello', 'Привет']))

    def test_speak(self):
        self.assertIsNotNone(self.translator.speak('Hello', 'en'))

    def test_speak_to_file(self):
        s = StringIO()
        self.translator.speak_to_file(s, 'Hello', 'en')
        s.seek(0)
        self.assertTrue(len(s.read()) > 0)
Exemplo n.º 6
0
def btranslate(text_message, langfrom, langto):
    client_id = config.get('microsoft', 'client_id')
    client_secret = config.get('microsoft', 'client_secret')

    translator = Translator(client_id, client_secret)
    phrase_translated = translator.translate(text_message,
                                             lang_from=langfrom,
                                             lang_to=langto)

    return phrase_translated.encode('utf8')
Exemplo n.º 7
0
    def analyse_entry(self, entry, params):
        txt = entry['nif:isString']
        lang = params.get("lang")
        lang_to = params.get("lang_to")
        key = params.get("key")
        print(params)
        translator = Translator(key)
        txttranslated = translator.translate(txt,
                                             lang_from=lang,
                                             lang_to=lang_to)
        entry['output'] = {"nif:isString": txttranslated}

        yield entry
Exemplo n.º 8
0
    def translate(self, textToTranslate, languageList):
        if type(textToTranslate) is not str:
            raise ValueError("The argument textToTranslate must be string")
        #to save our translation limit the api calls are commented. uncoment to enable translation
        translator = Translator(
            'GeorgiKaradjov', 'Y2c414NBMQlVgVPZK7vmFT7WZ/DJ4sKRYsTxG9NAXlQ=')
        tempTranslation = textToTranslate
        languageFrom = Language.English
        for language in languageList:
            if issubclass(type(language), Language):
                tempTranslation = translator.translate(
                    tempTranslation,
                    lang_from=languageFrom.value,
                    lang_to=language.value)
                languageFrom = language
            else:
                raise ValueError(
                    "You must pass only valid values from Languages enum")

        tempTranslation = translator.translate(tempTranslation,
                                               lang_from=languageFrom.value,
                                               lang_to=Language.English.value)
        return tempTranslation
Exemplo n.º 9
0
 def get_translation(to_translate):
     try:
         t = Translator('dorsalfunbot', 'lWJjt3W86DqQX5J+VGCDsvD3LU9/eZFvG0VQj4k6J/Y=')
         from_lang = t.detect_lang(to_translate)
         if from_lang == 'en':
             to_lang = 'fr'
             header = 'en -> fr:'
         else:
             to_lang = 'en'
             header = '{} -> en:'.format(from_lang)
         trans_text = t.translate(to_translate, lang_from=from_lang, lang_to=to_lang)
         return '{} {}'.format(header, trans_text)
     except Exception as e:
         print("Translation error: {}".format(e))
         return None
Exemplo n.º 10
0
def translate(texts: Union[str, List[str]],
              target_language: Lang = Lang.en) -> List[str]:
    """Microsoft translation implementation, see `brain.feature.translate`"""
    warnings.warn("Azure is not used as translation service anymore",
                  DeprecationWarning,
                  stacklevel=2)
    if not isinstance(texts, list):
        texts = [texts]
    # todo: reuse enum from language_detect
    translate_client = Translator(_KEY)
    translations = [
        translate_client.translate(t, lang_to=target_language.name)
        for t in texts
    ]
    if not translations:
        raise Exception('no translations')

    return translations
Exemplo n.º 11
0
def engine():
    # Get question from user as text
    question = request.form['question']

    #translate question
    translator = Translator('emad_punk123456',
                            'R0go6LNQEj3CVh7nhyHw/DLenWLuQNjyjdhnZ0okRGE=')
    translated_question = translator.translate(question,
                                               lang_from='ar',
                                               lang_to='en')
    lower_q = translated_question.lower()
    #unicode_question=unicode(question, "utf-8")
    # Send question to api for question analysis and generate query
    # this Online App is An example For apply Quepy Model on DBpedia
    # We use it only as a quick demo but we have alot we need to do ..
    if translated_question != "":
        url = "http://quepy.machinalis.com/engine/get_query?question=" + lower_q

    #gs.translate(text, 'de', 'en')
    # encoded_url = quote_plus(url.encode("utf-8"))
    #   Get sparql query as json
    r = requests.get(url)
    j = r.json()
    # Select only the sparql code
    query = (j['queries'][0]['query'])
    #print (query)
    # Send sparql-query to SPARQLWrapper Model to run it on dbpedia
    sparql = SPARQLWrapper("http://dbpedia.org/sparql")
    sparql.setQuery(query)
    sparql.setReturnFormat(JSON)
    # Get results as json
    results = sparql.query().convert()
    #convert question string to array
    q2 = question.split(' ')
    #wiki_question = wikipedia.summary(question)
    # return json to answer page to view.
    return render_template('answer.html',
                           query=query,
                           question=lower_q,
                           results=results,
                           q2=q2,
                           url=url)
Exemplo n.º 12
0
def translate_2(text, source_language_code, target_language_code):
	client_id = "irlab-pan-author-obfuscation-16"
	client_secret = "TWGKKcKQ/VoASe1EksnZBNNVA8mlThBsPQ/5z7Wqkkk="
	translator = Translator(client_id, client_secret)
	translation = translator.translate( text, lang_from=source_language_code, lang_to=target_language_code)
	return translation
Exemplo n.º 13
0
import os
import csv
from mstranslator import Translator

CLIENT_ID = 'NLP'
CLIENT_SECRET = '7I2PWW9SJDRNj72bIjTqh7xOn7eke+rPNDx94JUKJEA='


translator = Translator('NLP', CLIENT_SECRET)
files_in_dir = os.listdir("Data/Raw/")

for datum in files_in_dir:
	print "Translating " + datum
	o = open("Data/Translated/"+datum,'w')
	g = open("Data/Raw/"+datum,'r')
	f = csv.reader(g, delimiter=',')
	allposts = []
	writer = csv.writer(o)
	for line in f:
		allposts.append(translator.translate(line[0].decode("utf-8"), lang_from='hi', lang_to='en'))
	allposts = [[row] for row in allposts]
	writer.writerows(allposts)
		# o.write(gs.translate(line,'hi'))
	o.close()
	g.close()

print "Translation complete"
Exemplo n.º 14
0
class TranslatorTestCase(unittest.TestCase):
    def setUp(self):
        self.translator = Translator(client_id, client_secret)
        self.translator_mock = TranslatorMock(client_id, client_secret)

    def test_translate(self):
        t = self.translator.translate('world', 'en', 'ru')
        self.assertEqual('мир', t)

    def test_translate_array(self):
        ts = self.translator.translate_array(['hello', 'world'], 'en', 'ru')
        translations = [t['TranslatedText'] for t in ts]
        self.assertEqual(['Привет', 'мир'], translations)

    def test_translate_array2(self):
        ts = self.translator.translate_array2(['hello', 'world', 'Hello. How are you?'], 'en', 'ru')
        translations = [t['TranslatedText'] for t in ts]
        self.assertEqual(['Привет', 'мир', 'Привет. Как ваши дела?'], translations)
        alignments = [t['Alignment'] for t in ts]
        self.assertEqual(['0:4-0:5', '0:4-0:2', '0:5-0:6 7:18-8:21'], alignments)

    def test_get_translations(self):
        t = self.translator.get_translations('world', 'en', 'ru')
        self.assertIsInstance(t, dict)
        self.assertIn('Translations', t)

    def test_break_sentences(self):
        t = self.translator.break_sentences('Hello. How are you?', 'en')
        self.assertEqual(['Hello. ', 'How are you?'], t)

    def test_add_translation(self):
        url = self.translator_mock.add_translation('orig', 'trans', 'en', 'ru', user='******')
        self.assertIn('originalText=orig', url)
        self.assertIn('translatedText=trans', url)

    def test_get_langs(self):
        langs = self.translator.get_langs()
        self.assertIsInstance(langs, list)
        self.assertIn('en', langs)

    def test_get_lang_names(self):
        lang_names = self.translator.get_lang_names(['ru', 'en'], 'en')
        self.assertEqual(['Russian', 'English'], lang_names)

    def test_get_speackable_langs(self):
        langs = self.translator.get_langs(speakable=True)
        self.assertIsInstance(langs, list)
        self.assertIn('en-us', langs)

    def test_detect_lang(self):
        self.assertEqual('en', self.translator.detect_lang('Hello'))

    def test_detect_langs(self):
        self.assertEqual(['en', 'ru'], self.translator.detect_langs(['Hello', 'Привет']))

    def test_speak(self):
        self.assertIsNotNone(self.translator.speak('Hello', 'en'))

    def test_speak_to_file(self):
        s = StringIO()
        self.translator.speak_to_file(s, 'Hello', 'en')
        s.seek(0)
        self.assertTrue(len(s.read()) > 0)
def request_image(window, keyword, num_of_try=0, translate=True):
    """
    Queries Bing for images and retries up to 5 times if the randomly selected image could not be accessed
    :param keyword:
        string which specifies the image content
    :param num_of_try:
        internal parameter that increases if the selected image could not be retrieved (e.g. Forbidden Error)
    :param translate:
        Should the keyword be translated to english before the search? (may increase result size)
    :return:
        The image data in bytes
    """

    if keyword is None:
        return None
    if translate:
        ms_key = open('../ms.key').read()
        trans = Translator('__RealTimeStoryIllustrator__', ms_key)
        translatedkw = trans.translate(keyword, lang_from='de', lang_to='en')
        print("IMAGE SERVICE: Getting image for " + str(keyword) +
              ". Searched for the english translation '" + str(translatedkw) +
              "'.")
    else:
        translatedkw = keyword
        print("IMAGE SERVICE: Getting image for " + str(keyword) + ".")

    if num_of_try > 5:  # no images were found
        logger.error(
            "IMAGE SERVICE: Could not find an image after 5 tries for " +
            str(translatedkw) + ".")
        return None

    # OLD CODE FOR SEARCHING BEGIN

    # term = urllib.parse.quote_plus(translatedkw)

    # sites = [line.rstrip() for line in
    #         open(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'sites.txt'),
    #              encoding="utf-8")]
    # excludedsites = ""
    # for site in sites:
    #    excludedsites = excludedsites + "-site:" + urllib.parse.quote_plus(site) + '%20'

    # img_type = '%7Eillustration+AND+clipart'
    # opener = urllib.request.build_opener()
    # opener.addheaders = [('User-agent', 'Mozilla/5.0')]

    # url = ('http://ajax.googleapis.com/ajax/services/search/images?' +
    #      'v=1.0&q=' + term + '%20' + img_type + '%20' + excludedsites + '%20&userip=91.141.0.105' +
    #       '&rsz=8&imgsz=medium&safe=active' + '&tbs=ic:color')

    # OLD CODE FOR SEARCHING END

    try:
        params = {
            '$format': 'json',
            '$top': 10,
            'ImageFilters': '\'Size:Small\''
        }
        bing_key = open('../bing.key').read()
        api = BingSearchAPI(bing_key)
        result = api.search_image(
            str(translatedkw + '+AND+(illustration+OR+clipart)'), params)
        amount = len(result.json()['d']['results'])
        # print(json.dumps(result.json(), sort_keys=True, indent=2))

        # print(result.json())
        # print(result.json()['d']['results'][0]['MediaUrl'])
        img_num = random.randint(0, amount - 1)
        data = urllib.request.urlopen(
            result.json()['d']['results'][img_num]['MediaUrl'],
            timeout=2).read()
        return data
    except Exception as e:  # have to catch everything since socket exceptions seem to be broken
        print("ERROR in IMAGE SERVICE: Trying again, request was denied " +
              str(e))
        return request_image(window,
                             keyword,
                             num_of_try + 1,
                             translate=translate)
import sqlite3

conn = sqlite3.connect('../database/twitter.sqlite')
cur = conn.cursor()

from mstranslator import Translator
translator = Translator('XXXXXXXXXXXX')

#cur.executescript('ALTER TABLE followers ADD loc_ind INTEGER;')
#cur.execute('UPDATE followers SET loc_ind = 0')

while True:
    cur.execute('SELECT id FROM t2 WHERE loc_ind <> 1')
    try:
        set = cur.fetchone()[0]
    except:
        print("All text has been translated")
        break
    cur.execute('SELECT location FROM t2 WHERE id = ?', (set, ))
    loc = cur.fetchone()[0]
    try:
        val = translator.translate(loc, lang_to='en')
        cur.execute('UPDATE t2 SET location = ? WHERE id = ?', (val, set))
        cur.execute('UPDATE t2 SET loc_ind = 1 WHERE id = ?', (set, ))
        conn.commit()
    except:
        cur.execute('UPDATE t2 SET location = ? WHERE id = ?', (val, set))
        cur.execute('UPDATE t2 SET loc_ind = 1 WHERE id = ?', (set, ))
        conn.commit()
cur.close()
Exemplo n.º 17
0
        #------------------------------------------------------------------------------------------------------

        if auto_translate:
            translator = Translator(trans_client, trans_secret)
            langs = getLangsProject(siteID)
            if blocksID:
                for phrase in blocksID:
                    sql = 'SELECT * FROM blocks WHERE site_id = {projectID} AND id = {id}'.format(
                        projectID=siteID, id=blocksID[phrase])
                    cursor.execute(sql)
                    block = cursor.fetchone()
                    for lang in langs:
                        langTo = lang[3]
                        langID = lang[0]
                        translate = translator.translate(
                            phrase.encode('utf-8'),
                            lang_from=fromLang,
                            lang_to=langTo)
                        if translate:
                            loadSQL.append(
                                "({id}, {language_id}, '{text}', NOW(), NOW(), 1, {siteID}, {cc}, {pub}, 0, 0)"
                                .format(id=id,
                                        language_id=langID,
                                        siteID=siteID,
                                        text=MySQLdb.escape_string(
                                            str(translate.encode('utf-8'))),
                                        cc=len(translate.split())),
                                pub=auto_publishing)
                        else:
                            loadSQL.append(
                                "({id}, {language_id}, '', NOW(), NOW(), 1, {siteID}, 0, {pub}, 0, 0)"
                                .format(id=id,
Exemplo n.º 18
0
class TranslatorTestCase(unittest.TestCase):
    def setUp(self):
        self.translator = Translator(SUBSCRIPTION_KEY)
        self.translator_mock = TranslatorMock(SUBSCRIPTION_KEY)

    def test_translate(self):
        t = self.translator.translate('world', 'en', 'ru')
        self.assertEqual('мир', t)

    def test_translate_exception(self):
        self.assertRaises(ArgumentOutOfRangeException, self.translator.translate, 'world', 'en', 'asdf')

    def test_translate_array(self):
        ts = self.translator.translate_array(['hello', 'world'], 'en', 'ru')
        translations = [t['TranslatedText'] for t in ts]
        self.assertEqual(['Привет', 'мир'], translations)

    def test_translate_array2(self):
        ts = self.translator.translate_array2(['hello', 'world', 'Hello. How are you?'], 'en', 'ru')
        translations = [t['TranslatedText'] for t in ts]
        self.assertEqual(['Привет', 'мир', 'Привет. Как ваши дела?'], translations)
        alignments = [t['Alignment'] for t in ts]
        self.assertEqual(['0:4-0:5', '0:4-0:2', '0:5-0:6 7:18-8:21'], alignments)

    def test_get_translations(self):
        t = self.translator.get_translations('world', 'en', 'ru')
        self.assertIsInstance(t, dict)
        self.assertIn('Translations', t)

    def test_break_sentences(self):
        t = self.translator.break_sentences('Hello. How are you?', 'en')
        self.assertEqual(['Hello. ', 'How are you?'], t)

    def test_add_translation(self):
        url = self.translator_mock.add_translation('orig', 'trans', 'en', 'ru', user='******')
        self.assertIn('originalText=orig', url)
        self.assertIn('translatedText=trans', url)

    def test_get_langs(self):
        langs = self.translator.get_langs()
        self.assertIsInstance(langs, list)
        self.assertIn('en', langs)

    def test_get_lang_names(self):
        lang_names = self.translator.get_lang_names(['ru', 'en'], 'en')
        self.assertEqual(['Russian', 'English'], lang_names)

    def test_get_speackable_langs(self):
        langs = self.translator.get_langs(speakable=True)
        self.assertIsInstance(langs, list)
        self.assertIn('en-us', langs)

    def test_detect_lang(self):
        self.assertEqual('en', self.translator.detect_lang('Hello'))

    def test_detect_langs(self):
        self.assertEqual(['en', 'ru'], self.translator.detect_langs(['Hello', 'Привет']))

    def test_speak(self):
        self.assertIsNotNone(self.translator.speak('Hello', 'en'))

    def test_speak_to_file(self):
        s = StringIO()
        self.translator.speak_to_file(s, 'Hello', 'en')
        s.seek(0)
        self.assertTrue(len(s.read()) > 0)
Exemplo n.º 19
0
 def dict_mapping(word, key=key_user):
     translator = Translator(key)
     return translator.translate(word, lang_from='en', lang_to='th')
Exemplo n.º 20
0
def btranslate(text_message, langfrom, langto):

    translator = Translator(client_id, client_secret)
    phrase_translated = translator.translate(text_message, lang_from=langfrom, lang_to=langto)
    # print phrase_translated
    return phrase_translated.encode("utf8")
def request_image(window, keyword, num_of_try=0, translate=True):
    """
    Queries Bing for images and retries up to 5 times if the randomly selected image could not be accessed
    :param keyword:
        string which specifies the image content
    :param num_of_try:
        internal parameter that increases if the selected image could not be retrieved (e.g. Forbidden Error)
    :param translate:
        Should the keyword be translated to english before the search? (may increase result size)
    :return:
        The image data in bytes
    """

    if keyword is None:
        return None
    if translate:
        ms_key = open('../ms.key').read()
        trans = Translator('__RealTimeStoryIllustrator__', ms_key)
        translatedkw = trans.translate(keyword, lang_from='de', lang_to='en')
        print("IMAGE SERVICE: Getting image for " + str(keyword) + ". Searched for the english translation '" +
              str(translatedkw) + "'.")
    else:
        translatedkw = keyword
        print("IMAGE SERVICE: Getting image for " + str(keyword) + ".")

    if num_of_try > 5:  # no images were found
        logger.error("IMAGE SERVICE: Could not find an image after 5 tries for " + str(translatedkw) + ".")
        return None

    # OLD CODE FOR SEARCHING BEGIN

    # term = urllib.parse.quote_plus(translatedkw)

    # sites = [line.rstrip() for line in
    #         open(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'sites.txt'),
    #              encoding="utf-8")]
    # excludedsites = ""
    # for site in sites:
    #    excludedsites = excludedsites + "-site:" + urllib.parse.quote_plus(site) + '%20'

    # img_type = '%7Eillustration+AND+clipart'
    # opener = urllib.request.build_opener()
    # opener.addheaders = [('User-agent', 'Mozilla/5.0')]

    # url = ('http://ajax.googleapis.com/ajax/services/search/images?' +
    #      'v=1.0&q=' + term + '%20' + img_type + '%20' + excludedsites + '%20&userip=91.141.0.105' +
    #       '&rsz=8&imgsz=medium&safe=active' + '&tbs=ic:color')

    # OLD CODE FOR SEARCHING END

    try:
        params = {'$format': 'json', '$top': 10, 'ImageFilters': '\'Size:Small\''}
        bing_key = open('../bing.key').read()
        api = BingSearchAPI(bing_key)
        result = api.search_image(str(translatedkw+'+AND+(illustration+OR+clipart)'), params)
        amount = len(result.json()['d']['results'])
        # print(json.dumps(result.json(), sort_keys=True, indent=2))

        # print(result.json())
        # print(result.json()['d']['results'][0]['MediaUrl'])
        img_num = random.randint(0, amount-1)
        data = urllib.request.urlopen(result.json()['d']['results'][img_num]['MediaUrl'], timeout=2).read()
        return data
    except Exception as e:  # have to catch everything since socket exceptions seem to be broken
        print("ERROR in IMAGE SERVICE: Trying again, request was denied "+str(e))
        return request_image(window, keyword, num_of_try + 1, translate=translate)
Exemplo n.º 22
0
import wikipedia
from mstranslator import Translator
translator = Translator("8dc97e03193b4674b160cfe2b07c8223")
print(translator.translate('Привет, мир!', lang_from='ru', lang_to='en'))
import wikipedia
wikipedia.set_lang("en")
mlen = wikipedia.page("machine learning")
en_content = mlen.content
wikipedia.set_lang("fr")
#print(mlen.content)
mlfr = wikipedia.page("machine learning")
fr_content = mlfr.content
#print(mlfr.content)
Exemplo n.º 23
0
# Language properties for translation
LANG_FROM = 'pt'
LANG_TO = 'en'

# Authenticating on twitter
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

# API fully authenticated
api = tweepy.API(auth)

# Tweets
SEARCH_TERM = 'unisul'
public_tweets = api.search(SEARCH_TERM)
"""
The polarity score is a float within the range [-1.0, 1.0].
The subjectivity is a float within the range [0.0, 1.0]where 0.0 is very objective and 1.0 is very subjective.
"""
for i in range(10):
    # Translated text
    text = translator.translate(public_tweets[i].text,
                                lang_from=LANG_FROM,
                                lang_to=LANG_TO)

    # Sentiment analysis
    analysis = TextBlob(text)

    print(text)
    print(analysis.sentiment)
Exemplo n.º 24
0
	def run(self, options):
		#self.mutex.lock()
		
		self.running = True

		suggestions_html = '<table border="0.5" cellspacing="0" cellpadding="2" width="100%" style="border-color:gray;">'

		if self.tm_source_segments_cache is None:
			self.refresh_tm()

		if not self.running:
			return

		if self.tm_source_segments_cache:
			matching_segments = db_op.get_translation_memory(self.tm_path, self.tm_source_segments_cache, options['target_language'], options['source_text'], 60)
		else:
			matching_segments = []

		if not self.running:
			return
		
		if options['context']:
			suggestions_html += '<tr>'
			suggestions_html += '<td valign="middle"><img src="images/code_white_24dp.svg"></td>'
			suggestions_html += '<td><font color="gray">Occurrences (first 4):</font>'
			for index, occurrence in enumerate(options['context']):
				if index > 3:
					break
				suggestions_html += '<br>' + occurrence[0] + ':' + occurrence[1]
			suggestions_html += '</td></tr>'

		if options['previous_text']:
			if options['previous_text'] != '':
					suggestions_html += '<tr>'
					suggestions_html += '<td valign="middle"><img src="images/undo_white_24dp.svg"></td>'
					suggestions_html += '<td><font color="gray">Previous text:</font><br>'
					suggestions_html += html.escape(options['previous_text'])
					suggestions_html += '</td></tr>'

		for index, row in enumerate(matching_segments):
			suggestions_html += '<tr>'
			suggestions_html += '<td valign="middle"><img src="images/storage_white_24dp.svg"></td>'
			suggestions_html += '<td><font color="gray">TM match (' + str(row[0]) + '%):</font><br>'
			suggestions_html += html.escape(row[1])
			suggestions_html += '<br><font color="gray">Translated text:</font><br>'
			suggestions_html += html.escape(row[2])
			suggestions_html += '</td></tr>'
			if index + 1 >= self.limit:
				break
			if not self.running:
				return
		suggestions_html += '</table>'
		self.finished.emit(suggestions_html)

		#Machine translation
		settings = QtCore.QSettings("Babelruins.org", "BlackCAT")
		translator = Translator(settings.value('plugins_mstranslate_api_key', ""))
		try:
			mst_response = translator.translate(options['source_text'], options['source_language'], options['target_language'])
			if mst_response:
				#suggestions_html += '<table border="0.5" cellspacing="0" cellpadding="2" width="100%" style="border-color:gray;">'
				suggestions_html = suggestions_html[:-8]
				suggestions_html += '<tr>'
				suggestions_html += '<td valign="middle"><img src="images/computer_white_24dp.svg"></td>'
				suggestions_html += '<td><font color="gray">Microsoft Translate:</font><br>'
				suggestions_html += html.escape(mst_response)
				suggestions_html += '</td></tr>'
				suggestions_html += '</table>'
				#suggestions_html.replace('</table>', mt_html)
				if not self.running:
					return
				self.finished.emit(suggestions_html)
		except Exception as e:
			print(str(e))