Метод автоматизированного пополнения словаря ударений

Первые системы синтеза речи. Расстановка ударений в неизвестных словах и занесение слов в словарь. Библиотека классов и пространства имен. Общеязыковая среда исполнения. Автоматическое управление памятью. Формирование эталонного ритмического рисунка.

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

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

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

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

Введение

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

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

Такие условия стали предпосылкой к зарождению риторики - науки об искусстве красноречия [1]. Риторика рассматривалась как важнейшая часть культуры мышления (философского, политического и художественного), и позже вошла в число «избранных наук». Принято считать, что понятие «культуры речи» было впервые упомянуто именно в это время.

В нашем государстве появление понятия «культура речи» связывают с возникновением новой советской интеллигенции в начале XX века, сопровождавшейся борьбой за чистоту русского языка. В этот период в свет выходят труды [2] и [3], сформировавшие базис к последующему приобщению людей к грамотной речи. Кроме того, в советский период существовала цензура в сфере СМИ, что благоприятно сказывалось на общем культурном состоянии страны, активно внедряя в массы прообраз грамотной речи.

За последние десятилетия наблюдается спад общего культурного развития общества, произошли значительные негативные перемены в формировании облика русского языка. В первую очередь эта тенденция касается культуры речи. Демократизация средств массовой информации и глобальная информатизация стали негативно сказываться на уровне литературной образованности общества, так как в этих сферах грамотность практически никак не регулируется. Язык художественной литературы, политики, средств массовой информации влияет на формирование языковой культуры и языкового идеала. Читая газеты и журналы, слушая радио- и телепередачи, человек неосознанно запоминает те или иные языковые нормы, устойчивые (в том числе и заведомо ложные) обороты, которые впоследствии закрепляет через прямое общение, Интернет-переписку и т.п. как эталон речи. Расхождения между литературным языком и существующим в настоящее время многообразием речевых «субкультур» очевидны [4]. Все это вместе взятое ведет к обеднению активного словарного запаса. Язык просто меняется, отражая то, что происходит вокруг нас.

Грамотность играет ключевую роль в публичной речи. Если же оратор допускает многочисленные стилистические и грамматические ошибки, слушатель отвлекается от главной мысли. Нарушается автоматизм восприятия, от чего внимание расходуется не на смысл речи, а на распознавание ее отдельных языковых единиц. Кроме того, неграмотная речь через эстетическое отторжение вызывает отторжение информации как таковой. Поэтому соблюдение языковых норм и правил, преодоление штампов и канцеляризмов, жаргонизации и вульгаризации языка существенно облегчает процесс общения [5].

Правила языка и языковые нормы фиксируются в соответствующих лингвистических словарях. Существует огромное множество словарей, различающихся по определенным типологическим признакам (толковые [6], орфографические [7], орфоэпические [8], синонимические [9] и т.д.). Однако со временем словари утрачивают свою актуальность. Словари нуждаются в постоянном регулировании и обновлении, чтобы их содержание было всегда наиболее подробным и полным. Неполнота электронного словаря - проблема вечная и, к счастью, гораздо легче решаемая, чем неполнота «бумажного» варианта. Необходимо только время и аккуратность человека, который пополняет словарь. Аккуратность нужна, в частности и потому, что ввод каждого нового слова может затронуть уже имеющийся размеченный массив: например имя собственное МиМла «испортит» равноправие нарицательных форм миМла и милаМ [10].

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

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

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

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

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

В данной работе приведено подробное описание разработки такой системы и результаты ее работы.

1. Назначение и область применения

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

1.1 Синтез речи

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

· воспроизведение электронных книг;

· воспроизведение информации в информационно-справочных системах для помощи слепым и немым;

· объявление отправления поездов и авиарейсов;

· выдача информации о каких-либо технологических процессах на производстве.

Синтезаторы речи все еще далеки от совершенства: требуется большой объем памяти для хранения знаний о том, как воспроизводить текст; часто наблюдается нарушение интонации в слишком длинных предложениях; голос синтезатора, как правило, больше напоминает речь робота, чем речь живого человека. Инженеры постепенно решают каждую из этих проблем, улучшая качество таких систем.

