небольшая проблема с пробелами / пунктуацией в питоне? - PullRequest
3 голосов
/ 05 июня 2011

У меня есть эта функция, которая преобразует язык текста на английский:

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 ]

2 голосов
/ 05 июня 2011

понимание oneliner:

''.join(textDict.get(word, word) for word in re.findall('\w+|\W+', string))

[Редактировать] Исправлено регулярное выражение.

0 голосов
/ 05 июня 2011

Я хотел бы предложить следующую замену для этого цикла:

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 еще не определено.

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

0 голосов
/ 05 июня 2011

"yu l8" разделить на "", дает ["y", "u", "l8"].После подстановки вы получаете [«почему», «вы», «поздно»] - и вы объединяете их без добавления пробелов, поэтому вы получаете «Whyyoulate».Обе вилки if должны вставлять пробел.

0 голосов
/ 05 июня 2011

Вы можете просто добавить + ' ' +, чтобы добавить пробел. Тем не менее, я думаю, что вы пытаетесь сделать это:

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?

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

0 голосов
/ 05 июня 2011

Вы добавляете слова в строку без пробелов.Если вы собираетесь действовать таким образом (вместо того, что было предложено в предыдущем вопросе по этой теме), вам нужно будет заново добавить пробелы вручную, так как они разделены на них.

...