- •Кафедра современных технологий программирования
- •Вычисление определённых интегралов с использованием OpenGl api
- •Содержание
- •Глава 1. Проектирование реализации приложения 4
- •Глава 2. Программная реализация приложения 6
- •Введение
- •Глава 1
- •Выбор технологии и языка программирования.
- •Цветовой портрет художественного произведения.
- •1.3. Задача анализа использования цвета в произведениях художественной литературы
- •Глава 2
- •2.1. Алгоритм обработки текста и построения цветового портрета
- •2.2. Реализация программы
2.2. Реализация программы
Как уже было написано программа реализована на с++ с помощью библиотеки stl. Также используются библиотека «fstream» для работы с файлами, библиотека «string» для оптимизации работы со строками.
Методы реализованные в программе:
Программная реализация алгоритма обработки текста
Освобождение слов текста от знаков препинания
Нахождение слов, обозначающих цвета
Вывод “кубиков” на экран
Программная реализация алгоритма обработки текста:
void Input(string filename) //Ввод текста из файла
{
string p;
ifstream in(filename);
while(!in.eof())
{
in >> p;
massiv.push_back(p);
}
in.close();
}
void LibraryInput() //Ввод из файла библиотеки корней
{
string p;
ifstream in("library.txt");
while(!in.eof())
{
in >> p;
library.push_back(p);
}
in.close();
}
void Print() //Вывод текста на консоль
{
for(unsigned int i = 0; i < massiv.size(); i++)
{
cout<<massiv[i]<<" ";
}
cout<<endl;
}
Освобождение слов от знаков препинания:
void WordCorrector() //Удаление знаков препинания
{
char punct[]={'.',',','!','?'};
for(unsigned int i = 0; i < massiv.size(); i++)
{
for(unsigned int j = 0; j < sizeof(punct); j++)
{
if(massiv[i][massiv[i].length()-1]==punct[j])
{
massiv[i].erase(massiv[i].size()-1, massiv[i].size());
}
}
}
}
Нахождение слов, обозначающих цвета:
void ColorDetector() //Нахождение словоформ цветов
{
string str;
for(unsigned int i = 0; i < massiv.size(); i++)
{
for(unsigned int j = 0; j < massiv[i].length(); j++)
{
for(unsigned int k = 0; k < library.size(); k++)
{
str = massiv[i].substr(j, library[k].length());
if(str == library[k])
{
line.push_back(ColorFind(str)); //Заполнение вектора цветов значениями из "ColorFind()"
}
}
}
}
}
ConsoleColor ColorFind(string str) //Постановка соответствия цветам
{
if((str=="Черн") || (str=="черн") || (str=="Чёрн") || (str=="чёрн"))
{
return Black;
}
else
if((str=="Син") || (str=="син"))
{
return Blue;
}
else
if((str=="Сер") || (str=="сер"))
{
return DarkGray;
}
else
if((str=="Коричн") || (str=="коричн"))
{
return Brown;
}
else
if((str=="Красн") || (str=="красн") || (str=="Бордов") || (str=="бордов"))
{
return Red;
}
else
if((str=="Фиолетов") || (str=="фиолетов"))
{
return Magenta;
}
else
if((str=="Желт") || (str=="желт") || (str=="Жёлт") || (str=="жёлт"))
{
return Yellow;
}
else
if((str=="Зелен") || (str=="зелен") || (str=="Зелён") || (str=="зелён"))
{
return Green;
}
else
if((str=="Розов") || (str=="розов"))
{
return LightMagenta;
}
else
if((str=="Бел") || (str=="бел"))
{
return White;
}
else
if((str=="Голуб") || (str=="голуб"))
{
return Cyan;
}
}
Вывод «кубиков» на экран:
void PrintLine() //Отрисовка "квадратиков" на консоли
{
char item = 219;
for(unsigned int i = 0; i < line.size(); i++)
{
SetColor(line[i], Black);
cout << item;
}
SetColor(LightGray, Black);
}
void SetColor(ConsoleColor text, ConsoleColor background) //Смена цвета шрифта
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
ЗАКЛЮЧЕНИЕ
В ходе работы над проектом было разработано приложение, позволяющее получить цветовой портрет художественного произведения. Используя эту разработку, мы можем получить графическое изображение, которое, возможно, позволит сформировать у читателя первое впечатление о содержании и эмоциональном настроении произведения. Но на самом деле более полную и информацию об эмоциональном содержании текста можно получить, только углубившись и проанализировав филологические исследования по этой теме. Существует ряд филологических исследований, в которых отмечается, что каждому «цветному слову» можно поставить в соответствие числовое значение, обозначающее его вклад в определенную эмоцию.
В будущем, на основе этих исследований, можно будет попытаться вычислить числовое значение каждой эмоции, встречающейся в тексте. И возможно, когда-нибудь в магазинах появятся книги, на которые будет нанесен «цветовой штрих-код», по которому можно будет судить об их содержании.
Использованная литература:
Справочная система языка С++
Конспект лекций по дисциплине ОАиП
ПавловскаяТ.А., Щупак Ю.А. - C++. Объектно-ориентированное программирование. Практикум - Санкт – Петербург, «Питер», 2006 г
Форум начинающих и профессиональных программистов - http://www.cyberforum.ru.
Приложение 1: Программная реализация на C++
#include <iostream>
#include <Windows.h>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
enum ConsoleColor //Перечисление цветов
{
Black = 0,
Blue = 1,
Green = 2,
Cyan = 3,
Red = 4,
Magenta = 5,
Brown = 6,
LightGray = 7,
DarkGray = 8,
LightBlue = 9,
LightGreen = 10,
LightCyan = 11,
LightRed = 12,
LightMagenta = 13,
Yellow = 14,
White = 15
};
vector <string> massiv;
vector <string> library;
vector <ConsoleColor> line;
void Input(string filename) //Ввод текста из файла
{
string p;
ifstream in(filename);
while(!in.eof())
{
in >> p;
massiv.push_back(p);
}
in.close();
}
void LibraryInput() //Ввод из файла библиотеки корней
{
string p;
ifstream in("library.txt");
while(!in.eof())
{
in >> p;
library.push_back(p);
}
in.close();
}
void Print() //Вывод текста на консоль
{
for(unsigned int i = 0; i < massiv.size(); i++)
{
cout<<massiv[i]<<" ";
}
cout<<endl;
}
void WordCorrector() //Удаление знаков препинания
{
char punct[]={'.',',','!','?'};
for(unsigned int i = 0; i < massiv.size(); i++)
{
for(unsigned int j = 0; j < sizeof(punct); j++)
{
if(massiv[i][massiv[i].length()-1]==punct[j])
{
massiv[i].erase(massiv[i].size()-1, massiv[i].size());
}
}
}
}
ConsoleColor ColorFind(string str) //Постановка соответствия цветам
{
if((str=="Черн") || (str=="черн") || (str=="Чёрн") || (str=="чёрн"))
{
return Black;
}
else
if((str=="Син") || (str=="син"))
{
return Blue;
}
else
if((str=="Сер") || (str=="сер"))
{
return DarkGray;
}
else
if((str=="Коричн") || (str=="коричн"))
{
return Brown;
}
else
if((str=="Красн") || (str=="красн") || (str=="Бордов") || (str=="бордов"))
{
return Red;
}
else
if((str=="Фиолетов") || (str=="фиолетов"))
{
return Magenta;
}
else
if((str=="Желт") || (str=="желт") || (str=="Жёлт") || (str=="жёлт"))
{
return Yellow;
}
else
if((str=="Зелен") || (str=="зелен") || (str=="Зелён") || (str=="зелён"))
{
return Green;
}
else
if((str=="Розов") || (str=="розов"))
{
return LightMagenta;
}
else
if((str=="Бел") || (str=="бел"))
{
return White;
}
else
if((str=="Голуб") || (str=="голуб"))
{
return Cyan;
}
}
void ColorDetector() //Нахождение словоформ цветов
{
string str;
for(unsigned int i = 0; i < massiv.size(); i++)
{
for(unsigned int j = 0; j < massiv[i].length(); j++)
{
for(unsigned int k = 0; k < library.size(); k++)
{
str = massiv[i].substr(j, library[k].length());
if(str == library[k])
{
line.push_back(ColorFind(str)); //Заполнение вектора цветов значениями из "ColorFind()"
}
}
}
}
}
void SetColor(ConsoleColor text, ConsoleColor background) //Смена цвета шрифта
{
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
void PrintLine() //Отрисовка "квадратиков" на консоли
{
char item = 219;
for(unsigned int i = 0; i < line.size(); i++)
{
SetColor(line[i], Black);
cout << item;
}
SetColor(LightGray, Black);
}
int main()
{
char item = 219;
string filename;
cout << "Input file name: " << endl;
cin >> filename;
Input(filename);
cout << "Text is loaded." << endl;
WordCorrector();
LibraryInput();
cout << "Library is loaded." << endl;
cout << "Please wait..." << endl;
ColorDetector();
PrintLine();
cout << endl;
return 0;
}
