Разработка программного обеспечения "Empirical-statistical comparison of texts"

Анализ существующего программного обеспечения эмпирико-статистического сравнения текстов: сounter оf сharacters, horos, graph, advanced grapher. Empirical-statistical comparison of texts: функциональность, процедуры и функции тестирование и внедрение.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 29.11.2013
Размер файла 4,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ВВЕДЕНИЕ

Главной задачей при анализе хронологии является разработка и применение новых независимых статистических методов датировки исторических событий.

Развитая в данный момент методология математической статистики даёт возможность осуществить новый подход к задаче датирования событий, описанных в исторических источниках [30]. В данной работе разработано программное обеспечение, которое опирается на принципиально новый эмпирико-статистический метод сравнения текстов, разработанный доктором физико-математических наук, профессором МГУ Анатолием Тимофеевичем Фоменко [9].

При разбиении текста на дискретные участки и подсчёта количества символов, отведённых на каждый участок, можно получить так называемые профили этих текстов, по которым в дальнейшем необходимо построить графики профилей этих текстов. [12].

В общем виде, метод эмпирико-статистического сравнения текстов по принципу корреляции локальных максимумов, на котором основан метод сравнения текстов, формулируется следующим образом.

Положим, что источник X разбивается на фрагменты X(t), каждый из которых описывает относительно малый по длине промежуток времени, например год (или десятилетие) с номером t. Случаи такой постановки записи не редки. Таковы, к примеру, погодные летописи, - то есть описывающие события год за годом [14]. Таковы дневники, многие исторические произведения, учебники и монографии по истории. Фрагменты X(t) мы будем условно называть "главами" [3].

а) Если две летописи (текста) X и Y заведомо зависимы, - то есть описывают один и тот же ряд событий исторического периода (A,B) одного и того же государства, - то графики объемов летописей X и Y должны одновременно достигать локальных максимумов на отрезке (А,В).

б) Напротив, если летописи Х и Y заведомо независимы, то есть описывают либо разные исторические периоды (А,В) и (C,D), либо разные потоки событий в разных государствах, то графики объемов для летописей Х и Y достигают локальных максимумов в разных точках. Другими словами, точки всплесков графиков vol X(t) и vol Y(t) не должны коррелировать. При этом для сравнения двух графиков мы должны предварительно совместить отрезки (А,В) и (C,D) одинаковой длины [11].

Все другие пары текстов, - то есть не являющиеся ни заведомо зависимыми, ни заведомо независимыми, - условно называются нейтральными. Относительно них никакого утверждения не делается [10].

Цель работы: разработка программного обеспечения эмпирико-статистического сравнения текстов по принципу корреляции локальных максимумов.

Задачи работы: для достижения поставленной цели нужно решить следующие задачи:

- проанализировать существующее программное обеспечение (ПО), относящееся к данной теме, выявить его достоинства и недостатки;

- проанализировать алгоритм метода корреляции локальных максимумов;

- определить форматы входных и выходных данных ПО, его функциональность;

- разработать пользовательский интерфейс программного обеспечения эмпирико-статистического сравнения текстов;

- разработать и реализовать программные модули ПО;

- провести тестирование разработанного ПО;

- провести опытную эксплуатацию разработанного ПО;

- составить документацию на разработанное ПО;

- подготовить дипломную работу к защите.

ГЛАВА 1. АНАЛИЗ СУЩЕСТВУЮЩЕГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ЭМПИРИКО-СТАТИСТИЧЕСКОГО СРАВНЕНИЯ ТЕКСТОВ

1.1 CounterOfCharacters

Удобная, но малофункциональная программа для получения статистики по тексту. Позволяет вести подсчёт латинских и альтернативных букв (например, русских) в разных регистрах, символов, спецсимволов, пробелов, разделителей, знаков пунктуации, цифр, URL ссылок, ссылок электронной почты. Позволяет узнавать код любого символа, сколько раз он встречается в тексте, а так же найти все его позиции в тексте [17].

Рисунок 1 - Программа CounterOfCharacters

Данное ПО является бесплатным и доступным для скачивания в сети.

Для работы программы необходимо, чтобы на компьютере была установлена платформа Microsoft®.NET™ Framework версии 2.0 [29].

Программа позволяет решить только маленькую часть поставленных задач (например, подсчёт количества символов участков текста) так как нет возможности построения графиков и нахождения локальных максимумов.

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

1.Неудобный пользовательский интерфейс. Для простого подсчёта количества символов, необходимо производить ряд операций, которые занимают много времени.

2.Сохранение результата не адаптировано под поставленную задачу, приходится сохранять профили в виде отдельных файлов.doc с таблицами и описанием профиля.

Практически в начале работы от данного ПО пришлось отказаться из-за вышеперечисленных причин.

1.2 Horos

Основным назначением программы HOROS является расчет дат зодиаков в интервале от 500 года до н.э. до 2000 года н.э., используя алгоритм вычисления гелиоцентрических долгот планет Солнечной системы [18]. Однако одной из возможностей ПО является сравнение текстов эмпирико-статистическим методом по принципу корреляции локальных максимумов.

Рисунок 2 - Программа HOROS

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

Кроме того, одним из разработчиков программы является академик физико-математических наук Г.В.Носовский - коллега и единомышленник автора метода статистического сравнения текстов. Вероятно, с использованием этого ПО проводилась первоначальная проверка работоспособности методов [13]. Для независимой проверки пользоваться данным ПО нельзя, так как оно может содержать ошибки. В этом случае независимый анализ повторит результаты первоначальных исследований.

