Федеральное государственное бюджетное образовательное
учреждение высшего профессионального образования
«МОРДОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ им. Н. П. ОГАРЁВА»
Факультет электронной техники
Кафедра АСОИУ
КУРСОВОЙ ПРОЕКТ
ПРОГРАМА НА ЯЗЫКЕ С ЧАСТОТНЫЙ АНАЛИЗ
ФИННО-УГОРСКИХ ЯЗЫКОВ РОССИИ
Автор курсовой работы
Направление
230100
___________
25.05.2015 Д.С. Фомин
Информатика и вычислительная техника
Обозначение курсовой работы
КП-02069964-240901-20-15
Руководитель работы
___________
9.06.2015
В.В. Афонин
Оценка __________
Саранск
2015
1
Содержание
Введение.
1. Случайное событие. Вероятность. Частота. Частотность.
2. Среднее квадратичное отклонение.
3. Аналитическое рассмотрение частотного анализа.
4. Программная реализация частотного анализа.
5. Решение, полученное с использованием разработанного программного
обеспечения.
Заключение.
Библиографический список.
2
Введение
Внедрение ЭВМ во все сферы человеческой деятельности требует от
специалистов
разного
профиля
овладения
навыками
использования
вычислительной техники. Повышается уровень подготовки студентов вузов,
которые уже с первых курсов приобщаются к использованию ЭВМ и
простейших численных методов, не говоря уже о том, при что выполнении
курсовых и дипломных проектов применение вычислительной техники
становится нормой в подавляющем большинстве вузов.
В данном курсовом проекте рассмотрена реализация частотного
анализа текста. Созданная в этом курсовом проекте программа способна
производить подсчет частоты используемых в заданном тексте букв с целью
проведения частотного анализ текста на одном из финно-угорских языков.
Основной особенностью финно-угорских языков является не только отличие
алфавита языка, но и в некоторых языках схожесть с русским. Например:
1) Алфавит одинаков с русским языком (эрьзянский, мокшанский).
Причем некоторые буквы имеют другое значение.
2) Алфавит отличается от русского (марийский, коми-пермятский).
Причем марийский отличается только буквами, а коми-пермятский содержит
буквы, состоящие из двух других букв.
Важными характеристиками текста являются повторяемость букв, пар
букв (биграмм) и вообще m-ок (m-грамм), сочетаемость букв друг с другом,
чередование гласных и согласных и некоторые другие. Эти характеристики
являются достаточно устойчивыми.
Некоторая разница значений частот в приводимых в различных
источниках таблицах объясняется тем, что частоты существенно зависят не
только от длины текста, но и от его характера. Например, в технических
текстах редкая буква Ф может стать довольно частой в связи с частым
3
использованием таких слов, как функция, дифференциал, диффузия,
коэффициент и т.п.
Еще большие отклонения от нормы в частоте употребления отдельных
букв наблюдаются в некоторых художественных произведениях, особенно в
стихах. Поэтому для надежного определения средней частоты букв
желательно иметь набор различных текстов, заимствованных из различных
источников.
Вместе
с
тем,
как
правило,
подобные
отклонения
незначительны, и в первом приближении ими можно пренебречь.
4
1.Случайное событие. Частота. Вероятность.
Частотность.
Случайные события – события, которые могут произойти или не
произойти
при
осуществлении
совокупности
условий,
связанных
с
возможностью появления данных событий.
Случайные события обозначают буквами A, B, C и т.д. Каждое
осуществление рассматриваемой совокупности называется испытанием.
Число испытаний может неограниченно возрастать.
Определение частоты. Отношения числа m наступлений данного
случайного события A в данной серии испытаний к общему числу n
испытаний этой серии называется частотой появления события A в данной
серии испытаний (или просто частотой события А) и обозначается Р*(А).
Таким образом, P*(A)=m/n. Частота случайного события всегда заключена
между нулем и единицей: 0 ≤ P*(A) ≤ 1.
Именно это обстоятельство позволяет при изучении случайных событий
применять
математические
методы,
приписывая
каждому
массовому
случайному событию его вероятность, за которую принимается то (вообще
говоря заранее неизвестное) число, около которого колеблется наблюдаемая
частота события.
Определение вероятности. Вероятность случайного события А
обозначается через Р(А). Вероятность случайного события, как и его частота,
заключена между нулем и единицей: 0 ≤ P(A) ≤ 1.
Массовые случайные события обладают свойством устойчивости
частоты: наблюдаемые в различных сериях однородных испытаний (с
достаточно большим числом испытаний в каждой серии) значения частоты
данного случайного события колеблются от серии к серии в довольно тесных
пределах.
5
Частотность – термин лексикостатистики, который употребляется для
обозначения наиболее часто употребляемых слов. Частотность можно
определить исходя из формулы:
𝑭𝒓𝒆𝒒𝒙 =
𝑸𝒙
𝑸𝒂𝒍𝒍
Где 𝑭𝒓𝒆𝒒𝒙 - частотность слова «х», а 𝑸х - количество употреблений слова
«х», а 𝑸𝒂𝒍𝒍 - общее количество слов. Чаще всего частотность представляют в
процентах.
Также определяется частотность для букв. Частотный анализ текста
используется для выявления наиболее часто используемых слов того или
иного языка. В словарях частотность слов может отражаться пометками употребительное, малоупотребительное.
6
2. Среднее квадратичное отклонение.
Среднее квадратичное отклонение - показатель рассеивания случайной
величины относительно ее математического ожидания. Оно вычисляется по
формуле:
𝒏
𝟏
𝜹 = √ ∑ (𝒙𝒊 − 𝒙)𝟐
𝒏
𝒊=𝟏
Большее
значение
среднеквадратического
отклонения
показывает
больший разброс значений в представленном множестве со средней
величиной множества; меньшее значение, соответственно, показывает, что
значения в множестве сгруппированы вокруг среднего значения.
Например, у нас есть три числовых множества: {0, 0, 14, 14}, {0, 6, 8, 14}
и {6, 6, 8, 8}. У всех трёх множеств средние значения равны 7, а
среднеквадратические отклонения, соответственно, равны 7, 5 и 1. У
последнего множества среднеквадратическое отклонение маленькое, так как
значения в множестве сгруппированы вокруг среднего значения; у первого
множества самое большое значение среднеквадратического отклонения —
значения внутри множества сильно расходятся со средним значением.
В общем смысле среднеквадратическое отклонение можно считать мерой
неопределённости. Проводя тестирование программы мы можем проверить
действительно ли подсчеты программы совпадают с ручными вычислениями.
Если же наши расчеты различаются не на небольшое значение, значит
подсчеты верны, но если же наоборот лучше будет сделать проверку.
7
3. Аналитическое рассмотрение частотного
анализа.
Для проведения частотного анализа я взял три заготовленных текста на
разных языках
Для примера алгоритма возьмем текст на эрьзянском языке состоящий из
439 символов.
Алгоритм частотного анализа.
Шаг 1. Ввести исходные данные путем выбора текстового файла с
расширением .txt.
Шаг 2. Подсчитать количество символов в тексте, инициализируя
массив счетчиков.
Шаг 3. Провести отсеивание специальных символов в тексте, включая
пробелы. Специальные символы от 0 до 31 в таблице ASCII.
Шаг 4. Подсчитать частоту появления каждого символа используя
формулу:
𝑭𝒓𝒆𝒒𝒙 =
𝑸𝒙
𝑸𝒂𝒍𝒍
Шаг 5. Вывести подсчитанное количество букв в текстовый файл в
виде таблицы.
8
Начало
Введите имя
файла для
обработки:
fin=fopen
==NULL
Да
Введите имя
файла, куда
вывести
результаты:
Нет
Не удалось
открыть файл %s
на чтение.
fin=fopen
==NULL
Да
1
Нет
1
1
9
1
1
i=0
Не удалось
открыть файл %s
на запись.
1
i<MAX_
LEN
count[i] = 0
c=getc(fin
))!= EOF
++count[c]
2
2
2
10
2
2
2
i = 32
i <= 255
i++
count[i]
!= 0
i, count[i]
Конец
Рисунок 1.1 – Схема алгоритма частотного анализа.
11
4. Программная реализация частотного анализа.
Данная программа была разработана на языке высокого уровня С в
среде программирования Microsoft Visual Studio 2013 с использованием
стандарта С11.
Предназначена для частотного анализа финно-угорских языков.
Вывод в программе осуществляется отдельным файлом заданный
пользователем.
// Федеральное государственное бюджетное образовательное
// учреждение высшего профессионального образования
// "МОРДОВСКИЙ ГОСУДАРТСВЕННЫЙ УНИВЕРСИТЕТ им. Н. П. Огарёва"
// Факультет электронной техники
// Кафедра АССОИУ
// КУРСОВАЯ РАБОТА
// Частотный анализ финно-угорских языков России
// Автор курсовой работы: Д.С. Фомин
// Специальность: Информатика и вычислительная техника
// Руководитель работы: В. В. Афонин
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#pragma warning(disable : 4996)
#define MAX_LEN 256
void pause(){
printf_s("\nДля продолжения нажимите любую клавишу: ");
_getch();
}
int main(int argc, char** argv){
FILE* fout;
char filename_in[MAX_LEN];
char filename_out[MAX_LEN];
12
int c;
unsigned int count[MAX_LEN];
unsigned int i;
setlocale(LC_ALL, "rus");
printf_s("\nHelp ");
printf_s("\nДоя частотного анализа необходимо подготовить файл ");
printf_s("\nформата .txt и длиной текста не более 256 символов");
printf_s("\nв кодировке Windows.");
printf_s("\nПорядок работы:");
printf_s("\n1.Ввести имя файла для обработки");
printf_s("\n2.Ввести имя файла, куда вывести результаты");
printf_s("\n3.Нажать любую клавишу для того, чтобы ");
printf_s("\nзакончить работу с программой");
printf_s("\n4.Открыть заданный вами файл вывода и посмотреть результаты");
printf_s("\n===========================================================");
printf_s("\nВведите имя файла для обработки: ");
scanf("%s", filename_in);
FILE* fin;
if ((fin = fopen(filename_in, "r")) == NULL){
fprintf_s(stderr, "\nНе удалось открыть файл %s на чтение. \n ",
filename_in);
pause();
return 1;
}
printf_s("Введите имя файла, куда вывести результаты: ");
scanf("%s", filename_out);
if ((fout = fopen(filename_out, "w")) == NULL){
fprintf_s(stderr, "\nНе удалось открыть файл %s на запись. \n ",
filename_out);
pause();
return 1;
}
//Инициализируем массив
счетчиков
for (i = 0; i < MAX_LEN; i++)
count[i] = 0;
//Считаем количество встретившихся символов/
//Например у символа "D" код в таблице ASCII - 92, следовательно
//элемент массива count[92] является счетчиком для символа "D".
while ((c = getc(fin)) != EOF)
13
++count[c]; //увеличиваем счетчик на 1
//Выводим в файл все, кроме управляющих символов.
//Управляющие символы в таблице ASCII с 0 по 31.
for (i = 32; i <= 255; i++)
if (count[i] != 0)
fprintf_s(fout, "'%c' - %d\n", i, count[i]);
fclose(fin);
fclose(fout);
pause();
return 0;
}
14
5. Комментарий к листингу программы
#include <имя файла>— вставляет текст из указанного файла
#define имя_макроса последовательность_символов — определяет
идентификатор и последовательность символов, которая будет подставляться
вместо идентификатора каждый раз, когда он встретится в исходном файле
void pause() — перенаправление вывода в файл
_getch() — задержка консоли до нажатии клавиши пользователем.
setlocale(LC_CTYPE, "rus") — подключение алфавита русского языка
int main(void) — начало функции main
FILE *fin — директива подключения файла
char filename_in[MAX_LEN] — объявление значения переменной
символов в файле
int c — объявляем переменную счетчика встретившихся символов
unsigned int i — объявляем переменную счетчика символов
scanf("%s", filename_in) — сканирования имени файла введенным
пользователем
if ((fin = fopen(filename_in, "r")) == NULL){fprintf_s(stderr, "\nНе
удалось открыть файл %s на чтение. \n ",filename_in) — проверка
правильности открытия файла
for (i = 0; i < MAX_LEN; i++) count[i] = 0 — массив счетчиков
while ((c = getc(fin)) != EOF) ++count[c] — подсчет встретившихся
символов и увеличение счетчика на 1
15
for (i = 32; i <= 255; i++)
if (count[i] != 0)
fprintf_s(fout, "'%c' - %d\n", i, count[i]) — выводим в файл все, кроме
управляющих символов.
fclose(fin); fclose(fout); — закрытие файла ввода и вывода
return 0; — окончание работы программы
16
6. Решение, полученное с использование
разработанного программного обеспечения
1) В качестве первого примера рассмотрим частотный анализ текста на
мокшанском языке. На рисунке 2.1. представлен результат работы
программы.
Рисунок 2.1 – результат работы программы
17
На рисунке 2.2 представлен результат работы программы, выведенный в
файл
Рисунок 2.2 – вывод результата работы программы в файл
18
2) в качестве второго примера рассмотрим частотный анализ текста на
эрьзянском языке. На рисунке 2.3 представлен результат работы программы.
Рисунок 2.3 – результат работы программы
На рисунке 2.4 представлен результат работы программы, выведенный в
файл
Рисунок 2.4 – вывод результата работы программы в файл
19
3) в качестве второго примера рассмотрим частотный анализ текста на
удмуртском языке. На рисунке 2.5 представлен результат работы программы.
Рисунок 2.5 – результат работы программы
На рисунке 2.6 представлен результат работы программы, выведенный в
файл
Рисунок 2.6 – результат работы программы
20
Заключение
В ходе выполнения данного курсового проекта была разработана
программа на языке высокого уровня С. А также изучены возможности
данного языка.
Систематизированы и закреплены практические навыки использования
ЭВМ, программного обеспечения, существующих средств обслуживания
системных программистов, а также теоретические знания по основным
разделам курса «Программирование на языке С».
Изучен метод реализации частотного анализа текста на финно-угорских
языках.
При выполнении курсовой работы произведено знакомство с
различными информационными источниками по программированию на
языке С. Получены практические навыки работы в среде программирования
Microsoft Visual Studio 2013.
21
Библиографический список
1.
Александров Э.Э. Введение в программирование на языке С :
учеб. Пособие / Э.Э. Александров, В.В. Афонин. – Саранск :
Изд-во Мордов. ун-та, 2009. – 316 с.
2.
Язык программирования C. 2-е издание / Брайан У. Керниган,
Деннис М. Ритчи.- Вильямс, 2009. – 292 с.
3.
Теория вероятностей и математическая статистика. 9-е издание
/ Гмурман В.Е. - Высшая школа, 2003. – 479 с.
4.
Искусство программирования на C. Фундаментальные
алгоритмы, структуры данных и примеры приложений.
Энциклопедия программиста / Хэзфилд Р., Кирби Л.. ДиаСофт, 2001. – 729 с.
5.
Материалы сайта http://www.grandars.ru/
6.
Материалы сайта https://ru.wikipedia.org/
22
Отзывы:
Авторизуйтесь, чтобы оставить отзывВсё здорово! Работа мне понравилась. Единственное, чего я не понял, это - причём здесь финно-угорские языки? Программа будет также работать и для других языков: русский, английский.