Система семантического разбора для естественно-языковых текстов

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

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

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

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

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

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

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

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

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

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

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

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

11. ОРГАНИЗАЦИОННО-ЭКОНОМИЧЕСКАЯ ЧАСТЬ

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

Издержки - размер ресурсов (для упрощения измеренный в денежной форме), использованных в процессе хозяйственной деятельности за определённый временной этап. Возможно и более детальное описать типы затрат.

По влиянию на себестоимость конечного продукта издержки можно разделить:

– прямые издержки;

– косвенные издержки.

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

– переменные издержки;

– постоянные издержки.

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

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

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

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

Совокупность прямых (переменных) и косвенных (постоянных) затрат составляет валовые затраты.

ВЗ = Зпост + Зпер, (11.1)

где ВЗ - валовые издержки;

Зпост - постоянные издержки;

Зпер - переменные издержки.

Переменные затраты, связанные с созданием программного продукта рассчитываются по формуле:

Зпер = Зэкспл + Зопл + Звспом, (11.2)

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

Зопт - совокупные затраты, связанные с оплатой труда разработчика программного продукта, грн.;

Звспом - затраты на вспомогательные материалы, грн.

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

Таблица 11.1

Характеристика технических средств труда, используемых в практике

Тип технического средства

Наименование технического средства труда

Количество технических средств

Цена ед. техн. средства труда, грн.

Общая стоимость

Потребляемая мощность за час, кВт

Процессор

Ядро: Sargas

Частота работы процессора: 2.7ГГц

Частота шины: 2000МГц

Кэш L1: 128кб

Кэш L2: 1024Кб

Модель: LE-140

Количество ядер: 1

Модельный ряд: Sempron

proizvoditel-: AMD

Сокет: AM3

Гарантия: 3 года

1

298,00

298,00

0,3

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

Производитель: Biostar

USB: есть

Количество слотов для оперативной памяти: 2

Процессорный разъём: Socket AM3

Тип оперативной памяти: DDR3

Дополнительная информация: Realtek ALC662 6-Channel HD Audio

Модель: N68S3+

Поддерживаемая частота оперативной памяти: 800/1066/1333МГц

Разъём питания: 24 pin

SATA: 4 шт

Сетевой адаптер (LAN): Realtek RTL8201CL - 10/100

Слоты расширения: 2 x Слот PCI, 1 x Слот PCI-E x16

Гарантия: 3 года

1

339,00

339,00

Оперативная память

Тип памяти DDR3

Объем памяти 1 ГБ

Частоты работы памяти 1333 МГц

Стандарт PC3-10666

Производитель Goodram

1

130,00

130,00

Видеокарта

Производитель: Palit

Частоты работы памяти: 700МГц

Графический процессор: Nvidia GeForce

Интерфейс: PCI Express

Объем памяти: 256мбГб

Разъёмы: D-sub, DVI

Шина памяти: 64бит

Тип памяти: DDR2

Тип товара: Видеокарта

Артикул: (NE2G84S00826-2186F)

Частоты работы GPU: 567МГц

Модель: NVIDIA GEFORCE PALIT 8400GS

Гарантия: 3 года

1

253,00

253,00

Винчестер

Производитель: WD

Модель: WD1600AAJS

Модельный ряд: Caviar Blue

Объем памяти: 160Гб

Форм-фактор: 3.5

Объем буферной памяти: 16Мб

Скорость вращения шпинделя: 7200об/мин

Среднее время доступа, чтения: 8.9мс; Среднее время задержки: 4.16мс

Тип разъема: SATA

Тип товара: Винчестер

Уровень шума работы: 31дБ

Гарантия: 3 года

1

314,00

314,00

Система охлаждения

Производитель: Deepcool

Модель: BETA 10

Размеры кулера (ШхВxГ): 105x76x95мм

Размеры вентилятора (ДхШxВ): 92x92x32мм

Скорость вращения: 2200об/мин

Socket: AM2, AM2+, AM3, S754, S939, S940

Уровень шума: 25дБ

Вес: 368кг

Материал радиатора: алюминий

Тип товара: Вентилятор для процессора

1

74,00

74,00

Устройства ввода

Мышь: А4-Tech

Клавиатура: Gembird

1

110,00

110,00

Блок питания

Производитель: Gembird

защита от короткого замыкания: есть

защита от перенапряжения: есть

Количество разъемов 4-pin CPU: 1

Количество разъемов 4-pin Floppy: 1; Количество разъемов 4-pin IDE: 4

Модель: CCC-PSU1

Мощность: 300Вт

Тип разъема для материнской платы: 20+4 pin

Версия ATX12V: v1.3

Тип коррекции коэффициента мощности (PFC): пассивный

Гарантия: 12 месяцев

1

128,00

128,00

Корпус

Производитель: Grand

Модель: 2106B

Тип корпуса: Midi-Tower

1

211,00

211,00

-

Монитор

Производитель: Acer

Диагональ: 19"

Контрастность: 12000000:1 (DC)6 Максимальное разрешение: 1366x768

Модель: V193HQLAOB

Размеры: 444x334.96x176.5мм

Угол обзора: 170/160°

Время отклика: 5мс

Гарантия: 3 года

1

797,00

797,00

0,4

Итого

2654,00

0,7

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

Зэкспл = См * Тразр, (11.3)

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

Тразр - время, затраченное на разработку данного проекта, час.

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

Стоимость машино-часа определяется по формуле:

См = А + Зэ + Зпроч, (11.4)

где А - размер амортизационных отчислений, грн.;

Зэ - издержки на оплату израсходованной электроэнергии, грн./ч.;

Зпроч - прочие издержки, связанные с обслуживанием оборудования, грн.

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

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

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

А = , (11.5)

где КВ - капиталовложения в проект (стоимость оборудования, используемого для разработки программного продукта), грн.

Тпл - плановый срок службы оборудования, час.

Плановый срок службы оборудования рассчитывается по формуле:

Тпл = tсм * Драб * Ссл, (11.6)

где tсм - продолжительность смены (8 часов);

Драб - число рабочих дней в году (Драб = 260 дней);

Ссл - срок службы оборудования, годы (Nпл = 5 лет).

Зная продолжительность смены, число рабочих дней в году и срок службы оборудования, рассчитаем плановый срок службы оборудования, используя формулу (11.6):

Тпл = 8 * 260 * 5 = 10400 (часов)

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

А = 2654 / 10400 = 0,2551 (грн./час)

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

Зопл = АэКзагр, (11.7)

где Аэ - тариф 1кВт час электроэнергии (0,3167 грн./(кВт·ч.));

Ni - мощность i-го токоприемника, кВт;

КПДi - коэффициент полезного действия i-го токоприемника (0,96);

Кзагр - коэффициент загрузки i-го токоприемника (0,8).

Учитывая мощность компьютера N (0,7 кВт), зная стоимость одного киловатт-часа электроэнергии A(0, 3167 грн./(кВт·ч.)), и приняв коэффициент полезного действия компьютера равным 0,96, а коэффициент загрузки компьютера - 0.8, рассчитаем затраты на оплату электроэнергии, используя формулу (11.7):

Зопл = 0,3167 * (0,7 / 0,96) * 0,8 = 0,1847 (грн./час)

Прочие издержки, связанные с обслуживанием оборудования принимаются равными 0,09 (грн./час).

Зная сумму амортизационных отчислений, сумму издержек на оплату электроэнергии и прочие затраты, рассчитаем стоимость машино-часа, используя формулу (11.4):

См = 0,2551 + 0,1847 + 0,09 = 0,5298 (грн./час)

Для расчета издержек, связанных с эксплуатацией аппаратного обеспечения, нужно рассчитать время, затраченное на разработку данного проекта (Тразр). Период разработки приходится на май 2011г., что, с учетом пятидневной рабочей недели, составляет восемнадцать дней. Работа велась в среднем 8 ч. в день. Следовательно, общее время разработки составило Тразр=22*8=176ч. Рассчитаем сумму издержек, связанных с эксплуатацией аппаратного обеспечения, используя формулу (11.3):

Зэкспл = 0,5298 * 176 = 93,24 (грн.)

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

m = Оср / Тмес, (11.8)

где Оср - должностной оклад разработчика (2600 грн.);

Тмес - допустим, месячный баланс рабочего времени (168 часов).

Рассчитаем среднечасовую тарифную ставку на оплату труда, используя формулу (11.8):

m = 2600 / 168 = 15,42 (грн./час)

Издержки на оплату труда разработчика программного продукта включают его заработную плату и отчисления на социальные нужды в размере 40% от заработной платы. Данную величину можно рассчитать по формуле:

Зопл = mТразр + 0,4mТразр, (11.9)

где m - среднечасовая тарифная ставка заработной платы разработчика (21,42 грн/час);

Тразр - общее время разработки и реализации продукта (часов).

Рассчитаем совокупные издержки на оплату труда, используя формулу (11.9):

Зопл = 15,42 * 176 + 0,4 * 21,42 * 176 = 4239,96 (грн.)

Издержки на вспомогательные материалы по факту составляет 180 грн.

Зная эксплуатационные издержки, издержки на заработную плату и вспомогательные материалы, рассчитаем прямые (переменные) издержки, используя формулу (11.2):

Зпер = 93,24 + 4239,96 + 180 = 4513,20 (грн.)

Накладные расходы принимаются равными 130% от прямых издержек. Зная прямые (переменные издержки), рассчитаем косвенные (постоянные) издержки:

Зпост = 4513,20 * 1,3 = 5867,17 (грн.)

Зная переменные и постоянные издержки, рассчитаем валовые издержки, используя формулу (13.1):

ВИ = 4513,20 + 5867,17 = 10380,37 (грн.)

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

Оптовая цена определяется по формуле:

Цопт = ВИ + П, (11.10)

где П - прибыль (грн.);

ВИ - валовые издержки.

В свою очередь прибыль определяем по формуле:

(11.11)

где Р - уровень рентабельности продукта (выражается в %).

Принимая уровень рентабельности равным 27% и валовые издержки, рассчитаем прибыль, используя формулу (11.10):

П = 10380,37 * 0,27 = 2802,70 (грн.)

Зная валовые издержки и прибыль, рассчитаем оптовую цену созданного ПП на рынке, используя формулу (11.9):

Цопт = 10380,37 + 2802,70 = 13183,07 (грн.)

Оптово-отпускная цена рассчитывается с учетом НДС и определяется по формуле:

(11.12)

Зная оптовую цену ПП и НДС, рассчитаем оптово-отпускную цену ПП, используя формулу (11.11):

Цотп = 13183,07 + (13183,07 * 0,22) = 16083,34 (грн.)

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

Стоимость подобных систем изложены в таблице 11.2.

Таблице 11.2

Стоимость подобных систем

Наименования программного продукта

Цена(грн)

RCO Fact Extractor Desktop

27913

ИАС "АРИОН"

32421

Morphology Professional SDK

74615

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

ВЫВОДЫ

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

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

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

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

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

Особое внимание уделяется пожарной безопасности, так как пожары сопряжены с опасностью для человеческой жизни и большими материальными потерями. Немаловажным аспектом являются требования к оборудованию. Такие требование как поддержка чистоты ЭВМ от накопления пыли и грязи, выяснены стандарты монитора и требования к настройкам яркости, контраста и других параметров, изложенных в данном разделе.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1._SyTech - разработка программного обеспечения: аналитические системы, электронный документооборот, корпоративные системы, информационные порталы //http://sytech.ru.

2._TextAnalyst 2.0 - персональная система автоматического анализа текста //http://www.analyst.ru.

3._Сулейманов Д.Ш., Аюпов М. Семантический анализ естественно-языковых текстов в вопросно-ответном режиме, 2003.

4._Андрусенко Т.Б. Лингвистические структуры в компьютерных учебных средах. - Киев: Наукова Думка, 1994. - 160 с.

5. Бухараев Р.Г., Сулейманов Д.Ш. Семантический анализ в вопросно-ответных системах. - Казань: Казан, 1990. - 124 с.

6._Автоматическая Обработка Текста //http://www.aot.ru.

7._Википедия: Нина Николаевна Леонтьева - русский лингвист, специалист по структурной и прикладной лингвистике (ПЛ), преподаватель //http://ru.wikipedia.org/wiki/Леонтьева, Нина Николаевна

8._Википедия: Сyc - проект по созданию объёмной онтологической базы знаний //http://ru.wikipedia.org/wiki/Cyc.

9._Тематический анализ для естественно-языковых текстов //http://www.dialog-21.ru/dialog2006/materials/html/Gladun.htm.

10._Википедия: SNePS - система представлния знаний, рассуждения и действия //http://ru.wikipedia.org/wiki/SNePS.

11._Леонтьева Н.Н. Система французско-русского автоматического перевода (ФРАП): лингвистические решения, состав, реализация. Проблемы создания системы автоматического перевода: Сб. научн. трудов МГПИИЯ им. М. Тореза. - М., 1987. - С. 6 - 25.

12._Кудряшова И.М. О семантическом словаре в системе ФРАП: Сб. научн. трудов. - М.: МГПИИЯ им. М. Тореза, 1986. - 8 с.

13._Леонтьева Н.Н. ПОЛИТекст: информационный анализ политических текстов: Сб. НТИ. - 1995.

14. Леонтьева Н.Н, Кагиров И.А. Автоматический синтаксический анализ русских текстов, - Санкт-Петербург, 2003.

15._Ножова И. Морфологическая и синтаксическая обработка текста (модели и программы): Диссертация. - 2003.

16._Сокирко А. Морфологические модули //http://aot.ru.

17._Сокирко А. Семантические словари в автоматической обработке текста (по материалам системы ДИАЛИНГ), Диссертация. - 2003

18._Бессмертный И.А. Искусственный интеллект: Учебное пособие. - СПб., 2010.

19._Каригов И.А., Леонтьева Н.Н. Модуль синтаксического анализа для литературного русского языка. - СПб: Спирант, 2008.

20._Ножков И.М. Морфологическая и синтаксическая обработка текста (модели и программы). - М., 2003.

21. Сегалович И. Реализация словаря на основе разряженой хэш-таблицы.

семинара Dialog. - М., 1995

ПРИЛОЖЕНИЕ А

Техническое задание

А.1 Общие сведения

Полное наименование дипломного проекта - "Система семантического разбора естественно-языковых текстов".

Дипломный проект проектируется студентом пятого курса Государственного университета информатики и искусственного интеллекта, факультета Современных компьютерных информационных технологий, группы ИС-06а(с) Дордолан Виталием Юрьевичем.

Основанием для создания программного продукта является задание, выданное кафедрой cистем искусственного интеллекта (СИИ) факультета СКИТ ГУИиИИ, согласно учебного плана специальности "Интеллектуальные системы принятия решений" (ИСПР).

Плановый срок начала работы по созданию дипломного проекта: 23.03.2010.

Срок сдачи работы: 17.06.2011

А.2 Назначение и цели создания проекта

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

Целью данной работы является изучение понятия семантики; разработка алгоритма работы системы на основе семантического анализа; реализация алгоритма на языке программирования.

А.3 Требования к проекту

А.3.1 Требования к интерфейсу

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

А.3.2 Требования к интерактивности

Согласно заданию, к интерактивности проекта выдвигаются следующие требования:

– добавление/редактирование/удаление текста;

– добавление словарей;

– вывод справочной информации;

– вывод результатов разбора и анализов системы.

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

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

А.3.3 Требования к видам обеспечения

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

А.3.3.1 Требования к программному обеспечению

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

– операционная система - Microsoft Windows XP;

– архиватор WinRar;

– уставленная машинно-независимая платформа .NET Framework 3.5;

– текстовой редактор.

Требования к программному обеспечению подразумевает наличие ОС Windows XP и выше.

А.3.3.2 Требования к техническому обеспечению

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

а) процессор CPU - Pentium I и выше;

б) объем памяти RAM не менее 32 Мб;

в) свободное дисковое пространство около 100 Mб;

г) графический адаптер SVGA;

д) SVGA-монитор с разрешением не менее 800Ч600.

ПРИЛОЖЕНИЕ Б

ЭКРАННЫЕ ФОРМЫ

Рисунок Б.1 - Форма редактора входного текста

Рисунок Б.2 - Форма графематического разбора

Рисунок Б.3 - Форма морфологического анализа

Рисунок Б.4 - Форма статистического анализа

Рисунок В.5 - Форма семантического построения

ПРИЛОЖЕНИЕ В

ЛИСТИНГ ПРОГРАММЫ

//************************************************************

// Programm

//************************************************************

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

using System.Text;

using MorphologyModule;

namespace SemanticSystem

{

static class Program

{

/// <summary>

/// Главная точка входа для приложения.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}

}

}

namespace LinguisticalModule

{

public enum PartSpeech { Noun, Ajective, Verb, End, Separator };

public struct OnPartsSpeech

{

public PartSpeech Patr;

public int iAnword;

}

public enum Discripts { RLE, LLE, DC, GRAUNK, PUN };

public struct Lemm

{

public string Text;

public Discripts Discript;

public string Morph;

public byte MorphCid;

}

public struct TopGraph //Граф

{

public int id;

public string Top; //Вершина

public List<string> Relations; //Отношение

public List<int> Relationships; //Связи

}

class Ling

{

char[] DEL = { (char)0x9, (char)0xA, (char)0xB, (char)0xC,

(char)0xD, (char)0x20, (char)0xA0, (char)0x2000,

(char)0x2001, (char)0x2002, (char)0x2003,

(char)0x2004, (char)0x2005, (char)0x2006,

(char)0x2007, (char)0x2008, (char)0x2009,

(char)0x200A, (char)0x200B, (char)0x3000,

(char)0xFEFF, };

char[] SIG = { '.', ',', '-', '!', '?', ';', ':', '(', ')'};

char[] RLE = { 'й','ц','у','к','е','н','г','ш','щ','з','х','ъ','ф',

'ы','в','а','п','р','о','л','д','ж','э','я','ч','с',

'м','и','т','ь','б','ю','ё',

'Й','Ц','У','К','Е','Н','Г','Ш','Щ','З','Х','Ъ','Ф',

'Ы','В','А','П','Р','О','Л','Д','Ж','Э','Я','Ч','С',

'М','И','Т','Ь','Б','Ю','Ё' };

char[] LLE = { 'q','w','e','r','t','y','u','i','o','p','a','s','d',

'f','g','h','j','k','l','z','x','c','v','b','n','m',

'Q','W','E','R','T','Y','U','I','O','P','A','S','D',

'F','G','H','J','K','L','Z','X','C','V','B','N','M' };

char[] DC = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };

char[] END = { '.','!','?'};

public Lemm LemmDiscript(string text)

{

Lemm lemm = new Lemm();

lemm.Text = text;

int rle, lle, dc;

rle = text.IndexOfAny(RLE);

lle = text.IndexOfAny(LLE);

dc = text.IndexOfAny(DC);

if ((dc == -1) & (lle == -1) & (rle != -1))

{

lemm.Discript = Discripts.RLE; //RLE

}

else if ((rle == -1) & (dc == -1) & (lle != -1))

{

lemm.Discript = Discripts.LLE; //LLE

}

else if ((rle == -1) & (lle == -1) & (dc != -1))

{

lemm.Discript = Discripts.DC; //DC

}

else

{

if (text.IndexOfAny(SIG) != -1)

{

lemm.Discript = Discripts.PUN; //PUN

}

else lemm.Discript = Discripts.GRAUNK; //GRAUNK

}

return lemm;

}

public Queue<Lemm> GraphematicAnalysis(string Text) //

Графематический разбор

{

Queue<Lemm> TextLemm = new Queue<Lemm>();

int starti = 0;

int deli = 0, sigi = 0;

do

{

deli = Text.IndexOfAny(DEL, starti);

sigi = Text.IndexOfAny(SIG, starti);

if (deli < sigi)

{

if (deli == starti)

{

starti++;

}

else if (deli > starti)

{

TextLemm.Enqueue(LemmDiscript(Text.Substring(starti, deli - starti)));

starti = deli + 1;

}

else if (deli == -1)

{

if (sigi > starti)

{

TextLemm.Enqueue(LemmDiscript(Text.Substring(starti, sigi - starti)));

starti = sigi;

}

else if (sigi == starti)

{

TextLemm.Enqueue(LemmDiscript(Text.Substring(starti, 1)));

starti++;

}

}

}

else if (sigi < deli)

{

if (sigi == starti)

{

TextLemm.Enqueue(LemmDiscript(Text.Substring(starti, 1)));

starti++;

}

else if (sigi > starti)

{

TextLemm.Enqueue(LemmDiscript(Text.Substring(starti, sigi - starti)));

starti = sigi;

}

else if (sigi == -1)

{

if (deli > starti)

{

TextLemm.Enqueue(LemmDiscript(Text.Substring(starti, deli - starti)));

starti = deli;

}

else if (deli == starti)

{

starti++;

}

}

}

else if (sigi == deli)

{

if (Text.Length == starti)

{

TextLemm.Enqueue(LemmDiscript(Text.Substring(starti, 1)));

starti++;

}

else if (Text.Length > starti)

{

TextLemm.Enqueue(LemmDiscript(Text.Substring(starti, Text.Length -

starti)));

starti = Text.Length + 1;

}

}

}

while (Text.Length > starti);

return TextLemm;

}

public Queue<Lemm> MorphologicAnalysis(Queue<Lemm> TextLemm)

{

Lemm Mlemm;

StringBuilder strb = new StringBuilder();

Mcr.Tids ts = new Mcr.Tids();

Mcr.Tinlexdata data = new Mcr.Tinlexdata();

Mcr.InitMcr();

Mcr.LoadMcr("zal.mcr");

for (int i = 0; i != TextLemm.Count; i++)

{

if ( TextLemm.Peek().Discript == Discripts.RLE )

{

Mcr.FindWID(TextLemm.Peek().Text, ref ts);

Mcr.GetWordById(ts.ids[0], false, true, ref data);

Mlemm.Text = TextLemm.Peek().Text;

Mlemm.Discript = TextLemm.Peek().Discript;

Mlemm.MorphCid = data.inlex[0].cid;

Mlemm.Morph = Mcr.ConstIdToStr(data.inlex[0].cid) + " " +

Mcr.VarIdToStr(data.inlex[0].cid, data.inlex[0].vid);

TextLemm.Enqueue(Mlemm);

Mlemm = TextLemm.Dequeue();

}

else

{

TextLemm.Enqueue(TextLemm.Dequeue());

}

}

return TextLemm;

}

public List<string> NounsSeparation(Queue<Lemm> TextLemm) // Все

Существительна

{

Mcr.Tids ts = new Mcr.Tids();

Mcr.Tinlexdata data = new Mcr.Tinlexdata();

Mcr.InitMcr();

Mcr.LoadMcr("zal.mcr");

List<string> list = new List<string>();

for (int i = 0; i != TextLemm.Count; i++)

{

if (TextLemm.Peek().Discript == Discripts.RLE &

TextLemm.Peek().MorphCid >= 1 & TextLemm.Peek().MorphCid <= 15)

{

Mcr.FindWID(TextLemm.Peek().Text, ref ts);

Mcr.GetWordById(ts.ids[0], false, true, ref data);

list.Add(data.inlex[0].anword);

TextLemm.Enqueue(TextLemm.Dequeue());

}

else

{

TextLemm.Enqueue(TextLemm.Dequeue());

}

}

List<string> list2 = new List<string>();

if (list.Count > 0)

{

int j = 0;

bool b;

do

{

list2.Add(list.ElementAt(0));

do

{

b = list.Remove(list2.ElementAt(j));

}

while (b == true);

j++;

}

while (list.Count > 0);

}

list.Clear();

return list2;

}

public List<string> AdjectivesSeparation(Queue<Lemm> TextLemm) //

Прилагательные

{

Mcr.Tids ts = new Mcr.Tids();

Mcr.Tinlexdata data = new Mcr.Tinlexdata();

Mcr.InitMcr();

Mcr.LoadMcr("zal.mcr");

List<string> list = new List<string>();

for (int i = 0; i != TextLemm.Count; i++)

{

if (TextLemm.Peek().Discript == Discripts.RLE &

((TextLemm.Peek().MorphCid == 20)|

(TextLemm.Peek().MorphCid == 23)|

(TextLemm.Peek().MorphCid == 24)|

(TextLemm.Peek().MorphCid == 25)))

{

Mcr.FindWID(TextLemm.Peek().Text, ref ts);

Mcr.GetWordById(ts.ids[0], false, true, ref data);

list.Add(data.inlex[0].anword);

TextLemm.Enqueue(TextLemm.Dequeue());

}

else

{

TextLemm.Enqueue(TextLemm.Dequeue());

}

}

List<string> list2 = new List<string>();

if (list.Count > 0)

{

int j = 0;

bool b;

do

{

list2.Add(list.ElementAt(0));

do

{

b = list.Remove(list2.ElementAt(j));

}

while (b == true);

j++;

}

while (list.Count > 0);

}

list.Clear();

return list2;

}

public List<string> VerbsSeparation(Queue<Lemm> TextLemm) // Все Глаголы

{

Mcr.Tids ts = new Mcr.Tids();

Mcr.Tinlexdata data = new Mcr.Tinlexdata();

Mcr.InitMcr();

Mcr.LoadMcr("zal.mcr");

List<string> list = new List<string>();

for (int i = 0; i != TextLemm.Count; i++)

{

if (TextLemm.Peek().Discript == Discripts.RLE &

TextLemm.Peek().MorphCid >= 40 & TextLemm.Peek().MorphCid <= 51)

{

Mcr.FindWID(TextLemm.Peek().Text, ref ts);

Mcr.GetWordById(ts.ids[0], false, true, ref data);

list.Add(data.inlex[0].anword);

TextLemm.Enqueue(TextLemm.Dequeue());

}

else

{

TextLemm.Enqueue(TextLemm.Dequeue());

}

}

List<string> list2 = new List<string>();

if (list.Count > 0)

{

int j = 0;

bool b;

do

{

list2.Add(list.ElementAt(0));

do

{

b = list.Remove(list2.ElementAt(j));

}

while (b == true);

j++;

}

while (list.Count > 0);

}

list.Clear();

return list2;

}

private int ScanPart(string str, List<TopGraph> topGraph)

{

Mcr.Tids ts = new Mcr.Tids();

Mcr.Tinlexdata data = new Mcr.Tinlexdata();

Mcr.InitMcr();

Mcr.LoadMcr("zal.mcr");

Mcr.FindWID(str, ref ts);

Mcr.GetWordById(ts.ids[0], false, true, ref data);

int iPart = -1;

for (int i = 0; i != topGraph.Count; i++)

{

if (topGraph.ElementAt(i).Top == data.inlex[0].anword)

iPart = i;

}

return iPart;

}

private int ScanPart(string str, List<string> list)

{

Mcr.Tids ts = new Mcr.Tids();

Mcr.Tinlexdata data = new Mcr.Tinlexdata();

Mcr.InitMcr();

Mcr.LoadMcr("zal.mcr");

Mcr.FindWID(str, ref ts);

Mcr.GetWordById(ts.ids[0], false, true, ref data);

int iPart = -1;

for (int i = 0; i != list.Count; i++)

{

if (list.ElementAt(i) == data.inlex[0].anword)

iPart = i;

}

return iPart;

}

public List<TopGraph> SyntaxSemanticAnalysis(Queue<Lemm>

TextLemm)

{

TopGraph Top = new TopGraph();

List<TopGraph> topGraph = new List<TopGraph>(); // Граф

List<string> list = new List<string>();

List<string> listVerb = new List<string>();

list.AddRange(NounsSeparation(TextLemm));

int Ni = list.Count; // до данного значения элементы являются

существительными

// полсе следуют прилагательные

list.AddRange(AdjectivesSeparation(TextLemm));

listVerb.AddRange(VerbsSeparation(TextLemm)); //выделения глаголов

for(int i=0; i!=list.Count; i++) //записываем все вершины графа(сети)

{

Top.id = i;

Top.Top = list.ElementAt(i);

topGraph.Add(Top);

}

//Транспанируем текст в структуру TextOnParts выделяя главные

элементы

List<OnPartsSpeech> TextOnParts = new List<OnPartsSpeech>();

OnPartsSpeech PS = new OnPartsSpeech();

for (int i = 0; i!=TextLemm.Count; i++)

{

if (TextLemm.ElementAt(i).Discript == Discripts.RLE & // Noun

TextLemm.ElementAt(i).MorphCid >= 1 &

TextLemm.ElementAt(i).MorphCid <= 15)

{

PS.Patr = PartSpeech.Noun;

PS.iAnword = ScanPart(TextLemm.ElementAt(i).Text, topGraph);

TextOnParts.Add(PS);

}

else if (TextLemm.ElementAt(i).Discript == Discripts.RLE & // Ajective

(TextLemm.ElementAt(i).MorphCid == 20) |

(TextLemm.ElementAt(i).MorphCid == 23) |

(TextLemm.ElementAt(i).MorphCid == 24) |

(TextLemm.ElementAt(i).MorphCid == 25))

{

PS.Patr = PartSpeech.Ajective;

PS.iAnword = ScanPart(TextLemm.ElementAt(i).Text, topGraph);

TextOnParts.Add(PS);

}

else if (TextLemm.ElementAt(i).Discript == Discripts.RLE & // Verb

TextLemm.ElementAt(i).MorphCid >= 40 &

TextLemm.ElementAt(i).MorphCid <= 51)

{

PS.Patr = PartSpeech.Verb;

PS.iAnword = ScanPart(TextLemm.ElementAt(i).Text, listVerb);

TextOnParts.Add(PS);

}

}

PS.Patr = PartSpeech.End; //конец текста

PS.iAnword = -1;

TextOnParts.Add(PS);

//Транспанируем структуру TextOnParts

TopGraph TG = new TopGraph(); // для изменений

List<string> LR = new List<string>();

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

if (TextOnParts.Count >= 0)

{

int iP = 0;

do

{

if (TextOnParts.ElementAt(iP).Patr == PartSpeech.Noun)

{

if (TextOnParts.ElementAt(iP + 1).Patr == PartSpeech.Noun) //

Сущь_Сущь

{

if (topGraph[TextOnParts.ElementAt(iP).iAnword].Relations != null)

{

LR.AddRange(topGraph[TextOnParts.ElementAt(iP).iAnword].Relations);

}

LR.Add("Имеет(есть)");

if (topGraph[TextOnParts.ElementAt(iP).iAnword].Relationships != null)

{

LRs.AddRange(topGraph[TextOnParts.ElementAt(iP).iAnword].Relationshi

ps); }

LRs.Add(TextOnParts.ElementAt(iP + 1).iAnword);

TG.id = topGraph[TextOnParts.ElementAt(iP).iAnword].id;

TG.Top = topGraph[TextOnParts.ElementAt(iP).iAnword].Top;

TG.Relations = LR;

TG.Relationships = LRs;

topGraph[TextOnParts.ElementAt(iP).iAnword] = TG;

iP++;

}

else if (TextOnParts.ElementAt(iP + 1).Patr == PartSpeech.Ajective) //

Сущь_Прил

{

//

topGraph.ElementAt(TextOnParts.ElementAt(iP).iAnword).Relations.Add("

Свойство");

//

topGraph.ElementAt(TextOnParts.ElementAt(iP).iAnword).Relationships.A

dd(TextOnParts.ElementAt(iP + 1).iAnword);

//

}

else if (TextOnParts.ElementAt(iP + 1).Patr == PartSpeech.Verb)//

Сущь_Глагал

{

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

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

int iP_2 = iP + 1;

do

{

if (TextOnParts.ElementAt(iP_2).Patr == PartSpeech.Verb) //->глагол

{

iVeber.Add(iP_2);

}

else if (TextOnParts.ElementAt(iP_2).Patr == PartSpeech.Ajective) //->прил

{

iAjective.Add(iP_2);

}

iP_2++;

}

while (TextOnParts.ElementAt(iP_2).Patr != PartSpeech.Noun |

TextOnParts.ElementAt(iP_2).Patr != PartSpeech.End);

if (TextOnParts.ElementAt(iP_2).Patr == PartSpeech.Noun)

{

}

else if (TextOnParts.ElementAt(iP_2).Patr == PartSpeech.End)

{

}

topGraph.ElementAt(TextOnParts.ElementAt(iP).iAnword).Relations.Add(li

stVerb.ElementAt(TextOnParts.ElementAt(iP + 1).iAnword));

topGraph.ElementAt(TextOnParts.ElementAt(iP).iAnword).Relationships.A

dd(TextOnParts.ElementAt(iP + 1).iAnword);

}

iP++;

}

while (TextOnParts.ElementAt(iP).Patr == PartSpeech.End);

}

return topGraph;

}

}

}

//************************************************************

// Form1

//************************************************************

using System;

using System.IO;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Collections;

using MorphologyModule;

using LinguisticalModule;

namespace SemanticSystem

{

public struct Bridge // Дуги для вершин

{

public int TopX;

public Label Attitude; // Отношение

public int TopY;

public Point pointX;

public Point pointY;

public Bridge(int tx, Label At, int ty, Point pX, Point pY)

{

TopX = tx;

Attitude = At;

TopY = ty;

pointX = pX;

pointY = pY;

}

}

public partial class Form1 : Form

{

string Text; // Исходный текст

Ling myLing = new Ling(); // Класс анализа

List<Button> buttons = new List<Button>(); // Вершины графа

List<Bridge> Bridges = new List<Bridge>(); // Дуги графа

int activeButton = -1; // id - активной вершины

Queue<Lemm> TextLemm = new Queue<Lemm>(); // Обработаный текст

List<TopGraph> Graph = new List<TopGraph>();

public Form1()

{

InitializeComponent();

}

// Загрузка текста

private void открытьToolStripButton_Click(object sender, EventArgs e)

{

OpenFileDialog dlg = new OpenFileDialog();

dlg.Filter = "Формат файла (txt)|*.txt";

if (dlg.ShowDialog() == DialogResult.OK)

{

Encoding enc = Encoding.Default;

string FileName = dlg.FileName;

StreamReader sr = new StreamReader(FileName, Encoding.Default);

Text = sr.ReadToEnd();

sr.Close();

this.richTextBox1.Text = Text;

Invalidate();

}

}

// Графематический анализ

private void toolStripButton1_Click(object sender, EventArgs e)

{

Text = this.richTextBox1.Text;

TextLemm.Clear();

if (this.Text.Length != 0)

{

TextLemm = myLing.GraphematicAnalysis(Text);

StringBuilder strb1 = new StringBuilder();

StringBuilder strb2 = new StringBuilder();

for (int i = 0; i != TextLemm.Count; i++)

{

strb1.Append(" " + i + " - " + TextLemm.Peek().Text + "\r");

strb2.Append(" " + TextLemm.Peek().Discript + "\r");

TextLemm.Enqueue(TextLemm.Dequeue());

}

this.label3.Text = strb1.ToString();

this.label4.Text = strb2.ToString();

}

else

{

MessageBox.Show("Отсутствует анализируемый текст!");

}

}

// Морфологический анализ

private void toolStripButton2_Click_1(object sender, EventArgs e)

{

if (this.TextLemm.Count != 0)

{

TextLemm = myLing.MorphologicAnalysis(TextLemm);

StringBuilder strb1 = new StringBuilder();

StringBuilder strb2 = new StringBuilder();

for (int i = 0; i != TextLemm.Count; i++)

{

strb1.Append(" " + i + " - " + TextLemm.Peek().Text + "\r");

strb2.Append(" " + TextLemm.Peek().Morph + "\r");

TextLemm.Enqueue(TextLemm.Dequeue());

}

this.label6.Text = strb1.ToString();

this.label9.Text = strb2.ToString();

}

else

{

MessageBox.Show("Не выполнен графематический анализ!");

}

}

// Статистический анализ

private void toolStripButton6_Click(object sender, EventArgs e)

{

this.label16.Text = "\n В данном разделе анализа приводится

статистические данные о тексте :\n" +

"\n Количество символов в тексте: " + Text.Length +

"\n Количество лексем в тексте: " + TextLemm.Count +

"\n Количество существительных в тексте (без повторяющихся): " +

myLing.NounsSeparation(TextLemm).Count +

"\n Количество прилагательных в тексте (без повторяющихся): " +

myLing.AdjectivesSeparation(TextLemm).Count +

"\n Количество глаголов в тексте (без повторяющихся): " +

myLing.VerbsSeparation(TextLemm).Count +

" ";

// "/n/tКоличество существительных в тексте (без повторяющихся): " +

TextLemm.Count;

}

// Синтаксическо-Семантический анализ

private void toolStripButton4_Click(object sender, EventArgs e)

{

if (buttons.Count > 0) //очистка перед построением графа(сети)

{

for (int i = 0; i != buttons.Count; i++)

{

buttons.ElementAt(i).Dispose();

}

buttons.Clear();

}

if (Bridges.Count > 0)

{

for (int i = 0; i != Bridges.Count; i++)

{

Bridges.ElementAt(i).Attitude.Dispose();

}

Bridges.Clear();

}

splitContainer5.Panel1.Controls.Clear();

if(TextLemm.ElementAt(0).MorphCid != null)

{

StringBuilder strb = new StringBuilder();

MouseEventHandler mehDown = new

MouseEventHandler(splitContainer5_Panel1_MouseDown);

Graph = myLing.SyntaxSemanticAnalysis(TextLemm);

for (int i = 0; i != Graph.Count; i++) // Создания кнопок(вершин)

{

buttons.Add(new Button() { Text = Graph.ElementAt(i).Top ,

TabIndex = Graph.ElementAt(i).id,

Location = new Point(20, 30 * (i + 1)),

BackColor = Color.Lavender,

UseVisualStyleBackColor = false,

AutoSize = true});

splitContainer5.Panel1.Controls.Add(buttons.ElementAt(i));

}

for (int i = 0; i != buttons.Count; i++) // присвоили события нажатия

мышки для каждой кнопки(вершине)

{

buttons.ElementAt(i).MouseDown += mehDown;

}

for (int i = 0; i != Graph.Count; i++) // Создания связий

{

if (Graph[i].Relations != null)

{

for (int j = 0; j != Graph.ElementAt(i).Relations.Count; j++)

{

Bridges.Add(new Bridge(i, new Label()

{

AutoSize = true,

Location = new Point(

(int)(buttons.ElementAt(i).Location.X +

buttons.ElementAt(Graph.ElementAt(i).Relationships.ElementAt(j)).Locatio

n.X)/2,

(int)(buttons.ElementAt(i).Location.Y +

buttons.ElementAt(Graph.ElementAt(i).Relationships.ElementAt(j)).Locatio

n.Y)/2),

BackColor = Color.White,

//BorderStyle = BorderStyle.FixedSingle;

//label.TabIndex = 1;

Text = Graph.ElementAt(i).Relations.ElementAt(j)

}, j,

new Point(buttons.ElementAt(i).Location.X,

buttons.ElementAt(i).Location.Y),

new

Point(buttons.ElementAt(Graph.ElementAt(i).Relationships.ElementAt(j)).L

ocation.X,

buttons.ElementAt(Graph.ElementAt(i).Relationships.ElementAt(j)).Locatio

n.Y)));

splitContainer5.Panel1.Controls.Add(Bridges[j].Attitude);

}

}

}

this.richTextBox1.Text = strb.ToString();

}

else

{

MessageBox.Show("Не выполнен морфологический анализ анализ!");

}

this.splitContainer5.Panel1.Invalidate();

}

// Реакция на мишь для графа (выбор)

private void splitContainer5_Panel1_MouseDown(object sender, MouseEventArgs e)

{

if (MouseButtons.Left == e.Button)

{

for (int i = 0; i != buttons.Count; i++)

{

if (buttons.ElementAt(i).Focused == true)

{

activeButton = i;

}

}

}

else

{

activeButton = -1;

this.splitContainer5.Panel1.Focus();

}

Invalidate();

this.splitContainer5.Panel1.Invalidate();

}

// Реакция на мишь для графа (перемешение курсора)

private void splitContainer5_Panel1_MouseMove(object sender,

MouseEventArgs e)

{

if (MouseButtons.Left == e.Button)

{

if (activeButton != -1)

{

buttons.ElementAt(activeButton).Location =

new Point(e.Location.X - (buttons.ElementAt(activeButton).Size.Width / 2)

,e.Location.Y - (buttons.ElementAt(activeButton).Size.Height / 2));

for (int i = 0; i != Graph.Count; i++)

{

if (Graph.ElementAt(i).Relations != null)

{

for (int j = 0; j != Graph.ElementAt(i).Relations.Count; j++)

{

Bridges[0].Attitude.Location = new Point(

(int)(buttons.ElementAt(i).Location.X +

buttons.ElementAt(Graph.ElementAt(i).Relationships.ElementAt(j)).Locatio

n.X) / 2,

(int)(buttons.ElementAt(i).Location.Y +

buttons.ElementAt(Graph.ElementAt(i).Relationships.ElementAt(j)).Locatio

n.Y) / 2);

}

}

}

}

else

activeButton = -1;

}

}

// Реакция на мишь для графа (установка)

private void splitContainer5_Panel1_MouseUp(object sender,

MouseEventArgs e)

{

if (MouseButtons.Left == e.Button)

{

if (activeButton != -1)

{

buttons.ElementAt(activeButton).Location =

new Point(e.Location.X - (buttons.ElementAt(activeButton).Size.Width / 2)

, e.Location.Y - (buttons.ElementAt(activeButton).Size.Height / 2));

for (int i=0; i!=Graph.Count; i++)

{

if (Graph.ElementAt(i).Relations != null)

{

for (int j = 0; j != Graph.ElementAt(i).Relations.Count; j++)

{

Bridges[0].Attitude.Location = new Point(

(int)(buttons.ElementAt(i).Location.X +

buttons.ElementAt(Graph.ElementAt(i).Relationships.ElementAt(j)).Locatio

n.X) / 2,

(int)(buttons.ElementAt(i).Location.Y +

buttons.ElementAt(Graph.ElementAt(i).Relationships.ElementAt(j)).Locatio

n.Y) / 2);

}

}

}

}

else

{

activeButton = -1;

}

}

this.splitContainer5.Panel1.Invalidate();

}

// Рисование линий отношений

private void splitContainer5_Panel1_Paint(object sender, PaintEventArgs e)

{

Bridge B = new Bridge();

Graphics gx = e.Graphics;

for (int i = 0; i != Bridges.Count; i++)

{

//B.Attitude = Bridges[i].Attitude;

B.pointX = new Point(buttons.ElementAt(Bridges[i].TopX).Location.X,

buttons.ElementAt(Bridges[i].TopX).Location.Y);

B.pointY = new Point(buttons.ElementAt(Bridges[i].TopY).Location.X,

buttons.ElementAt(Bridges[i].TopY).Location.Y);

gx.DrawLine(new Pen(Brushes.Blue, 4),

B.pointX, B.pointY);

}

}

// Помощь1

private void справкаToolStripButton1_Click(object sender, EventArgs e)

{

string str = "\tЗакладка данной системы преднозначена для загрузки" +

"и редоктирования текста, в дальнейшем который будет обработан!";

MessageBox.Show(str);

}

// Помощь2

private void справкаToolStripButton_Click(object sender, EventArgs e)

{

string str = "\tДанная закладка(этап анализа) системы преднозначена для

графематического" +

" анализа, который разделяет текст на разделители и лексемы, при этом

определяет" +

" для них свой дескриптор.\n \tПеречень дескрипторов:\n" +

" RLE - русская лексема;\n LLE - английская лексема;\n DC - цифровой

комплекс;\n" +

" GRAUNK - смешаные;\n PUN - разделители и знаки препинания.";

MessageBox.Show(str);

}

}

}

//************************************************************

// Mcr

//************************************************************

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;

namespace MorphologyModule

{

class Mcr

{

public const int MAX_WORD_LEN = 32;

public const int MAX_WORD_COUNT = 200;

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.In

teropServices.LayoutKind.Sequential, CharSet =

System.Runtime.InteropServices.CharSet.Ansi)]

public struct Tinlex

{

/// char[32]

[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.Inter

opServices.UnmanagedType.ByValTStr, SizeConst = 32)]

public string anword;

/// unsigned char

public byte cid;

/// unsigned char

public byte vid;

/// char

public byte virt;

/// unsigned char

public byte para;

}

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.In

teropServices.LayoutKind.Sequential)]

public struct Tinlexdata

{

/// Tinlex[200]

[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.Inter

opServices.UnmanagedType.ByValArray, SizeConst = 200, ArraySubType

= System.Runtime.InteropServices.UnmanagedType.Struct)]

public Tinlex[] inlex;

/// int

public int count;

}

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.In

teropServices.LayoutKind.Sequential)]

public struct Tid

{

/// unsigned int

public uint lnk;

/// unsigned char

public byte en;

}

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.In

teropServices.LayoutKind.Sequential)]

public struct Tids

{

/// Tid[200]

[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.Inter

opServices.UnmanagedType.ByValArray, SizeConst = 200, ArraySubType

= System.Runtime.InteropServices.UnmanagedType.Struct)]

public Tid[] ids;

/// int

public int count;

}

// // InitMcr() - инициализировать словарь mcr

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern int InitMcr();

// // LoadMcr - загрузить словарь mcr

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern int

LoadMcr([System.Runtime.InteropServices.InAttribute()]

[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.Inter

opServices.UnmanagedType.LPStr)] string s);

a// // SaveMcr - сохранить словарь mcr

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern int

SaveMcr([System.Runtime.InteropServices.InAttribute()]

[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.Inter

opServices.UnmanagedType.LPStr)] string s);