Методы синтеза человеческой речи основаны на использовании двух моделей [11]:

1. Модель компилятивного синтеза;

2. Формантно-голосовая модель.

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

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

Решение задачи расстановки ударений поможет системам, работающим с заведомо неизвестным текстом, воспроизводить речь более естественно. Для определения ударения можно использовать заготовленный словарь произношений, содержащий сведения об ударении. Система производит поиск нужного слова, находит указание на ударный слог и осуществляет пошаговое воспроизведение каждой фонемы, соблюдая правильную интонацию. Наиболее известными синтезаторами речи, использующими словари ударений, являются Govorilka, Ice Book Reader и Acapela Alyona.

1.2 Генерация рифм

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

Генераторы рифм можно разделить на два вида:

· добавлению рифмующихся строк к изначально заданным

· подбор рифмы к одному слову

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

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

1.3 Формирование поэтических корпусов

Поэтические произведения являются одним из важнейших источников изучения языка. Однако вследствие трудоемкости обработки таких текстов и их неравномерной доступности исследователи не имеют возможности в полной мере использовать этот материал. Для этих целей следует использовать размеченный корпус поэтических текстов. Такой справочник позволит иметь систематическую картину языковых норм и правил, по которым филологи смогут выявить соответствующие закономерности развития языка. Подавляющее большинство задач с помощью корпуса можно решать эффективно и быстро: во многих случаях получение примеров с заданными свойствами, на сбор которых традиционными методами нужно затратить не один день работы, оказывается возможным буквально за секунды. В других случаях использование корпуса существенно упрощает процедуру получения нужных примеров [12].

Корпус поэтических текстов позволяет изучить следующие аспекты развития языка:

· Система ударений

· История произношения

· История лексики

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

На сайте национального корпуса русского языка (http://ruscorpora.ru) представлена электронная версия корпуса поэтических текстов. Помимо обычной семантической и морфологической разметки, предусмотрена специальная стиховедческая разметка. Так, возможен поиск текстов, написанных амфибрахием, тоническими размерами, 5-стишиями, вольной рифмовкой, твёрдыми формами и т.п.

словарь библиотека память ударение

2. Постановка задачи

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

(1) Буря мглою небо кроет,

Вихри снежные крутя;

То как зверь она завоет,

То заплачет как дитя.

будет иметь следующий ритмический рисунок:

(2) / - / - / - / -

/ - / - / - /

/ - / - / - / -

/ - / - / - /

На примере (2) можно заметить четкость следования друг за другом слабых и сильных слогов. Последующие строфы, как правило, будут раз за разом повторять одну и ту же схему. Именно это чередование ритмических отделов наделяет поэтические тексты мелодичностью, схожей с динамикой музыкальных композиций.

Однако здесь возникает проблема, связанная с автоматизацией ритмического анализа: слабые и сильные позиции не всегда совпадают с безударными и ударными слогами соответственно. То есть, например, в приведенном выше примере, слово «снежные» записано как «/ - /». В слове имеются две сильные позиции. Эти позиции зависят непосредственно от ритмического контекста. В данном случае речь идет о так называемом акценте. Акцент - это интонационная обособленность слога за счет повышения голосового тона, в то время как ударение характеризует слог увеличенной громкостью и мелодической выделенностью [13]. Акцент часто совпадает с ударением, но это не позволяет соотносить эти два понятия друг с другом. Поэтому по схеме (2) нельзя определить формальную постановку ударений в словах.

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

(3) / - / - / - / -

/ - / - - - /

/ / / - / - / -

/ - / - / - /

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

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

3. Разработка технического задания

3.1 Назначение и область применения

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

3.2 Цели и особенности разработки системы

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

3.3 Описание объектов проектирования

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

3.4 Требования к программе

Разработка, отладка и тестирование осуществляются на языке C# в среде программирования Microsoft Visual Studio 2010. Программа обладает интуитивно понятным графическим интерфейсом и может использоваться на любых компьютерах с предустановленной операционной системой Windows.

3.5 Этапы разработки

Исследование объекта проектирования.

- 28 февраля 2013г.;

Разработка методики составления и анализа ритмических рисунков.

- 10 марта 2013г.;

Методика пополнения словаря

- 20 марта 2013г.;

Разработка и отладка программного обеспечения

- 20 апреля 2013г.;

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

- 30 апреля 2013г.;

Оформление дипломного проекта

- 20 мая 2013г.

3.6 Порядок сдачи

Согласно ГОСТ 19301-79 ЕСПД "Порядок и методика испытаний, тестирования. Требования к содержанию и оформлению".

4. Разработка метода

4.1 Токенизация стихотворения

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

За основу взят метод, описанный в [14]. Суть метода заключается в использовании так называемых «граничных маркеров» (token boundaries - TB). Их расположение сигнализирует о конце текущей лексемы и о начале новой. Например, предложение:

(4) «Чудесный жребий совершился: угас великий человек.»

примет вид:

(5) «Чудесный TB жребий TB совершился TB : TB угас TB великий TB человек TB.»

Для составления ритмического рисунка следует исключить из текста знаки пунктуации. Таким образом, (4) примет вид:

(6) «Чудесный TB жребий TB совершился TB угас TB великий TB человек TB»

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

1. Знак пунктуации > TB

2. Пробел > TB

3. TB TB > TB

Пункты 1 и 2 подразумевают игнорирование всех знаков, не являющихся буквами (цифры и прочие символы не подлежат анализу, так как мы рассматриваем ситуацию, в которой стихотворение содержит только буквы и знаки препинания). Пункт 3 осуществляет замену нескольких идущих подряд граничных маркеров на один. Такая необходимость возникает в силу того, что каждый из знаков пунктуации или пробелов, стоящих рядом, после выполнения пунктов 1 и 2 оставляет после себя граничный маркер. Так как граничный маркер предназначен для отделения лексем друг от друга, расположение граничных маркеров рядом друг с другом нерационально.

4.2 Анализ структуры стихотворения

Для дальнейшей работы необходим сбор сведений, позволяющих определить основные характеристики текста:

· количество слов

· количество неизвестных слов

· размер строфы

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

4.3 Формирование ритмического рисунка

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

Введем таблицу обозначений:

«-» - безударная позиция;

«/» - ударный слог;

«=» - вероятностно безударная позиция;

«%» - вероятностно ударная позиция;

«X» - неоднозначная позиция;

«?» - неизвестная позиция.

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

1) В слове одна гласная

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

2) В слове больше одной гласной

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

a. Слово найдено в словаре

Так как словоформы в словаре уже сгруппированы по позиции ударной гласной, можно сразу определить ударение. К примеру, слово «транзистор» будет найдено в категории 2, так как ударение падает на предпоследний слог. Однако теперь требуется знать положение ударения относительно не конца, а начала слова, так как разбор текста происходит слева направо. Следовательно, позицию ударения следует также анализировать слева направо. Это значение вычисляется при помощи следующей формулы

accentLR = vowelNumber - accentRL + 1

где vowelNumber - количество гласных в слове;

accentRL - ударная позиция, отсчитываемая справа налево.

Таким образом, получаем функцию с двумя параметрами:

F(v, a)

Где v - количество гласных в слове;

a - ударная позиция, отсчитываемая слева направо.

Происходит анализ слова по гласным от 1 до v. В случае, когда v = a, в ритмический рисунок записывается «/», означающий ударный слог. В случае, когда v ? a, записывается «-», означающий безударный слог. Например, слово «компьютер» будет иметь вид «- / -».

b. Слово отсутствует в словаре

В схему записывается «?» столько раз, сколько в текущем слове содержится гласных. Например, слово «процессор» будет записано как «? ? ?».

Если встречается пустая строка, означающая новую строфу, в ритмический рисунок также записывается пустая строка.

В результате этой процедуры получаем готовый ритмический рисунок стихотворения.

4.4 Сбор статистических сведений

На данном этапе происходит анализ строф для выявления наиболее часто встречаемых фрагментов. Это необходимо для последующего построения эталонного ритмического рисунка. Суть сбора сведений сводится к подсчету количества нахождений каждого из двух элементов («-» и «/») ритмического рисунка в каждой из позиций. Прочие элементы («X» и «?») при разборе игнорируются системой, так как такие элементы не помогут в построении качественного эталонного ритмического рисунка.

Для оптимальной организации учета данных вводится матрица:

M (Ae)

Где А = {«-», «/»} - алфавит ритмического рисунка (количество строк матрицы);

e - количество элементов в строфе ритмического рисунка (количество столбцов матрицы);

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

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

4.5 Формирование эталонного ритмического рисунка

Система готова к созданию эталонного ритмического рисунка. На основе матрицы (9), система приступает к построению гипотез. В зависимости от соотношения значений столбца, относящихся к одному кортежу, возможны следующие ситуации:

· Если элемент a встречается более одного раза, а элемент b не встретился ни одного раза, в эталон записывается элемент a;

· Если элемент a встречается более чем в 4 раза чаще, чем элемент b, в эталон записывается элемент a;

· Если элемент a встречается менее чем в 4 раза чаще, чем элемент b, в эталон записывается элемент a', означающий то, что в данной позиции наиболее вероятно расположение элемента a, чем элемента b («=» для элемента «-» и «%» для элемента «/»);

· Если элемент a встречается столько же раз, сколько элемент b, в эталон записывается знак неопределенности - «X»;

В результате получаем эталонный ритмический рисунок.

4.6 Расстановка ударений в неизвестных словах и занесение слов в словарь

Система берет для анализа исходный ритмический рисунок. В нем она находит строфы, в которых есть неизвестные слова по наличию в строфе «?» элементов. После этого осуществляется параллельное считывание слов стихотворения и элементов исходного ритмического рисунка (гласная в стихотворении = знак ударности/безударности в ритмическом рисунке). По позиции «?» элемента в исходном ритмическом рисунке система находит элемент эталонного ритмического рисунка, расположенного в аналогичной позиции и пошагово заменяет элементы исходного ритмического рисунка элементами эталона. Например, неизвестное слово «картина», записанное в исходном ритмическом рисунке как «? ? ?», должно определиться как «- / -». По полученному ритмическому рисунку система сможет автономно решить, в какую категорию словаря ударений следует добавить данное слово.

Для этого снова вводится функция (8). Она берет значения своих параметров на основе новой ритмической схемы слова. Для функции слова «клавиатура» параметр v будет равен 5, а параметр a - 4. Далее используется модифицированная формула (7) для определения категории словаря, которую следует дополнить данным словом

(10) accentRL = vowelNumber - accentLR + 1

Полученное значение представляет собой ссылку на соответствующую категорию словаря. Так слово «клавиатура» будет добавлено в группу №2 (предпоследняя ударная гласная).

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

Данная процедура повторяется для всех неизвестных слов в стихотворении.

Последовательность выполнения программы можно представить в виде следующей схемы:

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

Схема 1. Выполнение программы

5. Структура системы

5.1 Структура словаря

Элементы словаря должны быть сгруппированы по позиции ударной гласной, считая с конца (№1 - группа, в которой хранятся слова с последней ударной гласной, №2 - слова с предпоследней ударной гласной и т. д.) для того, чтобы система имела быстрый доступ к соответствующей категории для оперативного пополнения.

Каждая группа должна быть отсортирована по алфавиту. Сортировочную операцию следует проводить после каждого обновления базы.

5.2 Структура стихотворения

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

6. Конструкторско-технологическая часть

6.1 Выбор технологии программирования

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

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

· перечисление условий, при которых выполняется та или иная операция;

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

