A little late, I'd like to add the functionality of searching for ready expressions like 'good morning' -> 'good morning', differentiating 'Good Trip' -> 'good trip' by word.
Basically we have this dictionary:
dicionario = {
'bom':'good',
'boa':'good',
'dia':'day',
'bom dia':'good morning',
'acordou':'wake up',
'viagem':'trip',
'filme':'movie',
'apertem os cintos... o piloto sumiu':'Airplane',
'assisti':'watched',
'eu':'I',
'nunca':'never',
'o':'the'
}
Notice that you even have the name of a movie.
First we do a function that checks if a string or word is found in the dictionary:
def existe_traducao(dicionario, lista):
sequencia = ' '.join(x.lower() for x in lista)
if sequencia in dicionario:
return dicionario[sequencia]
return ''
>>> print(existe_traducao(dicionario, ['Boa']))
good
>>> print(existe_traducao(dicionario, ['boa', 'viagem']))
>>> print(existe_traducao(dicionario, ['bom', 'dia']))
good morning
Now we just need to translate the phrase for expressions. To do this, we go from the current word to the end, after the current word to the end -1 and so on looking for a key in the dictionary:
def traduz(dicionario, frase):
palavras = frase.split()
lista_traduzida = []
i = 0
while i < len(palavras):
for j in range(len(palavras), i, -1):
traducao = existe_traducao(dicionario, palavras[i:j])
if traducao != '': #Se achei tradução
lista_traduzida.append(traducao)
i = j
break
else:
lista_traduzida.append(palavras[i].lower())
i+=1
return ' '.join(lista_traduzida)
>>> frase = 'Bom dia AlexCiuffa' #AlexCiuffa não está no dicionário
>>> print(traduz(dicionario, frase))
good morning AlexCiuffa
>>> frase = 'Boa viagem amigo' #amigo não está no dicionário
>>> print(traduz(dicionario, frase))
good trip amigo
>>> frase = 'Eu nunca assisti o filme Apertem os cintos... O piloto sumiu'
>>> print(traduz(dicionario, frase)) #perceba que a frase possui um titulo de filme
I never watched the movie Airplane