// // FindID - поиск слова s в словаре mcr, возвращает int количество

найденых слов и ids

//// (уникальный идентификтор слова = уникальный идентификатор

леммы + номер слова в парадигме)

//// Используйте полученные идентификаторы для получения

грамматических характеристик слова или возврата всей парадигмы

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern int

FindWID([System.Runtime.InteropServices.InAttribute()]

[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.Inter

opServices.UnmanagedType.LPStr)] string s, ref Tids ids);

// GetByID - для идентификатора id, функция возвращает

грамматические характеристики, лемму или всю парадигмы в outdata

// :: gh_only = true - возвращать только грамматические характеристики

// :: gh_only = false - возвратить грамматические характеристики для id

и лемму (win1251)

// :: all = true - поместить в wout всю парадигму для указанного id с

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

пометы ReadOnly

[DllImport("mcr.dll", CharSet = CharSet.None, EntryPoint =

"GetWordById")]

public static extern int GetWordById(Tid id,

[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.Inter

opServices.UnmanagedType.I1)] bool gh_only,

[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.Inter

opServices.UnmanagedType.I1)] bool all, ref Tinlexdata outdata);

// // ROnly Проверка является ли подключенный словарь - словарем

только для чтения (ReadOnlyDict)

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern bool ReadOnlyDict();