Кроме набора операций и их последовательности, технология также определяет способ описания проектируемой системы. Для разработки системы, описанной в данной работе, была выбрана технология объектно-ориентированного программирования (ООП). В данном разделе, на основе сведений, взятых из [15] и [16], приводится описание данной технологии.

6.2 История возникновения ООП

С момента изобретения компьютера методологии программирования радикально изменились. В частности на это повлияла возрастающая сложность программ. К примеру, программы для первых компьютеров представляли собой последовательности машинных команд, записанных в двоичном коде с помощью переключения специальных тумблеров. Такой подход оставался вполне работоспособным до тех пор, пока длина программ не стала превышать несколько сотен строк. По мере увеличения размера программ возникла необходимость в новом способе программирования. В результате появился язык ассемблера, позволяющий закодировать машинные инструкции с помощью символов в более понятный для человека вид. Размер программ продолжал увеличиваться, поэтому программистам понадобился еще более мощный язык программирования, позволяющий работать с гораздо более сложными структурами и алгоритмами. Первым широко известным языком программирования оказался Fortran, с которым связывают начало активного развития и применения языков высокого уровня. Несмотря на это, Fortran трудно назвать ясным и понятным языком, позволяющим создавать простые и наглядные программы.

Шестидесятые годы дали толчок развития структурного программирования. Основными средствами его воплощения стали языки C и Pascal. Структурные языки программирования позволили легко создавать достаточно сложные программы. Кроме того, они характеризуются поддержкой изолированных подпрограмм, локальных переменных и богатым выбором управляющих конструкций. Несмотря на то, что структурные языки представляют собой мощное средство, они не позволяют создавать очень крупные проекты.

Каждый новый метод программирования позволял создавать все более сложные и крупные программы, улучшая предыдущие подходы. До изобретения объектно-ориентированного программирования многие проекты достигали границ, за которыми структурный подход уже не работал. Именно для преодоления этих препятствий была создана объектно-ориентированная парадигма.

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

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

6.3 Описание принципов ООП

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

Для поддержки объектно-ориентированного программирования язык должен обладать тремя фундаментальными свойствами: инкапсуляцией, полиморфизмом и наследованием.

Инкапсуляция.

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

Внутри объекта код и данные могут быть закрытыми или открытыми. Закрытый код или данные объекта доступны только из другой части этого же объекта. Иначе говоря, к закрытой части кода или данных невозможно обратиться извне. Если код или данные является открытыми, они доступны из любой части программы. Как правило, открытая часть кода обеспечивает управляемое взаимодействие (интерфейс) с закрытыми элементами объекта.

Полиморфизм.

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

Наследование.

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

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

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

6.4 Особенности реализации

В современных объектно-ориентированных языках программирования объект является значением того или иного класса. Класс, в свою очередь, представляет собой комплексный тип данных, который имеет в своем составе:

Поля данных

Параметры создаваемого объекта, которые определяют его состояние и свойства. Поля представляют собой некоторые переменные и константы, объявленные для использования данным классом.

Методы.

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

6.5 Обоснование выбора технологии

Расширяемость.

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

Ясность.

Объектно-ориентированный код легко поддерживать, так как
он следует весьма жёстким правилам написания кода. Например, когда разработчик дополняет или перерабатывает код, он может легко обнаружить внутреннюю структуру кода и поддерживать код время от времени. Кроме того, классы позволяют абстрагироваться от деталей реализации, обладая достаточно наглядной структурой. Благодаря этому, сопровождением программы может заниматься посторонний программист, не тратя времени на понимание логики.

Эффективность.

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

Надежность.

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

7. Программная платформа и язык программирования

Для решения поставленной задачи необходимо использовать функциональную, эффективную и удобную платформу для разработки, позволяющую применять принципы объектно-ориентированного программирования. В качестве такой платформы была выбрана среда .NET. В этом разделе приводится подробное описание структуры и возможностей .NET. Подробнее с технологией .NET можно ознакомиться в [17], [18], [19] и [20].

7.1 Описание технологии

