Comments 4
Однажды к вам придёт человек с фамилией Гактирренов и тогда...
+1
Для справки, небольшая оптимизация кода (куда успел дочитать).
if "http" in fio or "https" in fio or "Http" in fio or "Https" in fio: # Здесь лишние проверки
...
if "http" in fio or "Http" in fio: # Это эквивалентно
...
if re.search("[Hh]ttp", fio):
...
if "http" in fio.lower(): # Возможно устроит даже это
...
fio = "".join(x for x in fio if x.isalpha() or x == " ").strip().replace("тирре", "-")
fio = re.sub(r'[^-\s\w]', '', fio)
# И тирре не понадобится заменять туда-сюда, ведь в тексте может
# быть реальный фрагмент "тирре", который не следует заменять на "-"
Для работы с текстами очень пригодится опыт использования регулярных выражений
+4
спасибо за статью, хотел бы поделиться своими методами:)
#data_c.to_pickle('df_clear.pkl')
#data = pd.read_pickle('df_clear.pkl')
data.iloc[:,0] = data.iloc[:,0].apply(lambda x: ''.join([char.lower() if not char.isdigit() and char is not None else char for char in x])) #приводим к нижнему регистру, учитываем наличие в тексте цифр, к которым не работает метод lower()
data['Text'] = data['Text'].apply(lambda x: x.translate(str.maketrans('', '', string.punctuation)))
data.iloc[:,0]=data.iloc[:,0].apply(lambda x: re.sub(' ', ' ', x)) # удаление лишних пробелов
import nltk
nltk.download('stopwords')
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
stopwords.words('russian')
nltk.download('punkt')
from pymorphy3 import MorphAnalyzer
from nltk.corpus import stopwords
stop_words = set(stopwords.words('russian'))
data['Text'] = data['Text'].apply(lambda x: ' '.join([word for word in word_tokenize(x) if word not in stop_words]))
#Токенизируем
# Загрузка списка стоп-слов для русского языка
stopwords_ru = stopwords.words('russian')
morph = MorphAnalyzer()
def lemmatize_and_tokenize(doc):
doc = re.sub(r'[^а-яА-Я]', ' ', doc) # Заменяем не буквенные символы
tokens = []
for token in doc.split():
if token and token not in stopwords_ru:
token = token.strip()
token = morph.parse(token)[0].normal_form # Используем метод parse и normal_form
tokens.append(token)
if len(tokens) > 2:
return tokens
return tokens
morph1 = MorphAnalyzer()
def lemmatize(text):
text = re.sub(r'[^а-яА-Я]', ' ', text) # Заменяем не буквенные символы на пробелы
clear_text = text.split()
clear_text = [word for word in clear_text if word not in stop_words and len(word) > 2]
clear_text = ' '.join(clear_text)
clear_text = ' '.join([morph1.parse(word)[0].normal_form for word in clear_text.split()])
return clear_text
data['Text_lemmatized'] = data['Text'].apply(lambda x: lemmatize(x))
data['Text_tokenized_lemmatized'] = data['Text'].apply(lambda x: lemmatize_and_tokenize(x))
0
Sign up to leave a comment.
Очистка текста с помощью Python. Часть 1