1.3 Graph

Graph - программа с открытым кодом, предназначенная для построения математических графиков. Приложение поддерживает все стандартные функции и позволяет выстраивать графики этих функций. При этом пользователь может указывать цвет, толщину и стиль линий на графике, а также ограничивать интервал входных данных. Graph также позволяет показывать на графиках условия равенства и неравенства частей уравнения, визуально выделять части графика, выстраивать линии тренда и импортировать [19].

Обладает очень большим количеством настроек визуального отображения графиков.

Рисунок 3 - Программа Graph

Данное ПО способно выполнить только часть поставленных задач, так как ориентировано в основном на задачи другого характера. При помощи Graph можно строить графики профилей текста, сохранять их в нужных графических форматах и находить локальные максимумы. Нет возможности сохранять профили текста, а также проводить сравнение профилей.

ПО Graph является бесплатным и доступно для скачивания в сети.

1.4 Advanced Grapher

Advanced Grapher - программа построения и обработки графиков. При относительно маленьком размере программа имеет очень много функций и возможностей. При помощи данной программы можно строить графики уравнений, функций, неравенств, уравнений с параметром и др. [20].

В Advanced Grapher поддерживаются прямоугольная и полярная система координат, имеется возможность построения графика по таблице (создается внутри программы или вводится из файла) [7].

График можно сохранить в виде рисунка, документа Advanced Grapher (*.agr) или таблицы.

Рисунок 4 - Программа Advanced Grapher

ПО Advanced Grapher способно выполнить только небольшую часть поставленных задач, так как ориентировано на другой спектр работ. При помощи Advanced Grapher можно строить графики профилей текста, сохранять их в нужных графических форматах и находить локальные максимумы. Нет возможности сохранять профили текста, а также проводить сравнение профилей.

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

На первых этапах работы от данного ПО пришлось отказаться из-за вышеперечисленных причин.

1.5 TransCounter

TransCounter - программа подсчета статистики в файлах MS Word. Считает в папках с произвольной вложенностью статистику: количество символов с пробелами или без пробелов, слов, стоимость. Группирует статистику по файлам, по папкам или показывает общую статистику [21].

Рисунок 5 - Программа TransCounter

ПО имеет неудобный пользовательский интерфейс и предназначено для узкого спектра задач.

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

1.6 Mathcad

Mathcad - система компьютерной алгебры из класса систем автоматизированного проектирования, ориентированная на подготовку интерактивных документов с вычислениями и визуальным сопровождением [22].

Рисунок 6 - Программа MathCad

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

Также стоимость продукта очень велика: на данный момент от 4000 до 144000 рублей в зависимости от версии продукта. Такие затраты для заказчика неприемлемы.

Продукт был первоначально использован для нахождения локальных максимумов профиля, но из-за трудоёмкости и большого количества времени, затраченного на каждую задачу, от использования данного ПО пришлось отказаться.

1.7 SciDAVis

SciDAVis - бесплатное программное обеспечение для анализа научных данных, их визуализации и подготовки к печати, распространяемое под лицензией GNU GPL.

SciDAVis обладает простым в освоении и интуитивно понятным интерфейсом, а также обладает обширными возможностями, такими, как возможность написания скриптов и создания собственных модулей. SciDAVis может работать в операционных системах Linux, Microsoft Windows и Mac OS X [23].

Рисунок 7 - Программа SciDAVis

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

1.8 Veusz

Veusz - программа для построения графиков зависимости двух переменных, линий уровня, гистограмм и графиков функции, заданных аналитически [24].

Рисунок 8 - Программа Veusz

В отличие от Grapher и SciDAVis, позволяет строить не так много графиков, зато имеет гораздо большее количество визуальных настроек отображения. Имеет возможность сохранения графика в графический формат и возможность нахождения локальных максимумов, однако, в Veusz эта задача является очень трудоёмкой и занимает очень много времени. Программа бесплатная и доступна для скачивания в сети.

1.9 Microsoft Mathematics 4.0

Microsoft Mathematics 4.0 - бесплатный продукт компании Microsoft, созданный для решения математических задач и визуализации двухмерных и трехмерных графиков [25].

Рисунок 9 - Пакет Microsoft Mathematics 4.0

Пакет Microsoft Mathematics имеет очень широкий спектр возможностей, благодаря которым можно решить несколько поставленных задач, однако нет возможности сравнения профилей текстов эмпирико-статистического методом сравнения текстов. Реализация поставленных задач при помощи Microsoft Mathematics займёт очень много времени, так как для выполнения каждой задачи нужно производить большое количество операций.

1.10 Сравнительная таблица аналогичного программного обеспечения

На основе приведённой выше информации о существующих ПО-аналогах, построена таблица 1. В ней отображены все необходимые условия, которым должно отвечать ПО для реализации поставленных задач.

Таблица 1 - Сравнительная таблица ПО-аналогов

Название ПО

Возможность подсчёта символов

Возможность построения графиков

Возможность

сохранения графиков

Возможность нахождения локальных максимумов

Возможность сравнения профилей методом ЭССТ

Удобный пользовательский интерфейс для быстрого решения поставленных задач

Бесплатный продукт

CounterOf

Characters

+

-

-

-

-

-

+

HOROS

+

-

-

+

+

-

+

Graph

-

+

+

+

-

-

+

Advanced Grapher

-

+

+

+

-

+

+

Trans

Counter

+

-

-

-

-

+

+

Mathcad

+

+

+

+

-

-

-

SciDAVis

-

+

+

+

-

+

+

Veusz

-

+

+

+

-

-

+

