ОБРАБОТКА ТЕКСТОВЫХ ДАННЫХ МЕТОДАМИ NLP

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Время прочтения: 4 мин.

Сегодня активно развиваются методы машинного обучения, которые в качестве входных данных используют различные тексты – от комментариев в социальных сетях до официальных документов. Для использования алгоритмов машинного обучения для текста используются алгоритмы NLP (Natural Language Processing).

В данной статье хотелось бы поделиться основными принципами и методами 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'[^ws]',' ',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])

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


Источник: newtechaudit.ru

Комментарии: