Перевод на английский с использованием списков слов - PullRequest
1 голос
/ 27 мая 2019

Скажем, у меня есть список пар цвет-элемент:

Item1 red

Item2 red_in_finnish

Item3 red_in_polish

Item4 blue_in_russian

Item5 blue_in_estonian

Item6 blue_in_polish

Мне нужно перевести все цвета на иностранных языках на английский:

Item1 red

Item2 красный

Item3 красный

Item4 blue

Item5 blue

Item6 blue

В моем реальном коде у меня есть более двух цветов и около десятка различных массивов, содержащих все иностранные слова для каждого цвета. Это текущий способ замены:

red_words = ['red_in_finnish', 'red_in_polish']
blue_words = ['blue_in_russian', 'blue_in_estonian', 'blue_in_polish']

for word in red_words:
   if word in item_name:
      item_name = item_name.replace(word, "red")

Проблема в том, что я не знаю заранее, содержит ли каждое имя какой-либо определенный цвет, поэтому мне нужно проверить их все, чтобы убедиться, что я заменю все.

Есть ли умный способ сделать это? Было бы идеально, если бы можно было как-то сопоставить иностранные имена цветов с их английскими именами.

Ответы [ 3 ]

1 голос
/ 27 мая 2019

Если я правильно понимаю, вы можете сделать это, повторив один раз list, используя dict. Пример:

red_words = {'red': 'red', # English
             'rojo': 'red', # Spanish
             'rot': 'red', # German
             'rouge': 'red' # French
            }

blue_words = {'blue': 'blue',
              'azul': 'blue',
              'blau': 'blue',
              'bleu': 'blue'
             }

# More colours here...

combined_translations = {**red_words, **blue_words}

data = [('blue_thing', 'bleu'), 
        ('also_blue_thing', 'azul'), 
        ('blueberry', 'blue'),
        ('fire engine', 'red'),
        ('blood', 'rouge'),
        ('tomato', 'rot')]

translated = [(item, combined_translations[colour]) for item, colour in data]

print(translated)

Выход:

[('blue_thing', 'blue'), 
 ('also_blue_thing', 'blue'), 
 ('blueberry', 'blue'), 
 ('fire engine', 'red'), 
 ('blood', 'red'), 
 ('tomato', 'red')]

Это не удастся, если по какой-то извращенной случайности у вас будет одно и то же слово в двух исходных языках, но каждое из них будет иметь разные цвета на английском языке.

1 голос
/ 27 мая 2019

Вы также можете попробовать использовать dict

item_name = "hello my color is red_in_estonian"
dic = {
    "red_in_estonian"  :  "red",
    "red_in_german"    :  "red",
    "blue_in_estonian" :  "blue",
    "blue_in_german"   :  "blue",
}
for word in item_name.split(" "):
    try:
        translation = dic[word]
        item_name = item_name.replace(word, translation)

    except:
        pass
0 голосов
/ 27 мая 2019

Вы можете использовать Гослате (бесплатный API Google Translate)

import goslate
gs = goslate.Goslate()

for word in words:
    print(gs.translate(word, 'en'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...