Pull to refresh

Comments 4

Тирре-----------------------тирре

Для справки, небольшая оптимизация кода (куда успел дочитать).

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)  
# И тирре не понадобится заменять туда-сюда, ведь в тексте может
# быть реальный фрагмент "тирре", который не следует заменять на "-"

Для работы с текстами очень пригодится опыт использования регулярных выражений

https://habr.com/ru/companies/piter/articles/793118/

спасибо за статью, хотел бы поделиться своими методами:)

#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))

Sign up to leave a comment.

Articles