Я собираюсь подробно объяснить вам, чего я хочу достичь.
У меня есть 2 программы о словарях.
Код для программы 1 здесь:
import re
words = {'i':'jeg','am':'er','happy':'glad'}
text = "I am happy.".split()
translation = []
for word in text:
word_mod = re.sub('[^a-z0-9]', '', word.lower())
punctuation = word[-1] if word[-1].lower() != word_mod[-1] else ''
if word_mod in words:
translation.append(words[word_mod] + punctuation)
else:
translation.append(word)
translation = ' '.join(translation).split('. ')
print('. '.join(s.capitalize() for s in translation))
Эта программа имеет следующие преимущества:
- Вы можете написать более одного предложения
- Вы получаете первую букву с заглавной буквы после «.»
- Программа «добавляет» непереведенное слово к выводу («translation = []»)
Вот код для программы 2:
words = {('i',): 'jeg', ('read',): 'leste', ('the', 'book'): 'boka'}
max_group = len(max(words))
text = "I read the book".lower().split()
translation = []
position = 0
while text:
for m in range(max_group - 1, -1, -1):
word_mod = tuple(text[:position + m])
if word_mod in words:
translation.append(words[word_mod])
text = text[position + m:]
position += 1
translation = ' '.join(translation).split('. ')
print('. '.join(s.capitalize() for s in translation))
С помощью этого кода вы можете переводить идиоматические выражения или
«Книга» - «бока».
Вот как программа обрабатывает коды.
Это вывод:
1
('i',)
['jeg']
['read', 'the', 'book']
0
()
1
('read', 'the')
0
('read',)
['jeg', 'leste']
['the', 'book']
1
('the', 'book')
['jeg', 'leste', 'boka']
[]
0
()
Jeg leste boka
Я хочу внедрить некоторые коды из программы 1 в программу 2.
Я пытался много раз, но безуспешно ...
Вот моя мечта…:
Если я изменю текст на следующий…:
text = "I read the book. I read the book! I read the book? I read the book.".lower().split()
Я хочу вывод:
Jeg leste boka. Jeg leste boka! Jeg leste boka? Jeg leste boka.
Так что, пожалуйста, настройте свой мозг и помогите мне с решением ...
Я очень ценю любой ответ!
Заранее большое спасибо!