Как заменить пунктуацию пробелом в этом коде? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть этот код:

 def remove_punctuation(self,text):
        exclude = set(string.punctuation)
        a=''.join(ch for ch in text if ch not in exclude)
        return ''.join(c for c in a if not ud.category(c).startswith('P'))

Сначала я хотел бы знать, что это делает:

ch for ch in text if ch not in exclude

Как можно написать цикл for подобным образом?

во-вторых, я хочу заменить эти знаки препинания, скажем, на такой текст: "Hello_there? My_friend!" с пробелом, используя вышеуказанный код. Как я могу изменить этот код, чтобы сделать это?

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Я бы рекомендовал использовать str.translate вместо ручной перестройки строки.Создайте таблицу соответствия, отображающую символы в строки, которыми вы хотите заменить их.

trans = str.maketrans(dict.fromkeys(string.punctuation, ' '))

"hello_there?my_friend!".translate(trans)
# 'hello there my friend '
1 голос
/ 24 мая 2019

Код:

a = ''.join([ch for ch in text if ch not in exclude])

эквивалентно

string_without_punctuation = ''
exclude = set(string.punctuation) # =set('!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~')
for character in text:
    if character not in exclude:
        string_without_punctuation += character

Вы можете просто сделать это, чтобы заменить пунктуацию пробелами:

string_without_punctuation = ''
exclude = set(string.punctuation) # =set('!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~')
for character in text:
    if character not in exclude:
        string_without_punctuation += character
    else:
        string_without_punctuation += ' '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...