Microsoft Mathematics

+

+

+

+

-

-

+

1.11 Необходимость разработки программного обеспечения эмпирико-статистического сравнения текстов

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

Возникает необходимость разработки ПО, которое отвечает всем требованиям заказчика и обладает удобным интерфейсом.

Использование разрабатываемого ПО должно сократить время работы и сделать процесс анализа текстов менее трудоёмким.

ГЛАВА 2. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ «EMPIRICAL-STATISTICAL COMPARISON OF TEXTS»

Исходя из проведённого анализа предметной области, а также существующих решений в главе 1, необходимо разработать ПО «ESCT».

Таблица 2 - Сравнительная таблица ПО-аналогов, включающая ПО «ESCT»

Название ПО

Возможность подсчёта символов

Возможность

построения

графиков

Возможность

сохранения графиков

Возможность нахождения локальных максимумов

Возможность сравнения профилей методом ЭССТ

Удобный пользовательский интерфейс для быстрого решения поставленных задач

Бесплатный продукт

CounterOf

Characters

+

-

-

-

-

-

+

HOROS

+

-

-

+

+

-

+

Graph

-

+

+

+

-

-

+

Advanced Grapher

-

+

+

+

-

+

+

Trans

Counter

+

-

-

-

-

+

+

Mathcad

+

+

+

+

-

-

-

SciDAVis

-

+

+

+

-

+

+

Veusz

-

+

+

+

-

-

+

Microsoft Mathematics 4.0

+

+

+

+

-

-

+

ESCT

+

+

+

+

+

+

+

Для достижения цели дипломной работы было разработано ПО «ESCT», которое позволяет представлять текстовые исторические источники в форме математических профилей, сохранять профили в файл, осуществлять построение графических отображений этих профилей с возможностью сохранения в графический файл, а также производить сравнительный анализ по эмпирико-статистическому методу сравнения текстов.

2.1 Функциональность программного обеспечения «ESCT»

ПО «ESCT» обеспечивает выполнение следующих функций:

-чтение текста из текстового файла.txt

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

-поиск по тексту по ключевому слову

-сохранение название главы, позиции в тексте и соответствующего количества символов, отведённых на данный участок текста

-сохранение структуры профиля текста в файл формата .xml

-чтение всей коллекции профилей из файла формата .xml

-построение графика профиля

-сохранение графика в форматах .png , .jpeg, .jpg и .bmp

-поиск локальных максимумов профиля

-сравнительный анализ двух профилей и вывод результата

«ESCT» отвечает всему комплексу требований и выполняет все функции, необходимые для проверки эффективности и работоспособности метода независимым экспертом, а также для дальнейшего использования этого метода с целью корректирования существующей хронологической шкалы. Все промежуточные результаты анализа содержатся в отчете для того, чтобы любой посторонний наблюдатель мог удостовериться в корректности выполняемой работе и в отсутствии фальсификаций. Также сохранение профиля в графическом виде даёт возможность опубликования промежуточного результата в научных статьях.

2.2 Входные и выходные данные программного обеспечения «ESCT»

Входными данными ПО «ESCT» являются:

1.Исторический документ в текстовом формате.txt

2.База профилей исторических источников в формате .xml

Выходными данные ПО «ESCT» являются:

1.База профилей исторических источников в формате .xml

2.Профиль исторического источника, представленный в графическом виде в форматах .png, .jpeg, .bmp

2.3 Выбор средств разработки

Для реализации ПО «ESCT» выбраны программная платформа.Net Framework, язык программирования C# и среда разработки Visual Studio 2010 Ultimate. для хранения информации выбран XML, для создания справочной системы help - ПО Dr.Explain.

2.3.1 Выбор программной платформы

В качестве программной платформы была выбрана платформа.Net Framework, являющаяся продуктом компании Microsoft.

Выбор был сделан вследствие того, что разрабатываемое ПО будет использовано на операционной системе Windows. Один из основных принципов платформы.NET - ориентирование на системы, работающие под управлением семейства операционных систем Microsoft Windows [8].

Также разрабатываемое ПО использует удобный компонент для рисования графиков под.NET Framework - ZedGraph.

Одной из главных причин является тот факт, что платформа.NET облегчает разработку пользовательс-кого интерфейса приложения за счет библиотеки классов Windows Forms, делающих его использование более простым.

2.3.2 Выбор языка программирования

В качестве языка программирования был выбран язык программирования C#.

Выбор обоснован тем, что язык специально был разработан для платформы Microsoft.NET Framework, и это является его очевидным преимуществом перед остальными языками программирования.

Также язык хорошо документирован, активно поддерживается и обладает широкой сферой применения. C# имеет возможность привлечения сторонних разработчиков при разработке системы для программирования узкоспециализированных задач [5].

Таким образом, C# - очень простой, удобный и современный язык, по эффективности не уступающий C++, но существенно повышающий продуктивность разработок. Данный язык является хорошим выбором для быстрого конструирования различных компонентов - от высокоуровневой бизнес логики до системных приложений, использующих низкоуровневый код [1].

2.3.3 Выбор среды разработки

В качестве среды разработки была выбрана интегрированная среда разработки Microsoft Visual Studio 2010.

Среда обладает рядом преимуществ. Отладка выполнена так, что окно "Потоки" предоставляет возможности фильтрации, поиска и расширения стека вызовов, а также группирования. Кроме того, можно упорядочивать точки остановок, выполнять по ним поиск и совместно использовать их с другими разработчиками.

