Небольшая проблема с пробелами / пунктуацией в питоне?
У меня есть эта функция, которая будет конвертировать текстовый язык на английский:
def translate(string):
textDict={'y':'why', 'r':'are', "l8":'late', 'u':'you', 'gtg':'got to go',
'lol': 'laugh out loud', 'ur': 'your',}
translatestring = ''
for word in string.split(' '):
if word in textDict:
translatestring = translatestring + textDict[word]
else:
translatestring = translatestring + word
return translatestring
Однако, если я хочу перевести y u l8?
это вернется whyyoul8?
, Как бы я мог разделить слова, когда я их возвращаю, и как мне справиться с пунктуацией? Любая помощь приветствуется!
5 ответов
Понимание oneliner:
''.join(textDict.get(word, word) for word in re.findall('\w+|\W+', string))
[Редактировать] Исправлено регулярное выражение.
"y u l8" разделить на " ", дает ["y", "u", "l8"]. После подстановки вы получаете ["почему", "вы", "поздно"] - и вы объединяете их без добавления пробелов, поэтому вы получаете "Whyyoulate". Обе вилки if должны вставлять пробел.
Вы добавляете слова в строку без пробелов. Если вы собираетесь действовать таким образом (вместо того, что было предложено в предыдущем вопросе по этой теме), вам нужно будет вручную добавить пробелы, так как вы разделите их.
Я хотел бы предложить следующую замену для этого цикла:
for word in string.split(' '):
if word in textDict:
translatestring = translatestring + textDict[word]
else:
translatestring = translatestring + word
для слова в string.split(' '): translatetring += textDict.get(word, word)
dict.get(foo, default)
будет смотреть вверх foo
в словаре и использовать default
если foo
еще не определено
(Время запуска, короткие заметки сейчас: при разделении вы можете разделить на основе знаков препинания, а также пробелов, сохранить знаки препинания или пробелы и повторно ввести их при присоединении к выходной строке. Это немного больше работы, но это будет справиться с работой.)
Вы можете просто добавить + ' ' +
добавить пробел. Тем не менее, я думаю, что вы пытаетесь сделать это:
import re
def translate_string(str):
textDict={'y':'why', 'r':'are', "l8":'late', 'u':'you', 'gtg':'got to go', 'lol': 'laugh out loud', 'ur': 'your',}
translatestring = ''
for word in re.split('([^\w])*', str):
if word in textDict:
translatestring += textDict[word]
else:
translatestring += word
return translatestring
print translate_string('y u l8?')
Это напечатает:
why you late?
Этот код обрабатывает такие вещи, как вопросительные знаки, немного более изящно и сохраняет пробелы и другие символы из вашей входной строки, сохраняя при этом ваше первоначальное намерение.