Для удаления пунктуации из строки Python воспользуемся методом строки str.replace()
. А именно, в цикле пройдемся по всем символам пунктуации, и если они есть, то просто заменим его на пустую строку.
Что бы не вспоминать и не собирать все символы пунктуации в список, воспользуемся модулем string
, который любезно предоставляет атрибут с символами пунктуации string.punctuation
.
Подробный пример для понимания алгоритма (самый медленный способ):
# исходная строка >>> line = '- Мама мыла раму, а Маша помогала. (из прописи 1 класса)' >>> import string >>> string.punctuation # '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' # пунктуацию будем удалять в цикле for p in string.punctuation: if p in line: # банальная замена символа в строке line = line.replace(p, '') >>> line.strip() # 'Мама мыла раму а Маша помогала из прописи 1 класса'
Кстати, таким же способом можно удалять например "стоп слова" из текста, который подготавливается к поиску.
Вариант 1 (метод str.translate()
):
# самый быстрый и эффективный вариант >>> import string >>> line = '- Мама мыла раму, а Маша помогала. (из прописи 1 класса)' >>> s = line.translate(str.maketrans('', '', string.punctuation)) >>> s # ' Мама мыла раму а Маша помогала из прописи 1 класса'
Вариант 2 (множество):
>>> import string >>> line = '- Мама мыла раму, а Маша помогала. (из прописи 1 класса)' # используем `set()` для скорости >>> exclude = set(string.punctuation) >>> s = ''.join(ch for ch in line if ch not in exclude) >>> s # ' Мама мыла раму а Маша помогала из прописи 1 класса'
Вариант 3 (модуль re
):
>>> import re, string >>> line = '- Мама мыла раму, а Маша помогала. (из прописи 1 класса)' >>> regex = re.compile('[%s]' % re.escape(string.punctuation)) >>> s = regex.sub('', line) >>> s # ' Мама мыла раму а Маша помогала из прописи 1 класса'