Редактор кода облегчает чтение кода. Можно масштабировать текст, нажав клавишу CTRL и вращая колесо мыши. Кроме того, если щелкнуть символ в Visual C# или Visual Basic, автоматически будут выделены все экземпляры этого символа. Поиск по мере ввода [6].

Функция "Перейти к" предоставляет поддержку поиска по мере ввода для файлов, типов и элементов. Эта функция позволяет использовать преимущества "Верблюжьего Регистра" и знаков подчеркивания для сокращения текста поиска.

Иерархия вызовов устроена таким образом, что в Visual C# и Visual C++ позволяет переходить от элемента как к вызывающему его, так и к вызываемым им элемента. Это удобно при просмотре объектно-ориентированного кода.

Функции в интерфейсе IDE, такие как добавление ссылки и панель элементов, соответствуют версии.NET Framework, на которую ориентируется проект. В результате типы, элементы и элементы управления из сборок, созданных для предыдущих версий платформы.NET Framework, не появляются в IntelliSense и создают фоновые ошибки компиляции. Например, если проект ориентируется на.NET Framework 2.0 и используется функция языка, которую.NET Framework 2.0 не поддерживает, например анонимный тип, то интерфейс IDE будет помечать этот код как ошибочный.

В Visual Basic или Visual C# интерфейс IDE теперь может создавать заглушки кода для новых типов и членов, исходя из их использования, прежде чем они будут определены. В результате можно сначала писать тесты, а затем создавать код, необходимый для компиляции этих тестов. Кроме того, теперь IntelliSense предоставляет режим предложений, который предотвращает автоматическое заполнение типа или элемента, который еще не был определен.

Новые функции в языке C# упрощают программирование с помощью интерфейсов API системы Microsoft Office. При наличии именованных и дополнительных аргументов больше не нужно указывать значения для каждого дополнительного параметра при вызове методов модели COM. При наличии динамической поддержки можно ссылаться на любой объект, например на возвращаемые значения из интерфейсов API модели COM или из динамических языков, без использования явного приведения типов. Индексированные свойства и необязательные модификаторы ref облегчают доступ к интерфейсам модели COM. Кроме того, поддержка эквивалентности типов упрощает развертывание путем включения типов из основных сборок взаимодействия (PIA) непосредственно в нужную сборку [2].

Создание и использование текстовых шаблонов возможны в любой версии Visual Studio без потребности в других компонентах. С введением предварительно преобразованных текстовых шаблонов в Visual Studio 2010 создание всех типов текстовых файлов в приложении стало удобнее. Была оптимизирована и поддержка создания кода за счет улучшения интеграции с системой построений, так что созданный код остаётся актуальным независимо от изменений в исходной модели.

В интерфейсе IDE можно найти и установить расширения Visual Studio. Диспетчер расширений загружает и устанавливает расширения, опубликованные в сообществе, с ресурса Visual Studio без необходимости открывать браузер. Он также позволяет удалять, отключать или повторно включать установленные расширения [4].

2.3.4 Выбор XML для хранения данных

В ранних версиях программы сохранение данных выполнялось двумя способами: в базу данных SQL и в специализированном формате.esc , однако на практике ни одно из преимуществ такого способа хранения информации не было актуальным. Сохраняемый файл не требовал никакой защиты, не превышал объёма, влияющего на скорость работы ПО, а также обладал довольно простой внутренней структурой [26]. Помимо этого, одним из ключевых требований заказчика была возможность удобного чтения файла профилей текстовым редактором [28].

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

1. XML файлы имеют текстовой формат, который удобно читать и отслеживать;

2. Свободен от требований на порядок расположения атрибутов в элементах;

3. XML основан на стандартах международного уровня;

4. Файлы XML легко конвертировать в другие форматы, которые в дальнейшем будут использоваться при составлении отчётов и статей;

5. XML поддерживает Юникод [16];

Таким образом, для реализации поставленной задачи сохранение коллекции профилей в формате файла XML является оптимальным решением.

2.3.5 Выбор программного обеспечения для создания справочной системы

Для создания справочной системы была выбрана программа Dr.Explain. Данное ПО:

Позволяет быстро и качественно создавать файлы справки в форматах .rtf, .html, .chm и .pdf.

Имеет специализированный текстовый редактор с большим количеством функций, ориентированных на создание файлов справки и документации для ПО [17].

Обладает возможностью добавлять функции поиска и индексации в on-line справки без использования программирования (PHP, ASP, и т.д.) или баз данных на стороне сервера.

Имеет редактор аннотаций изображений для быстрого создания пояснительных выносок на технических иллюстрациях и снимках экрана [15].

Рисунок 10 - Программа Dr.Explain

2.3.6 Выбор компонента ZedGraph для построения графиков

Для построения и сохранения графиков был выбран компонент ZedGraph.

ZedGraph это библиотека классов и пользовательский элемент управления под.NET Framework. Написан на языке C #, служит для рисования 2D графиков, линейных и круговых диаграмм. Он имеет широкий спектр настроек, но большинство параметров имеют значения по умолчанию для простоты использования [10].

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

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

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

На основании вышеперечисленных преимуществ, ZedGraph был использован для построения и сохранения графиков в ПО «ESCT».

2.4 Описание программных классов программного обеспечения «ESCT»

2.4.1 Класс Chapter

Экземпляры класса Chapter служат для представления глав текста, разделённого опорными точками.

Класс Chapter имеет следующие свойства:

public string Name - имя главы, которое отображается в полях выбора опорных точек, а также на графике профиля.

public int Position - позиция опорной точки, служащей конечной точкой главы.

public int Count - количество символов текста, отведённое на данную главу.

Класс реализует интерфейс IComparable, поэтому у него есть метод

CompareTo, который реализует сортировку экземпляров класса в коллекции по возрастанию значения свойства Position.

Также класс имеет переопределённый метод toString для отображения в списке опорных точек.

2.4.2 Класс TextProfile

Класс служит для представления профиля текста и имеет следующие свойства:

public string Name - имя профиля, которое отображается в списке профилей, на графике профиля, а также в отчёте проведения анализа.

public string PComment - комментарии, необходимые для того, чтобы пользователь мог отмечать, какие участки вызвали у него затруднение и на что следует обратить внимание, если результат анализа не будет однозначным.

public List<Chapter> AllProfiles - коллекция всех опорных точек, на которые разделён текст. Необходима для осуществления сравнения профилей.

2.4.3 Класс Utils

Класс создан для реализации в нём вспомогательных методов GetPercents, GetHelp и ConvertMassiveToString, описанных в пункте Описание методов.

2.5 Структура XML документа, содержащего базу данных профилей

Файл Profiles.XML содержит в себе коллекцию объектов класса TextProfile, каждый из которых имеет следующую структуру:

В парном теге <Name> содержится имя профиля, в <PComment> комментарии к профилю, в <AllProfiles> содержатся все главы текста <Chapter>.

Каждая глава содержит теги <Name> - имя главы, <Position> - позицию опорной точки и <Count> - количество символов, отведённых на данную главу.

Рисунок 12 - структура профиля на XML

2.6 Описание процедур и функций

2.6.1 Процедура openBase

Процедура openBase осуществляет загрузку всех профилей в списки выбора профилей.

Сначала процедура создаёт объект reader - экземпляр объекта System.Xml.Serialization.XmlSerializer, при помощи которого в дальнейшем осуществляется чтение файла.

Далее создаётся поток для чтения файла формата XML и записывает из него все находящиеся в нём экземпляры класса TextProfile в коллекцию overview. Далее процедура закрывает файл, очищает поле отчёта errorReport и записывает туда список всех загруженных профилей. Также список всех профилей помещается в списки listProf и listProf.

Далее процедура помещает коллекцию overview в startList, с которой далее будет происходить взаимодействие.

В случае неполадки, связанной с утерей или некорректным форматом файла базы профилей, в поле отчёта выводится текст возникшего исключения.

Файл Profiles.XML содержит всю сохранённую пользователем коллекцию профилей. Пользуясь тем, что графики профилей автоматически строятся при выделении профиля в списке, пользователь может увидеть визуальное сходство некоторых профилей, которые более вероятностно будут взаимозависимыми. Соответственно, если на графике будет видно, что максимумы не коррелируют, то, скорее всего, тексты не являются взаимозависимыми. Это даёт возможность ускорить процесс анализа при работе с большим количеством источников.

2.6.2 Процедура addCh

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

Процедура создаёт экземпляр класса Chapter, используя конструктор, помещает в него свойство Name из текстового поля profileNameBox, при этом проверяя наличие на уже существующий объект с таким именем. В случае конфликта имён, сообщение об ошибке выводится в поле отчёта.

Свойство Position класса Chapter устанавливается из свойства SelectionStart текстового поля mainTextBox. Если значение свойства Position численно равно значению другого экземпляра класса Chapter в коллекции, то экземпляр не создаётся.

После занесения главы в коллекцию, коллекция сортируется по возрастанию свойства Position при помощи метода Sort(). Это необходимо для того, чтобы пользователь видел прямую последовательность глав независимо от того, в каком порядке он ставил ту или иную опорную точку. Также правильную последовательность в дальнейшем использует алгоритм нахождения свойства Count. Значение является разностью настоящего значения Position с соответствующим значением свойства предыдущего экземпляра.

Глава добавляется в список listProfiles при помощи переопределённого метода toString класса Chapter.

2.6.3 Процедура deleteCh

Процедура осуществляет удаление экземпляра класса Chapter из общей коллекции экземпляров Chapters.

Процедура имеет входной параметр int index, в котором передаётся порядковый номер элемента в списке, который нужно удалить.

Сначала создаётся временная коллекция tempList, в которую поочерёдно помещаются все объекты из Chapters. Далее коллекция Chapters очищается методом Clear, после чего в неё поочерёдно помещаются экземпляры из коллекции tempList, за исключением того, чей порядковый номер равен входному параметру index. Таким образом, в исходной коллекции остаются все главы, кроме удалённой. Проводить сортировку коллекции не нужно, так как порядок остаётся неизменным. При этом для каждого элемента новой коллекции заново считается свойство Count, так как при удалении одной опорной точки, фактически исчезает одна глава, размер следующей увеличивается на удалённую величину.

Удаление элемента не осуществляется, если ни один элемент не выбран.

2.6.4 Процедура addProfile

Процедура создаёт профиль, помещает его в общую коллекцию, добавляет в списки всех профилей и сохраняет в файл Profiles.XML.

В начале осуществляется проверка на совпадение имени сохраняемого профиля с существующими именам в общей коллекции профилей. Для этого используется логическая переменная dostup. Она принимает значение true по умолчанию, и меняет его на false в случае совпадения имён.

Также осуществляется проверка на то, что поле profileNameBox заполнено, а также что профиль содержит хотя бы одну главу. При возникновении ошибок, соответствующее сообщение выводится в поле отчёта errorReport.

Далее создаётся экземпляр toSave класса TextProfile, который добавляется в общую коллекцию startList. Коллекция сохраняется в файл Profiles.XML.

После этого в списки объектов ListBox listProf и listProf1очищаются и заново заполняются всеми доступными профилями.

В случае возникновения ошибок записи, отчёт помещается в текстовое поле отчёта errorReport.

2.6.5 Процедура drawGraphic

Данная процедура осуществляет прорисовку графика выбранного профиля, используя компонент ZedGraph.

Входные данные: объект GraphPane pane и int num.

В качество num передаётся значение выбранного элемента списка профилей, в качестве pane - графическая панель того экземпляра ZedGraph, в котором будет происходить построение графика.

Сначала панель очищается от ранее построенных кривых методом Clear свойства CurveList. Это необходимо для того, чтобы новые графики не строились на той же оси поверх предыдущего.

Свойствами XAxis.Title.Text и YAxis.Title.Text объекта pane устанавливаются значения осей на ”Периоды” и ”Количество символов” соответственно. Свойством Title.Text объекта pane устанавливается название графика. Значение берётся из свойства Name объекта коллекции startList с номером num.

Далее создается экземпляр объекта PointPairList list, в который будут помещены точки графика. Для каждого элемента коллекции глав, которая находится в свойстве AllProfiles объекта выбранной главы, создаётся пара чисел x и y. x принимает значение c, которая изначально равна 0 ,но возрастает в каждом цикле на 1, а y принимает значение свойства Count выбранной главы. Таким образом, образуется коллекция точек, по которым в дальнейшем строится график.

После этого процедура создаёт экземпляр объекта LineItem myCurve и задаёт ему свойства отображения линий графика:

SymbolType - свойство отображения точки;

Symbol.Fill.Color - цвет заливки точки;

Symbol.Fill.Type - FillType.Solid - способ заливки точки;

Symbol.Size - размер точки.

Это необходимо для того, чтобы пользователь отчётливо видел опорные точки на графике в местах, в которых объёмы глав примерно одинаковые.

Далее вызывается метод AxisChange, который обновляет данные об осях.

На последнем этапе добавляются надписи названия глав на оси X , для этого в цикле foreach для каждой главы создаётся экземпляр объекта TextObj с текстом свойства Name текущей главы, и координатами (i,0) ,где i - счётчик цикла.

После того, как процедура отработала, для панели вызывается метод Invalidate(), который обновляет панель и прорисовывает созданные точки, соединённые кривыми.

2.6.6 Процедура saveGraph

Процедура сохраняет график в графический файл расширения .bmp, .jpeg или .png.

Входным параметром является панель GraphPane pane того объекта ZedGraph, из панели которого необходимо сохранить график.

Сначала процедура создаёт диалоговое окно SaveFileDialog dlg сохранения файла со свойство Filter которого принимает значение "*.png|*.png|*.jpg; *.jpeg|*.jpg;*.jpeg|*.bmp|*.bmp|Все файлы|*.*"

Методом GetImage объекта pane получается объект Bitmap и помещается в переменную bmp. Далее для bmp вызывается метод Save с двумя параметрами:

Свойство Filename объекта dlg, в котором находится имя сохраняемого файла.

Свойства Png, Jpeg и Bmp объекта ImageFormat в зависимости от выбора пользователя.

Если не был выбран пункт “Все файлы”, то пользователь может ввести формат вручную, поэтому в таком случае метод Save вызывается с единственным параметром dlg.FileName.

Если файл с названием сохраняемого файла уже существует, пользователю предлагается заменить его.

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

2.6.7 Функция Analize

Функция осуществляет общий анализ профилей. Находит все локальные максимумы профилей. Заполняет коллекции числовыми разностями между локальными максимумами и передаёт их в функцию percentAnalize для подсчёта процентного показателя взаимозависимости источников.

Сначала осуществляется проверка на корректность выбора. Если не выбран ни один из профилей в обоих списках или в одном из списков, а также если выбран один и тот же профиль в обоих списках. В этом случае метод сообщит пользователю об ошибке, в которой будет сказано, что нужно указать два разных профиля.

Далее функция создаёт временные объекты:

TextProfile pr1 = startList[listProf.SelectedIndex];

TextProfile pr2 = startList[listProf2.SelectedIndex];

- профили текста, взятые из общей коллекции профилей по индексу выбранных элементов listProf и listProf2 соответсвенно

List<Chapter> oper1 = pr1.AllProfiles;

List<Chapter> oper2 = pr2.AllProfiles;

-временные коллекции всех глав, в которые помещаются главы из выбранных профилей

List<int> opmas1 = new List<int>();

List<int> opmas2 = new List<int>();

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

List<int> oplong1 = new List<int>();

List<int> oplong2 = new List<int>();

-коллекции, созданные для заполнения их значениями расстояний между локальными максимумами.

string s1 = "";

string s2 = "";

-строковые отображения коллекции расстояний между локальными максимумами, которые в дальнейшем будут передаваться функции percentAnalize в качестве входных параметров.

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

(a-1) < a > (a+1),

(1)

где a - значение текущего элемента коллекции, a-1 и a+1 - значения предыдущего и последующего элемента соответственно.

Все эти числовые значения записываются в коллекцию opmas1, а также в текстовое поле отчёта.

После этого осуществляется подсчёт расстояний между локальными максимумами. Для этого из значения каждого максимума вычитается значение предыдущего. Все расстояния заносятся в коллекцию расстояний oplong1, а также в текстовое поле отчёта.

Далее строка s1 принимает значение коллекции расстояний oplong1 в виде строки в форме чисел через точку, например, ”3.2.4.5.9.6.5.5.11.4”. Точки необходимы для разделения двухзначных чисел. На практике такие числа появляются крайне редко, однако это может привести к серьёзной ошибке, которая повлияет на результат анализа.

Все проделанные выше операции повторяются для второго профиля с соответствующими объектами oper2, opmas2, oplong2 и s2.

Функция сравнивает коллекции расстояний по количеству элементов. Это необходимо для того, чтобы передать в функцию percentAnalize сначала строку, полученную из коллекции с большим количеством символов, а затем с меньшим. Если количество элементов в обеих коллекциях одинаковое, то порядок не имеет значения.

Последним этапом функция вызывает percentAnalize с параметрами s1 и s2.

2.6.8 Процедура FindText

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

Входными данными являются строки part и text.

Для строки text применяется метод indexOf с параметром part. Данная процедура возвращает число, которое помещается в переменную index. Если index получает значение -1, то фрагмент в тексте не встречается, и соответствующее сообщение выводится в поле отчёта. В противном случае свойствам текстового поля SelectionStart и SelectionLength устанавливаются значения index и part.Lenght соответственно, а также для него вызывается метод Focus, чтобы перевести фокус на текстовое поле. Таким образом, искомый участок текста находится и выделяется.

2.6.9 Функция percentAnalize

Функция принимает коллекции глав двух профилей oplong1 и oplong2, и строковые представления этих коллекций smalls и bigS соответственно, и возвращает числовое значение maxCount от 0 до 100, характеризующее процент взаимозависимости текстов, на основе которых были составлены эти профили.

Если значение равно 100%, это означает что все расстояния между локальными максимумами одинаковые и можно сделать вывод, что профили полностью взаимозависимы.

Совпадение на 40-99% означает, что вероятность взаимозависимости текстов, чьи профили подлежали анализу, очень велика, но в силу тех или иных обстоятельств не все максимумы коррелировали. Это может быть вызвано, в частности тем, что пользователь мог неправильно установить опорные точки, тем самым некорректно разбить текст на главы. Ошибки эти иногда вызваны субъективным характером разбиения на главы, так как в тексте не всегда явно указано, в каком году было описано событие. Также причиной может быть то, что используется не первоисточник, а более поздняя редакция, в которую были внесены изменения из других источников. Тогда некоторые события получат более детальную окраску, поэтому график профиля этого текста будет иметь другой вид.

Совпадения 40% и ниже можно считать незначительными, и практически однозначно сделать вывод о том, что тексты описывают разные исторические события. Сначала функция проверяет профили на полное соответствие, для этого осуществляется поиск подстроки smallS в строке bigS. В случае совпадения, функция возвращает значение 100. Далее функция последовательно по убывающей начинает проверять, не содержится ли часть расстояний между локальными максимумами одного профиля в другом профиле. Таким образом, метод находит наибольшее количество совпадений расстояний между локальными максимумами. Затем при помощи метода GetPercents переводит полученный результат в проценты и помещает в переменную maxCount , которая является выходным параметром функции.

2.7 Описание методов.

2.7.1 Метод ConvertMassiveToString

Метод, созданный для приведения массива int[] к типу string таким образом, чтобы с ним мог корректно работать метод percentAnalize.

Метод получает в качестве входного параметра массив int[] и возвращает преобразованную строку.

2.7.2 Метод GetPercents

Метод принимает значение количества коррелирующих локальных максимумов и общего количества локальных максимумов int maxCount и int lenght соответственно и возвращает результат в процентах.

2.7.3 Метод GetHelp

Открывает файл подсказки “help.chm”. Возвращает сообщение об удачном открытии файла подсказки или сообщение об ошибке, если файл уже открыт. Метод создаёт экземпляр System.Diagnostics.Process , проверяет, открыт ли файл с помощью метода HasExited, и в случае возврата значения false , отправляет сообщение о том, что файл уже открыт, если только файл подсказки не открыт впервые. Таким образом, пользователь не может открыть несколько файлов помощи одновременно.

2.8 Порядок использования программного обеспечения «ESCT»

Пользователь загружает исторический источник в формате.txt в рабочую область, нажав кнопку ”Открыть текстовой файл”. После загрузки в рабочей области отображается текст источника. Далее пользователь начинает делить его на дискретные участки в зависимости от характера и объёма текста, используя функциональность добавления опорных точек. Для каждой главы пользователь задаёт имя и указывает позицию в тексте, которая разделяет текст на участки. После того, как пользователь разделил текст на главы, он сохраняет профиль в базу, предварительно указав имя профиля и при необходимости добавив комментарии к тексту. Далее процесс работы происходит с профилями текстов. Пользователь выбирает два профиля из коллекции профилей, и осуществляет сравнение вышеописанным методом, нажав кнопку ”Провести анализ текстов”. В поле отчёта записывается результат сравнения с указанием всех локальных максимумов, расстояний и информация о взаимозависимости текстов, выраженная в процентах. Эту информацию пользователь использует для написания отчётов или статей.

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

2.9 Описание пользовательского интерфейса программного обеспечения «ESCT»

2.9.1 Общая информация

Пользовательский интерфейс осуществлён учитывая все необходимые условия для работы с текстами по методу эмпирико-статистического сравнения текстов. Он оформлен таким образом, чтобы пользователю было удобно работать сразу с несколькими профилями, осуществляя последовательный анализ одного профиля за другим.

Условно можно разделить его на две части:

а) участок для работы с главами,

б) участок для работы с профилями.

Однако, для полноценной работы необходимо, чтобы оба участка находились на одной форме WindowsForms. Элементы расположены в том порядке, в котором производится работа.

