Получить подарок - это просто ... текст майнинг

С помощью несложного текст майнинга можно узнать, за что дают подарки :)

Компания дарит своим клиентам подарки. Причины различны. И сотрудники компании вносят информацию о них в систему, данные которой хранятся на HADOOP.

Данных много и они не структурированы. Поэтому, для того чтобы выяснить какие слова (теги) чаще всего встречаются в причинах выдачи подарков, можно это сделать достаточно быстро и эффективно с использованием методов машинного обучения — Text Mining.

Так как данные хранятся в HADOOP — логично использовать библиотеки, которые для этого разработаны — PYSPARK ML.

Что нам нужно:

  • Создать набор данных для текст майнинга.
  • Обработать его с помощью библиотек PYSPARK ML.
  • Визуализировать.

1. Создание набора данных для текст майнинга.

Подключимся к HADOOP через Python, используя библиотеки PySpark:

import os import sys from pyspark import SparkConf from pyspark.sql import SparkSession, HiveContext, SQLContext from pyspark.sql.functions import udf from pyspark.sql.types import StringType, ArrayType import pandas as pd conf = SparkConf().setAppName('text_mining').setMaster('yarn') conf.setAll([ ## здесь ваши set ]) spark = SparkSession.builder.config(conf=conf).enableHiveSupport().getOrCreate()") sqlc = HiveContext(spark) sqlContext =SQLContext(sqlc)

И создадим набор данных для текст — майнига:

query = '''SELECT descriptions FROM crm_podarki''' # descriptions - информация, внесенная работниками в систему о причинах df = sqlContext.sql(query) df.show(5)
Получить подарок - это просто ... текст майнинг

2. Обработка набора данных с помощью библиотек PYSPARK ML

Загрузим необходимые библиотеки для текст майнинга:

from pyspark.ml.feature import RegexTokenizer import nltk import pymorphy2 from nltk.corpus import stopwords pymorph = pymorphy2.MorphAnalyzer() ru_stop_word = stopwords.words('russian')

Используем RegexTokenizer для разбиения текста на отдельные слова:

rt = RegexTokenizer(inputCol = "descriptions",outputCol = "txt",pattern=r"\s+") df_text =rt.transform(df)
Получить подарок - это просто ... текст майнинг

Определим функцию для нормализации (лемматизации) слов и исключения из текста стоп-слов.

def prep(text): text = [str(pymorph.normal_forms(word)[0]) for word in text if word not in ru_stop_word] Return text

Приведем слова в тексте к первоначальному виду и удалим стоп-слова:

prep_udf = udf(prep, ArrayType(StringType())) df_text =df_text.withColumn('final',prep_udf('txt')) df_text.show(5)
Получить подарок - это просто ... текст майнинг

Последний штрих: загрузим все слова в один DataFrame и сохраним в файл формата csv:

df_pd = df_txt.toPandas() pd_list=[] for lst in df_pd['final']: pd_list += lst df_pd_text = pd.DataFrame(df_list, columns=['words']) df_pd_text.to_csv('podarok.csv')

Таким образом, мы получили файл со всеми словами, которые были в текстах сообщений.

3. Визуализация результатов майнинга текста.

Для визуальной оценки воспользуемся стеком ElasticSearch — Kibana.

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

Получить подарок - это просто ... текст майнинг
Получить подарок - это просто ... текст майнинг

Для визуализации воспользуемся инструментом визуализации — облако тегов.

Получить подарок - это просто ... текст майнинг

Видим: в облаке есть слова, которые не относятся к причинам: “Клиент”,”Подарок”.

Последний штрих: сделаем ручную настройку для исключения этих слов из облака тегов и добавим фильтры по эти словам:

Получить подарок - это просто ... текст майнинг

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

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

Как видите, не так много нужно действий и кода, чтобы узнать — получать подарки просто!

2
Начать дискуссию