NewTechAudit
53

Обработка текстовых данных методами NLP

В данной статье хотелось бы поделиться основными принципами и методами NLP, применяемыми для подготовки текста перед использованием в машинном обучении.

В закладки

Для начала импортируем все необходимые библиотеки:

import re import nltk from nltk.corpus import stopwords import pandas as pd import pymorphy2 from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfVectorizer

В качестве примера будем использовать отрывок из произведения М.Ю. Лермонтова – «Бородино».

Считаем эти данные из текстового файла:

file = open('test.txt','r',encoding='utf-8') text = file.readlines() print(text)

Первым шагом в обработке данных является приведение всех символов текста к нижнему регистру:

text = [line.lower() for line in text] print(text)

Далее из текста удаляются знаки пунктуации, различные небуквенные символы и цифры. Сделать это можно, применив функцию re.sub и указав в качестве параметра шаблон для поиска всех небуквенных символов:

text = [re.sub(r'[^\w\s]',' ',line,flags=re.UNICODE) for line in text] print(text)

Для применения последующих методов имеет смысл разбить каждую строку на список составляющих её слов. Для этого можно воспользоваться возможностями библиотеки nltk:

tokenizedText = [nltk.word_tokenize(line) for line in text] print(tokenizedText)

Существуют слова, которые в процессе применения алгоритмов машинного обучения добавляют шум и влияют на качество модели (стоп-слова). Список стоп-слов можно увидеть, воспользовавшись командой:

from nltk.corpus import stopwords stopWords = stopwords.words("russian") print(stopWords)

Теперь удалим стоп-слова из наших данных:

def lineWithoutStopWords(line): return [word for word in line if word not in stopWords] withoutStopWords = [lineWithoutStopWords(line) for line in tokenizedText] print(withoutStopWords)

Обычно тексты содержат различные грамматические формы одного и того же слова либо однокоренные слова. Для приведения встречающихся словоформ к одной (нормальной форме) используется лемматизация.

Лемматизация – процесс, который использует морфологический анализ и словарь, для приведения слова к его канонической форме – лемме.

Для этой задачи будем применять библиотеку pymorphy2:

def normalForm(line): return [morph.parse(word)[0].normal_form for word in line if len(word)>2] normalForm = [normalForm(line) for line in withoutStopWords] print(normalForm)

После всех преобразований, можно оценить слова в полученном документе. Для этого необходимо преобразовать обработанный текст в набор цифр. Именно эти данные можно использовать как входные данные для модели машинного обучения.

count_vectorizer = CountVectorizer() string = [''.join(line) for line in normalForm] bag_of_words = count_vectorizer.fit_transform(string) feature_names = count_vectorizer.get_feature_names() pd.DataFrame(bag_of_words.toarray(),columns=feature_names[:9])

Сформированная последовательность (вектор) из нулей и единиц может использоваться в качестве набора фичей при обучении моделей.

{ "author_name": "NewTechAudit", "author_type": "editor", "tags": [], "comments": 0, "likes": 1, "favorites": 0, "is_advertisement": false, "subsite_label": "newtechaudit", "id": 109667, "is_wide": false, "is_ugc": false, "date": "Fri, 28 Feb 2020 17:47:26 +0300", "is_special": false }
0
Комментариев нет
Популярные
По порядку

Прямой эфир