# Лабораторная работа №2. Предварительная обработка текстовых данных

## Цель работы

Получить практические навыки обработки текстовых данных в среде Jupiter Notebook. 
Научиться проводить предварительную обработку текстовых данных и выявлять параметры обработки, позволяющие добиться наилучшей точности классификации.

## Задание

1.  В среде Jupyter Notebook создать новый ноутбук (Notebook) 
2.	Импортировать необходимые для работы библиотеки и модули
3.	Загрузить обучающую и экзаменационную выборку в соответствие с вариантом
4.	Вывести на экран по одному-два документа каждого класса.
5.	Применить стемминг, записав обработанные выборки (тестовую и обучающую) в новые переменные
6.	Провести векторизацию выборки:
    a.	Векторизовать обучающую и тестовую выборки простым подсчетом слов (CountVectorizer)
    b.	Вывести и проанализировать первые 20 наиболее частотных слов всей выборки и каждого класса по-отдельности.
	c.  Рассчитать сходство по коэффициенту Жаккара между тремя классами
    d.	Применить процедуру отсечения стоп-слов и повторить пункты b-c.
    e.	Провести пункты a – c для обучающей и тестовой выборки, для которой проведена процедура стемминга.
    f.	Векторизовать выборки с помощью TfidfTransformer (с использованием TF и TF-IDF взвешиваний).
	
7. Используя конвейер (Pipeline) реализовать модель Наивного Байесовского классификатора и выявить на основе показателей качества 
(значения полноты, точности, f1-меры и аккуратности), какая предварительная обработка данных обеспечит наилучшие результаты классификации. 
Должны быть исследованы следующие характеристики:
	* Наличие \ отсутствие стемминга
	* Отсечение \ не отсечение стоп-слов
	* Взвешивание: Count, TF, TF-IDF
	* Количество информативных терминов (max_features) - исследовать 5 значений в диапазоне от 100 до общего количества слов в выборке. 

	При проведении данного исследования предлагается зафиксировать все переменные кроме одной, а далее менять незафиксированную переменную для определения ее наилучего значения.
	После того как наилучшее значение найдено, фиксировать это значение, и переходить к следующей переменной.
	Например, ищем оптимальные значения для переменных A, B, C: фиксируем переменные А = 10, B = False, находим оптимальное значение переменной С. Пусть оптимальное значение С = 20,42.
	Теперь фиксируем B = False, C = 20,42, ищем оптимальное значение переменной A, и т.д.

8. По каждому пункту работы занести в отчет программный код и результат вывода.
9. По результатам классификации занести в отчет выводы о влиянии каждого из этапом предобработки данных (наличие стемминга, взвешивание терминов, стоп-слова, количество информативных терминов)
и о наиболее подходящей их комбинации. Объяснить различия (если имеются) в качестве классификации разных классов. 



## Варианты заданий

| Вариант | Класс     |
| :---    | :---:     |
| 1       | 2, 3, 8   | 
| 2       | 6, 10, 11 |
| 3       | 1, 9, 17  |
| 4       | 7, 12, 18 |
| 5       | 4, 14, 18 | 
| 6       | 1, 15, 16 |
| 7       | 3, 7 , 13 |
| 8       | 5, 16, 20 |
| 9       | 6, 17, 19 |
| 10      | 3, 5, 15  |
| 11      | 7, 14, 20 |
| 12      | 2, 12, 13 |

Названия классов

| № класса	| Название класса |
| :---      | :---            |
|1	| 'alt.atheism'|
|2	| 'comp.graphics'|
|3	| 'comp.os.ms-windows.misc'|
|4	| 'comp.sys.ibm.pc.hardware'|
|5	| 'comp.sys.mac.hardware'|
|6	| 'comp.windows.x'|
|7	| 'misc.forsale'|
|8	| 'rec.autos'|
|9	| 'rec.motorcycles'|
|10	| 'rec.sport.baseball'|
|11	| 'rec.sport.hockey'|
|12	| 'sci.crypt'|
|13	| 'sci.electronics'|
|14	| 'sci.med'|
|15	| 'sci.space'|
|16	| 'soc.religion.christian' |
|17	| 'talk.politics.guns'|
|18	| 'talk.politics.mideast'|
|19	| 'talk.politics.misc'|
|20	| 'talk.religion.misc'|

## Контрольные вопросы

1.	Особенности задачи классификации текстовых данных.
2.	Этапы предварительной обработки данных.
3.	Алгоритм и особенности Наивного Байесовского метода.
4.	Как влияет размер словаря терминов на точность классификации? 
5.	Какие способы выявления информативных терминов вам известны?
6.	Как влияет способ взвешивания терминов на точность классификации?

