Skip to content

packetdima/angrycritic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Инструкция по использованию программного продукта AngryCritic

AngryCritic - инструмент для анализа данных и определения их тональности, на основании заданных параметров и ключевых слов.

Компоненты программы

  • angrycritic.py – исполняемый файл;
  • Папка data – содержит конфигурационные файлы в формате yaml, для настройки работы кода под ваш контекст данных.
    • types.yaml - содержит ключевые слова для определения типа (категории) данных;
    • skip.yaml – массив ключевых слов и словосочетаний, при обнаружении которых обработка данных производиться не будет;
    • mood_keywords_otp.yaml и mood_keywords_fishing.yaml и т.д. - конфигурационные файлы, содержащие ключевые слова для конкретных категорий данных.

Список пакетов, необходимых для работы программы

Перед запуском убедитесь, что все необходимые пакеты установлены:

  • yaml;
  • os;
  • pandas;
  • pymorph3;
  • string;
  • time;
  • tqdm;
  • nltk;
  • jarowinkler.

Или воспользуйтесь командой:

pip install -r requirements.txt

Запуск программы

Перед запуском программы, Excel-файл с данными необходимо переименовать в «data.xlsx» и поместить в корневой каталог с программой. Данные, по которым необходимо провести анализ, должны находиться в столбце «А». По окончанию обработки в данной папке будет создан файл «data_done.xlsx».

Скорость обработки

На ПК с процессором Intel(R) Core(TM) i5-11400, 8Gb RAM - 25000 строк/мин

Как настроить программу под свои данные

Первичный запуск: Поместите «data.xlsx» в корневой каталог, запустите процесс обработки. По окончанию откройте файл «data_done.xlsx», на вкладке Частота по документу будет представлен список слов с частотой их употребления в документе. Проанализируйте полученную информацию, выделите основные категории данных в документе и внесите характеризующие их ключи в файл types.yaml.

Запустите повторное выполнение кода, предварительно закрыв файл «data_done.xlsx». В новом документе появятся дополнительные вкладки с названием заданных типов/категорий в файле types.yaml. На вкладках будет содержаться список слов с частотой их употребления в тексте указанного типа/категории данных. Воспользуйтесь полученную информацией для формирования файлов с ключевыми словами для определения тональности - mood_keywords_xxx.yaml.

Подробнее о работе кода

Обработка документа выполняется в 2 этапа:

  1. Предварительная обработка - происходит определение типов/категорий информации и определние данных, которые обрабатываться не будут (skip).

    • В файл skip.yaml - добавьте ключи, при обнаружении которых обработка данных производиться не будет (очистка от спама);
    • В файл types.yaml следует добавить тип/категорию данных и ключевые слова для ее определения.
      Важно! название типа/категории должно соответсвовать названию его конфигурационного файла. Например, otp - mood_keywords_otp.yaml.

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

    Например, Ваши данные содержат слово «письмо», по которому определить к какой категории их отнести достаточно трудно. Поэтому в каждую категорию, к которой оно может относить мы добавляем данный ключ, но с сопутсвующими словами для категории.
    Для категории otp, ключ будет выглядеть следующим образом:

    - _письмо_+otp,отп,отр,устройство

    Для категории fishing:

    - _письмо_+фишинговый,подозрительный,странный,scstsberbank,подозрение

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

    Более подробно о синтаксисе конфигурационных файлов и способах использования описано ниже.

  2. Определение тональности исходя из конфигурационных файлов с ключевыми словами. Конфигурационные файлы типов(категорий) данных mood_keywords_otp.yaml и mood_keywords_fishing.yaml - необходимо заполнить ключевыми словами, для определения тональности конкретной категории, или создать новый файл под новую категорию.

Тональность может принимать следующие значения:

Наименование Описание
positive при наличии данного слова в тексте тональность положительная
negative при наличии данного слова в тексте тональность отрицательная
undef не определено ввиду отсутствия ключевых слов

Синтаксис ключевых слов:

  1. Если категорию/тональность однозначно можно определить по одному слову, записывать только данное слово:
     - сбой
     - недоступен
    
  2. Если для определения категории/тональности важно ориентироваться на сопутствующие слова:

     [1]_[2]_[3]
     [1] - слова/частицы, наличие, отсутсвие или и наличие и отсутсвие которых в пределах 2х позиций перед ключевым словом ([2]) определяет категорию/тональность;
     [2] - ключевое слово, обязательно выделять "_";
     [3] - слова, наличие, отсутсвие или и наличие и отсутсвие которых в данном тексте определяет категорию/тональность.
    

Варианты использования:

Вариант Когда сработает
+не_запускаться_ При наличии в тексте ключа запускаться и в пределах 2х позиций перед ним частицы не ("не запускается", "не всегда запускается"). Через запятую без пробела можно указать любое количество сопутсвующих слов ("+не,я,всегда_запускаться_")
-не_запускаться_ При наличии в тексте ключа запускаться и отсутсвии в пределах 2х позиций перед ним частицы не ("сегодня все запускается"). Через запятую без пробела можно указать любое количество сопутсвующих слов ("-не,я,всегда_запускаться_")
+не-всегда_запускаться_ При наличии в тексте ключа запускаться и в пределах 2х позиций перед ним частицы не, а также отсутствии в пределах 2х позиций перед ключем слова всегда ("сегодня не запускается"). Через запятую без пробела можно указать любое количество сопутсвующих слов + и - слов ("+не,я-всегда,сегодня_запускаться_")
_запускаться_+приложение При наличии в тексте ключа запускаться и слова приложение во всем текущем тексте ("приложение весь день не запускается"). Через запятую без пробела можно указать любое количество слов.
_запускаться_-приложение При наличии в тексте ключа запускаться и отсутсвии слова приложение во всем текущем тексте ("весь день не запускается"). Через запятую без пробела можно указать любое количество слов.
_запускаться_+приложение-сегодня При наличии в тексте ключа запускаться и слова приложение во всем текущем тексте, а также отсутсвии слова сегодня ("приложение весь день не запускается"). Через запятую без пробела можно указать любое количество слов.
+не-всегда_запускаться_+приложение-сегодня При наличии в тексте ключа запускаться и в пределах 2х позиций перед ним частицы не, отсутсвии слова всегда в пределах 2х позиций от ключа, наличии слова приложение во всем текущем тексте и отсутсвии слова сегодня ("приложение весь день не запускается"). Через запятую без пробела можно указать любое количество слов.

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

Пример использования

Имеем файл data.xlsx со следующими данными в столбце A:

Текст
дискорд не работает сегодня
сбои в работе discord
discord упал
сбои дискорд
Дискорд попросту не запускается, бесконечная загрузка
сбой работы дискорд сегодня
дискорд лежит
дискорд сбои
ркн заблокировал дискорд качайте AmnesiaWG и WARP конфиг к нему, РКН чтоб вы все сдохли там
не запускается discord
Капец, тут ещё люди остались которые не знают что его РКН заблокировали
Роскомнадзор ответит.
Использую приложения для работы и развлечений - РКН ОДУМАЙСЯ
ЧТО ДЕЛАЕТ РКН ЗАЧЕМММММ
роскомнадзор заблокировал все
А ВЫ ДУМАЛИ ПОСЛЕ СХАВАННОЙ вами БЛОКИРОВКИ ЮТУБА РКН ОСТАНОВИТСЯ? ОНИ ЗАБЕРУТ У ВАС ВСЁ.

Сразу запускаем первичное выполнение программы, по окончанию которого получаем файл data_done.xlsx следующего содержания:
Вкладка Total - результат обработки:

Text Lemma Type Type_Keywords Mood Mood_Keywords Index
дискорд не работает сегодня ['дискорд', 'не', 'работать', 'сегодня'] undef [] undef [] 0
сбои в работе discord ['сбой', 'в', 'работа', 'discord'] undef [] undef [] 0
discord упал ['discord', 'упасть'] undef [] undef [] 0
сбои дискорд ['сбой', 'дискорд'] undef [] undef [] 0
Дискорд попросту не запускается, бесконечная загрузка ['дискорд', 'попросту', 'не', 'запускаться', 'бесконечный', 'загрузка'] undef [] undef [] 0
сбой работы дискорд сегодня ['сбой', 'работа', 'дискорд', 'сегодня'] undef [] undef [] 0
дискорд лежит ['дискорд', 'лежать'] undef [] undef [] 0
дискорд сбои ['дискорд', 'сбой'] undef [] undef [] 0
ркн заблокировал дискорд качайте AmnesiaWG и WARP конфиг к нему, РКН чтоб вы все сдохли там ['ркн', 'заблокировать', 'дискорд', 'качать', 'amnesiawg', 'и', 'warp', 'конфига', 'к', 'он', 'ркн', 'чтоб', 'вы', 'всё', 'сдохнуть', 'там'] undef [] undef [] 0
не запускается discord ['не', 'запускаться', 'discord'] undef [] undef [] 0
Капец, тут ещё люди остались которые не знают что его РКН заблокировали💀 ['капец', 'тут', 'ещё', 'человек', 'остаться', 'который', 'не', 'знать', 'что', 'он', 'ркн', 'заблокировали💀'] undef [] undef [] 0
Роскомнадзор ответит. ['роскомнадзор', 'ответить'] undef [] undef [] 0
Использую приложения для работы и развлечений - РКН ОДУМАЙСЯ ['использовать', 'приложение', 'для', 'работа', 'и', 'развлечение', 'ркн', 'одуматься'] undef [] undef [] 0
ЧТО ДЕЛАЕТ РКН ЗАЧЕМММММ ['что', 'делать', 'ркн', 'зачеммммм'] undef [] undef [] 0
А ВЫ ДУМАЛИ ПОСЛЕ СХАВАННОЙ вами БЛОКИРОВКИ ЮТУБА РКН ОСТАНОВИТСЯ? ОНИ ЗАБЕРУТ У ВАС ВСЁ. ['а', 'вы', 'думать', 'после', 'схаванна', 'вы', 'блокировка', 'ютуба', 'ркн', 'остановиться', 'они', 'забрать', 'у', 'вы', 'всё'] undef [] undef [] 0
  • Text - исходный иекси;
  • Lemma - леммы слов;
  • Type - категория, к которой относятся данные;
  • Type_Keywords - ключевые слова, на основании которых была определена категория;
  • Mood - тональность;
  • Mood_Keywords - ключевые слова, на основании которых была определена тональность;
  • Index - значение, на основании которого определяется тональность данных (Больше 0 – позитив, меньше 0 – негатив).

    Если в анализируемом тексте встречается несколько ключевых слов, то на основании значения их тональности вычисляется значение index (positive +1, negative -1, undef = 0).

Вкладка Частотность по документу - частота использования слов в документе. Данная информация помогает в понимании предмета документа:

Слово Частота
дискорд 7
ркн 6
сбой 4
работа 3
discord 3
сегодня 2
запускаться 2
всё 2
роскомнадзор 2
заблокировать 2

Анализируем наиболее часто встречающиеся слова на предмет отнесения к той или иной категории данных или созданию новой. Из полученной выше информации выделяем тип/категорию данных discord и blocked, и добавляем соответсвующие ключи в файл /data/types.yaml


discord:
	- дискорд
	- discord
blocked:
	- ркн
	- роскомнадзор

После сохранения изменений в файле types.yaml можем повторно запустить обработку, предварительно закрыв файл data_done.xlsx. По окончанию обработки получим обновленный файл data_done.xlsx, в котором будут содержаться новые вкладки discord и blocked. На данных вкладках будет находиться частотность употребляемых слов только данной категории данных. Для вкладки discord:

Слово Частота
дискорд 7
сбой 4
discord 3
сегодня 2
работа 2
запускаться 2
ркн 2

Для вкладки blocked:

Слово Частота
ркн 4
роскомнадзор 2
всё 2
капец 1
заблокировать 1
блокировка 1