программный обеспечение text comparison

Рисунок 13 - Общий вид интерфейса «ESCT»

2.9.2 Участок работы с главами

Данный участок предназначен для разбиения текста на главы, путём создания опорных точек, а также для сохранения профиля в общую базу профилей.

Участок содержит следующие элементы:

Текстовое поле mainTextBox - экземпляр объекта TextBox , служит для отображения тектса источника.

Кнопка поиска findButton - экземпляр объекта Button, осуществляет поиск по ключевому слову в тексте поля mainTextBox

Текстовое поле findTextBox - экземпляр объекта TextBox, создано для записи ключевого слова поиска.

Кнопка addButton - экземпляр объекта Button, по нажатию осуществляется добавление новой опорной точки при выполнению описанных условий.

Текстовое поле addTextBox - экземпляр объекта TextBox , в которое записывается название добавляемой опорной точки.

Кнопка openButton - экземпляр объекта Button, по нажатию открывается диалоговое окно открытия текстового файла, загружаемого в mainTextBox

Кнопка removeButton - экземпляр объекта Button, удаляет из списка выбранную опорную точку.

Кнопка saveButton - экземпляр объекта Button, служит для сохранения профиля в общую базу профилей, находящуюся в XML-файле при выполнении заданных условий. Текстовое поле profileNameBox - экземпляр объекта TextBox, создано для записи имени сохраняемого в базу профиля.

Список listProfiles - экземпляр объекта ListBox, служит для отображения всех опорных точек создаваемого профиля.

Текстовое поле comments - экземпляр объекта TextBox , в которое записываются комментарии к профилю.

Рисунок 14 - Общий вид участка работы с главами

2.10 Описание работы элементов участка работы с главами

2.10.1 Текстовое поле mainTextBox

Поле создано для отображения текста исторического источника и для дальнейшей работы с ним.

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

Рисунок 15 - Открытие текстового файла

2.10.2 Текстовое поле findTextBox и кнопка findButton

Служит для поиска в тексте по ключевым словам. При написании имени и нажатии кнопки Найти, находит и выделяет искомый участок в тексте.

Рисунок 16 - Поиск в тексте по ключевым словам

2.10.3 Кнопка addButton, Текстовое поле addTextBox

При написании имени опорной точки в поле addTextBox и последующем нажатии кнопки addButton, создаётся новый экземпляр опорной точки. Точка создаётся в том случае, если указано место в тексте, и название точки, которое не совпадает с названием существующих точек.

Рисунок 17 - Добавление опорной точки

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

2.10.4 Кнопка removeButton

При нажатии осуществляется удаление выбранной опорной точки. При этом, как и в случае с добавлением, во всех точках коллекции автоматически пересчитывается количество символов в каждой главе и список сортируется.

Рисунок 18 - Удаление опорной точки

2.10.5 Кнопка saveButton, текстовые поля comments и profileNameBox

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

Если все условия выполнятся, профиль будет успешно сохранён и сразу же отражён в списках выбора профилей listProf и listProf1.

Рисунок 19 - Успешное сохранение профиля в базу

При возникновении конфликта имён или других ошибках, соответствующие сообщения об ошибках будут описаны в поле отчёта.

Рисунок 20 - Сообщения об ошибках (а - совпадение имён, б - нет опорных точек, в - поле имени не заполнено)

2.11 Участок работы с профилями

Данный участок пользовательского интерфейса предназначен для выбора профилей из существующей базы профилей, построения графиков, сохранение графиков в форматах .png, .jpg и .bmp, для проведения анализа методом эмпирико-статистического сравнения текстов по принципу корреляции локальных максимумов.

Участок содержит следующие элементы:

Два экземпляра панели объекта ZedGraph graphControl и graphControl1, необходимые для построения графиков

Два элемента Button savePane1 и savePane2 , служат для сохранения графиков из соответствующих панелей graphControl и graphControl1

Два экземпляра объекта ListBox listProf и listProf2, необходимые для отображения общего списка профилей, находящихся в базе.

Экземпляр объекта TextBox errorReport, в который записываются сообщения об ошибках и результат анализа текстов.

Экземпляр объекта Button AnalysisButton, при нажатии на который осуществляется анализ текста вышеописанным методом.

Экземпляр объекта Button helpButton, при нажатии на который открывается файл подсказки help.chm

Поля listProf и listProf2 , а также поле отчёт errorReport нужны и при работе с опорными точками. В ранних версиях программы участки находились в разных формах, что затрудняло процесс работы. Поэтому в ходе разработки программы оба участка были объединены в одну форму.

Рисунок 21 - Общий вид участка работы с профилями

2.12 Описание работы элементов участка работы с профилями

2.12.1 Панели построения графиков graphControl и graphControl

На панелях осуществляется прорисовка графиков выбранных профилей, а также отображается название профиля и подпись всех опорных точек, по которым строился график. График автоматически масштабируется, исходя из количества максимальных значений на осях.

2.12.2 Кнопки сохранения графиков savePane1 и savePane2

По нажатию на кнопку ”Сохранит график”, вызывается метод saveGraph, который открывает диалоговое окно сохранения файла и осуществляет сохранение графика в виде изображения.

Рисунок 22 - Сохранение графика в файл

При возникновении конфликта имён, пользователю предлагается заменить существующий файл.

Рисунок 23 - Замена существующего файла

Пользователю предоставляется возможность сохранения файлов в трёх наиболее распространённых растровых графических форматах для дальнейшего использования их пользователем в статьях в качестве демонстрации.

2.12.3 Списки профилей listProf и listProf2

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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.