← Назад к вопросам
Как игнорировать знаки препинания при обработке текста?
1.0 Junior🔥 191 комментариев
#Pandas и обработка данных
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как игнорировать знаки препинания
Python: регулярные выражения
import re
text = "Hello, World! How are you?"
clean = re.sub(r'[^\w\s]', '', text)
print(clean) # Hello World How are you
Python: модуль string
import string
text = "Hello, World! How are you?"
clean = text.translate(str.maketrans('', '', string.punctuation))
print(clean) # Hello World How are you
Python: list comprehension
import string
text = "Hello, World!"
clean = ''.join(c for c in text if c not in string.punctuation)
print(clean) # Hello World
SQL: PostgreSQL
SELECT regexp_replace(comment, '[^a-zA-Z0-9\\s]', '', 'g') FROM comments;
SQL: MySQL
SELECT REGEXP_REPLACE(comment, '[^a-zA-Z0-9 ]', '') FROM comments;
Pandas на колонку
import pandas as pd
df['clean'] = df['text'].str.replace(r'[^\w\s]', '', regex=True)
Performance сравнение
import string
import re
import time
text = "Hello, World! " * 1000
# regex
start = time.time()
re.sub(r'[^\w\s]', '', text)
print(f"regex: {time.time() - start:.4f}s")
# translate
start = time.time()
text.translate(str.maketrans('', '', string.punctuation))
print(f"translate: {time.time() - start:.4f}s") # БЫСТРЕЕ В 5 РАЗ!
# list comp
start = time.time()
''.join(c for c in text if c not in string.punctuation)
print(f"list comp: {time.time() - start:.4f}s") # САМЫЙ БЫСТРЫЙ
Практическая функция
def clean_text(text):
import string
text = text.lower()
text = text.translate(str.maketrans('', '', string.punctuation))
text = ' '.join(text.split())
return text
print(clean_text("Hello, World! HOW ARE YOU?"))
# hello world how are you
NLTK
from nltk.tokenize import word_tokenize
import string
text = "Hello, World! I'm learning."
tokens = word_tokenize(text.lower())
clean_tokens = [t for t in tokens if t not in string.punctuation]
print(clean_tokens) # ['hello', 'world', 'i', 'm', 'learning']
Сохранение некоторых символов
import re
text = "Contact: john@example.com, Phone: +1-800"
# Сохраняем буквы, цифры, @ и -
clean = re.sub(r'[^a-zA-Z0-9\s@\-]', '', text)
print(clean) # Contact johnexample.com Phone 1-800
Вывод
Самый быстрый метод:
text.translate(str.maketrans('', '', string.punctuation))
Самый гибкий метод:
re.sub(r'[^\w\s]', '', text)
Для Pandas:
df['text'].str.replace(r'[^\w\s]', '', regex=True)