На основании анализа данных вкладок создаем файлы ключевых слов в папке data для определения тональности mood_keywords_discord.yaml и mood_keywords_blocked.yaml соответсвенно.

mood_keywords_discord.yaml В раздел negative добавим слова, при наличии которых будем считать негативным - сбой, заблокировать, упасть, сдохнуть, не запускаться, не работать.


positive:
	- 
negative:
	- сбой
	- заблокировать
	- упасть
	- сдохнуть
	- лежать
	- +не_запускаться_
	- +не_работать_

Аналогично для других типов. Далее запускаем выполнение кода еще раз. На вкладке Total видим результат добавления ключевых слов и можем оценить корректность работы кода

Text Lemma Type Type_Keywords Mood Mood_Keywords Index
дискорд не работает сегодня ['дискорд', 'не', 'работать', 'сегодня'] discord ['дискорд'] negative ['не + работать'] -1
сбои в работе discord ['сбой', 'в', 'работа', 'discord'] discord ['discord', 'сбой'] negative ['сбой'] -1
discord упал ['discord', 'упасть'] discord ['discord'] negative ['упасть'] -1
сбои дискорд ['сбой', 'дискорд'] discord ['дискорд', 'сбой'] negative ['сбой'] -1
Дискорд попросту не запускается, бесконечная загрузка ['дискорд', 'попросту', 'не', 'запускаться', 'бесконечный', 'загрузка'] discord ['дискорд', 'запускаться'] negative ['не + запускаться'] -1
сбой работы дискорд сегодня ['сбой', 'работа', 'дискорд', 'сегодня'] discord ['дискорд', 'сбой'] negative ['сбой'] -1
дискорд лежит ['дискорд', 'лежать'] discord ['дискорд'] negative ['лежать'] -1
дискорд сбои ['дискорд', 'сбой'] discord ['дискорд', 'сбой'] negative ['сбой'] -1
ркн заблокировал дискорд качайте AmnesiaWG и WARP конфиг к нему, РКН чтоб вы все сдохли там ['ркн', 'заблокировать', 'дискорд', 'качать', 'amnesiawg', 'и', 'warp', 'конфига', 'к', 'он', 'ркн', 'чтоб', 'вы', 'всё', 'сдохнуть', 'там'] discord ['дискорд', 'ркн', 'заблокировать'] negative ['заблокировать'] -1
не запускается discord ['не', 'запускаться', 'discord'] discord ['discord', 'запускаться'] negative ['не + запускаться'] -1
Капец, тут ещё люди остались которые не знают что его РКН заблокировали💀 ['капец', 'тут', 'ещё', 'человек', 'остаться', 'который', 'не', 'знать', 'что', 'он', 'ркн', 'заблокировали💀'] blocked ['ркн'] undef [] 0
Роскомнадзор ответит. ['роскомнадзор', 'ответить'] blocked ['роскомнадзор'] undef [] 0
Использую приложения для работы и развлечений - РКН ОДУМАЙСЯ ['использовать', 'приложение', 'для', 'работа', 'и', 'развлечение', 'ркн', 'одуматься'] blocked ['ркн'] undef [] 0
ЧТО ДЕЛАЕТ РКН ЗАЧЕМММММ ['что', 'делать', 'ркн', 'зачеммммм'] blocked ['ркн'] undef [] 0
роскомнадзор заблокировал все ['роскомнадзор', 'заблокировать', 'всё'] blocked ['роскомнадзор', 'заблокировать'] negative ['заблокировать'] -1
А ВЫ ДУМАЛИ ПОСЛЕ СХАВАННОЙ вами БЛОКИРОВКИ ЮТУБА РКН ОСТАНОВИТСЯ? ОНИ ЗАБЕРУТ У ВАС ВСЁ. ['а', 'вы', 'думать', 'после', 'схаванна', 'вы', 'блокировка', 'ютуба', 'ркн', 'остановиться', 'они', 'забрать', 'у', 'вы', 'всё'] blocked ['ркн', 'блокировка'] undef [] 0

About

Поиск жалоб в тексте

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages