Методы для NLP, удаления знаков препинания

Рейтинг: 0Ответов: 1Опубликовано: 14.05.2023

Можете помочь и отправить свои методы для лемматизация, токенизации, определения частей речи, удаления знаков препинания, удаления не букв.

Ответы

▲ 2Принят

Я могу поделиться с вами своими методами, которые я обычно используя при проведении nlp на Python:

import nltk
from nltk.corpus import stopwords
stopwords = nltk.corpus.stopwords.words('russian')
nltk.download('stopwords')
from nltk.tokenize import word_tokenize
import pymorphy2

def remove_punctuation(text):
    return ''.join([ch for ch in text if ch not in 
    string.punctuation]) # метод для удаления пунктуации

def remove_numbers(text):
    return ''.join([i if not i.isdigit() else ' ' for i in text]) 
    # метод для удаления чисел

def remove_notalpha(text):
    return ''.join(i if i.isalpha() else ' ' for i in text) # 
    метод для проверки на только алфавитные символы

import re

def remove_space(text):
    return re.sub(r'\s+',' ', text, flags=re.I) # метод для 
    удаления пробелов

def remove_stopwords(text):
    return [word for word in text if word not in stopwords] # 
    удаление стоп-слов

def tokenize(text):
    t = word_tokenize(text)
    return [token for token in t if token not in stopwords] # 
    метод для токенизации



wn = nltk.WordNetLemmatizer()

def lemmatize(text):
    res = list()
    for word in text:
        p = morph.parse(word)[0]
        res.append(p.normal_form)
    return res # метод для лемматизации

morph = pymorphy2.MorphAnalyzer()
def part(text):
    res = list()
    for word in text:
        p = morph.parse(word)[0]
        a = (word, p.tag.cyr_repr)
        res.append(tuple(a))
    return res # метод для выделения значимых частей речи

И чтобы применить все эти методы для вашего текста (корпуса текстов):

text_list = []

for i in df['text']:
    if i is not None:
        i = remove_punctuation(i)
        i = remove_numbers(i)
        i = remove_notalpha(i)
        i = remove_space(i)
        i = tokenize(i)
        i = remove_stopwords(i)
        i = lemmatize(i)
        text_list.append(i)

Для выделения значимых частей речи:

prep_txt_list = []
for txt in text_list:
    prep_txt = part(txt)
    prep_txt_list.append(prep_txt)