views:

96

answers:

0

Hi!
I’m going to explain to you in details of what I want to achieve.
I have 2 programs about dictionaries.
The code for program 1 is here:

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))

This program has following advantages:

  • You can write more than one sentence
  • You get the first letter capitalized after “.”
  • The program “append” the untranslated word to the output (“translation = []”)

Here is the code for program 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))

With this code you can translate idiomatic expressions or
“the book” to “boka”.
Here is how the program proceeds the codes.
This is the output:

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  

What I want is to implement some of the codes from program 1 into program 2.
I have tried many times with no success…
Here is my dream…:
If I change the text to the following…:

text = "I read the book. I read the book! I read the book? I read the book.".lower().split()  

I want the output to be:

Jeg leste boka. Jeg leste boka! Jeg leste boka? Jeg leste boka.  

So please, tweak your brain and help me with a solution…
I appreciate any reply very much!
Thank you very much in advance!