До начала XXI века применялась методика трансляция программы, заключающаяся в компилировании приложения, написанного в понятном для программиста виде, в последовательность машинных инструкций, понятных процессору. В 2002 году корпорация Microsoft изобретает новую технологию NET. В данной технологии компилирование программы делится на два шага. Сначала программа компилируется в термины машинно-независимого языка (CIL) и сопровождается метаданными - подробными инструкциями о программе и обо всем необходимом для ее успешного выполнения. После этого в дело вступает общеязыковая среда исполнения (CLR), которая переводит управляемый код в набор исполняемых машинных инструкций, обеспечивая различные вспомогательные операции выполнения программы.

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

7.2 Общеязыковая инфраструктура

Для реализации подобной технологии потребовалось создание целой инфраструктуры. Общеязыковая инфраструктура (CLI) - это набор спецификаций, определяющих определенные аспекты технологии .NET:

· Общая система типов (CTS)

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

· Общий промежуточный язык (CIL)

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

· Расширяемые метаданные

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

· Библиотека классов (.NET Framework)

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

· Служба согласования платформ (P/Invoke)

P/Invoke обеспечивает согласованное взаимодействие между .NET Framework и ОС.

· Стандартный формат исполняемых файлов

В заголовке файла имеется бит, который указывает на то, что файл относится к .NET. Обнаружив этот бит, загрузчик обращается к среде CLR, которая осуществляет последующую работу с файлом.

7.3 Особенности технологии

7.3.1 Библиотека классов и пространства имен

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

Все стандартные пространства имен порождены от пространства System, в котором описан базовый класс Object. В пространстве System определены значащие и ссылочные типы данных, события, интерфейсы и атрибуты.

До технологии .NET практически все промышленные операционные системы строились из функций API (Application Program Interface -- интерфейс прикладных программ). Каждая из этих функций в отдельности решала свои небольшие локальные задачи. В системах с .NET роль API-функций играют объекты.

7.3.2 Общеязыковая среда исполнения

Общеязыковая среда исполнения (CLR) играет ключевую роль в организации всей технологии. Она поддерживает строгую систему правил, которой должен следовать промежуточный язык. Этот язык представляет собой код, который называется управляемым. Следует отметить, что входной поток данных может представлять собой и неуправляемый код, а также управляемый и неуправляемый одновременно. Неуправляемые фрагменты входных данных являются обычными машинными инструкциями, которые без изменений поступают в процессор. Указателем на то, что входной поток содержит управляемый код, является специальный бит в заголовке файла. Управляемый код порождает объекты с управляемым временем жизни. Такие объекты автоматически уничтожаются, когда надобность в них отпадает. Это свойство наделяет среду CLR способностью борьбы с утечками памяти, что благоприятно сказывается на производительности программ.

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

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

7.3.3 Автоматическое управление памятью

Автоматическое управление памятью есть один из сервисов, которые CLR предоставляет во время управляемого исполнения. При сборе мусора происходит освобождение памяти. Это избавляет разработчика от необходимости писать соответствующий код. Благодаря автоматическому управлению памятью решаются типичные проблемы, такие как утечка памяти или попытка освободить уже уничтоженный объект.

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

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

Когда сборщик мусора .NET выбирает объекты для удаления из кучи, он не проверяет все объекты подряд. Для повышения производительности сбора мусора все объекты в управляемой куче разбиты на группы - поколения. Смысл такой группировки прост: чем дольше объект существует в управляемой куче, тем больше вероятность того, что он потребуется и в дальнейшем. В то же время существует значительная вероятность того, что недавно появившиеся объекты быстро перестанут быть нужными. Основываясь на этой концепции, каждый объект относят к одному из следующих поколений:

· поколение 0 - недавно появившиеся объекты, которые еще не проверялись сборщиком мусора;

· поколение 1 - объекты, которые пережили одну проверку;

· поколение 2 - объекты, пережившие более чем одну проверку.

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

7.3.4 Сборки

