спасибо за статью, хотел бы поделиться своими методами:)
#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))
спасибо за статью, хотел бы поделиться своими методами:)