// // AddPara - добавление парадигмы в словарь

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern int AddParadigma(ref Tinlexdata indata);

// //3Space - проверка свободного места в словаре, если любой из

аргументов близок к 100% то добавление парадигм будет вскоре

невозможно

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern int FreeSpace(System.IntPtr ar1, System.IntPtr ar2,

System.IntPtr ar3);

// // Информация о версии mcr.dll

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern int Ver(System.IntPtr s);

// //Строка постоянной грамматической характеристики

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern string ConstIdToStr(byte cid);

// //Строка переменной грамматической характеристики

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern string VarIdToStr(byte cid, byte vid);

//Нахождение словоформ по заданной грамматической характеристике

(только для не ReadOnly словарей)

//lnk - номер парадигмы

//const_gh - код постоянной грамматическрй характеристики

(const_gh=0 - любая)

// //var_gh - переменная гр. характеристика

// //all=false - вернуть только первую найденную словоформу

[DllImport("mcr.dll", CharSet = CharSet.None)]

public static extern int GetBGH(int lnk, byte const_gh, byte var_gh,

[System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.Inter

opServices.UnmanagedType.I1)] bool all, ref Tinlexdata outdata);


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

  • Морфологические анализаторы (морфологизаторы) на различных языках программирования. Анализ методов и технологий автоматической обработки ЕЯ-текстов. Разработка модуля графематического анализа и создания таблицы лексем. Программная реализация классов.

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

  • Место компилятора в программном обеспечении. Принципы работы и автоматизация построения синтаксического анализатора. Дерево разбора и его преобразование в дерево операций. Назначение и этапы семантического анализа. Идентификация языков программирования.

    реферат [265,1 K], добавлен 20.12.2007

  • Структура компилятора PascalABC.NET. Структура дерева и примеры узлов. Упрощенный синтаксис записи модулей. Объявление имен, совпадающих с ключевыми словами. Генерация узла семантического дерева. Сериализация и десериализация узлов семантического дерева.

    курсовая работа [1,8 M], добавлен 18.12.2011

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

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

  • Методы грамматического разбора. Разработка структуры учебного транслятора на базовом языке программирования Object Pascal в среде объектно-ориентированного визуального программирования Borland DELPHI 6.0 с использованием операционной системы Windows XP.

    курсовая работа [493,8 K], добавлен 12.05.2013

  • Базовые принципы объектно-ориентированного программирования, его реализация в Тurbo Рascal. Разработка информационно-поисковой системы "Записная книжка врача-педиатра" на языке программирования Рascal. Описание алгоритма решения задачи и интерфейса.

    курсовая работа [2,8 M], добавлен 14.11.2013

  • Состав и принцип работы аппаратуры. Выбор параметров корреляционного анализа и Фурье-анализа. Разработка и применение алгоритма корреляционного анализа. Реализация алгоритма Фурье-анализа на языке С++ и алгоритма корреляционного анализа на языке С#.

    дипломная работа [4,6 M], добавлен 30.11.2016

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

    дипломная работа [10,8 M], добавлен 20.06.2014

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

    дипломная работа [2,6 M], добавлен 13.09.2017

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

    курсовая работа [150,6 K], добавлен 27.09.2016

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