Сборки - фундаментальные части программ для .NET Framework. Сборка выполняет следующие функции:

1) Сборка содержит код, который выполняет CLR. СIL-код в файле формата РЕ не будет исполняться, если не имеет связанного с ним манифеста сборки. Сборка может иметь только одну точку входа.

2) Сборка формирует границы защиты. Сборка есть блок, в котором запрашиваются и выдаются разрешения.

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

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

5) Сборка определяет границы контроля версий. Сборка представляет собой минимальный блок в CLR, все типы и ресурсы которого имеют ту же версию, что и версия блока.

6) Сборка определяет единицу распространения. В момент старта должны быть загружены только первоначально вызванные сборки. Другие сборки, такие как ресурсы локализации или сборки, содержащие вспомогательные классы, могут загружаться по требованию. Это упрощает приложения и делает их меньше, что облегчает загрузку из Интернета.

7) Сборка является единицей, для которой поддерживается параллельное выполнение.

8) Сборки могут быть статическими и динамическими. Статические сборки включают типы .NET Framework (интерфейсы и классы), а также нужные ресурсы. Статические сборки сохраняются на диске в виде РЕ-файлов. Вы можете использовать .NET Framework для создания динамических сборок, которые не сохраняются на диске и создаются (и запускаются) непосредственно в памяти. После выполнения динамическую сборку можно сохранить на диске.


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

  • Структура платформы Java. Этапы написания, компиляции и исполнения программы в C++. Алфавит языка и числовые константы. Преобразование из строкового представления с помощью типов-оболочек. Автоматическое управление памятью. Набор регистров процессора.

    лекция [419,8 K], добавлен 01.05.2014

  • Необходимость создания словаря по технологии для школьников. Основные этапы, требования и особенности создания электронного словаря. Использование морфологического анализа для оформления и дизайна. Принципы создания веб-страниц в Microsoft Publisher.

    творческая работа [2,0 M], добавлен 17.11.2009

  • Разработка программы на языке программирования C++ с функциями считывания словаря в начале работы программы из текстового файла и записи словаря в файл перед завершением работы. Основные элементы программного продукта: данные абонента телефонной сети.

    контрольная работа [12,9 K], добавлен 07.04.2015

  • Словарь — книга, содержащая собрание слов, расположенных по определённому принципу. Электронный словарь – компьютерная база данных, содержащая особым образом закодированный словарные статьи. Возможности электронных словарей, достоинства и недостатки.

    статья [178,0 K], добавлен 11.11.2010

  • Обзор технологии OpenStack, область ее применения. Реализация библиотеки классов. Реализация базовых классов и интерфейсов архитектуры. Создание виртуального сервера. Интеграция разработанной библиотеки классов и архитектура проектного решения.

    дипломная работа [1,0 M], добавлен 09.08.2016

  • Постановка задачи синтеза системы управления. Применение принципа Максимума Понтрягина. Метод аналитического конструирования оптимальных регуляторов. Метод динамического программирования Беллмана. Генетическое программирование и грамматическая эволюция.

    дипломная работа [1,0 M], добавлен 17.09.2013

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

    реферат [387,2 K], добавлен 01.08.2009

  • Необходимость разработки технологий для оптимального использования компьютерных возможностей. Эффективность гипертекста в экономике на примере словаря экономических терминов, возможности Excel, ознакомление с языком программирования Visual Basic.

    курсовая работа [391,3 K], добавлен 14.01.2009

  • Главная задача компьютерной системы. Виртуальные адресные пространства нескольких программ. Классификация методов распределения памяти. Зависимость загрузки процессора от числа задач и интенсивности ввода-вывода. Схема функционирования кэш-памяти.

    презентация [2,2 M], добавлен 14.11.2012

  • Анализ основных этапов решения задачи синтеза регуляторов в классе линейных стационарных систем. Нахождение оптимальных настроек регулятора и передаточной функции замкнутой системы. Изучение состава и структуры системы автоматизированного управления.

    контрольная работа [3,0 M], добавлен 11.05.2012

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