Индексации хранилища текстов на основе естественно-языковой адресации

Результаты реализации модуля программной системы для проведения лингвистических исследований. Хранение и получение текстов из корпусов с использованием индексации на основе естественно-языковой адресации в виде wcf-сервиса. Подход к хранению корпусов.

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

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

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

Name = "Test Document",

СorpusId = 0 }], UserId = 2)

В базу данных добавлен частный корпус с документом (DocumentId = 0, FlatText = " Another",

Name = "Test Document",

СorpusId соответствует) с названием “Test3Name”

В базу данных добавлен частный корпус с документом (DocumentId = 0, FlatText = " Another",

Name = "Test Document",

СorpusId соответствует) с названием “Test3Name”

4

MakeCorpus(Name = “TestName”, Documents = [ {

DocumentId = 0, FlatText = "Another",

Name = "Test Document",

СorpusId = 0 }, {

DocumentId = 0, FlatText = "Second Another",

Name = "Test2 Document",

СorpusId = 0 }], UserId = 3)

В базу данных добавлен частный корпус с документами (DocumentId = 0, FlatText = "Another",

Name = "Test Document",

СorpusId соответствует; DocumentId = 0, FlatText = "Just flat text second",

Name = "Test2 Document",

СorpusId соответствует) с названием “Test3Name”

В базу данных добавлен частный корпус с документами (DocumentId = 0, FlatText = "Another",

Name = "Test Document",

СorpusId соответствует; DocumentId = 0, FlatText = "Just flat text second",

Name = "Test2 Document",

СorpusId соответствует) с названием “Test3Name”

5

MakeCorpus(Name = “Test5Name”, new Documents[0], UserId = 2)

В базу данных добавлен частный корпус без документов с названием “Test5Name” и UserId=2

В базу данных добавлен частный корпус без документов с названием “Test5Name” и UserId=2

6. Изменение корпуса.

Результаты тестирования изменения корпуса представлены в таблице Таблица 4.6.

Таблица 4.6. Тестирование изменения корпуса

Входные данные

Ожидаемый результат

Реальный результат

1

null

Ошибка «Параметр не может быть null»

Ошибка «Параметр не может быть null»

2

Corpus { Name = “”, UserId = 0,

CorpusId = 0}

Ошибка «Такого корпуса не существует»

Ошибка «Такого корпуса не существует»

3

Corpus { Name = “Test”, UserId = 2,

CorpusId = 1}

Изменение корпуса в БД с CorpusId = 1 на Name = “Test”

Изменение корпуса в БД с CorpusId = 1 на Name = “Test”

4

Corpus { Name = “”,

CorpusId = 1}

Изменение корпуса в БД с CorpusId = 1 на Name = “ ”

Изменение корпуса в БД с CorpusId = 1 на Name = “ ”

7. Удаление корпуса.

Результаты тестирования удаления корпуса представлены в таблице Таблица 4.7.

Таблица 4.7. Тестирование удаления корпуса

Входные данные

Ожидаемый результат

Реальный результат

1

CorpusId = 0 (Корпуса с таким id в базе данных нет)

Нет действий

Нет действий

2

CorpusId = 1 (Корпус без документов)

Удаление корпуса из базы данных

Удаление корпуса из базы данных

3

CorpusId = 3 (Корпус с одним документом)

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

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

4

CorpusId = 4 (Корпус с двумя документами)

Удаление корпуса из базы данных, удаление связанных документов

Удаление корпуса из базы данных, удаление связанных документов

8. Получение информации о корпусах.

Результаты тестирования получения информации о корпусах пользователя представлены в таблице Таблица 4.8.

Таблица 4.8. Тестирование получения информации о корпусе

Входные данные

Ожидаемый результат

Реальный результат

1

UserId = 12 (Нет корпусов)

Пустой массив корпусов

Пустой массив корпусов

2

UserId = 0 (Общественные корпуса)

Массив корпусов из двух пустых общественных

Массив корпусов из двух пустых общественных

3

UserId = 3 (Пользователь с одним корпусов)

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

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

4

UserId = 2 (Пользователь с двумя корпусами)

Массив из двух корпусов (один пустой, один с одним документом)

Массив из двух корпусов (один пустой, один с одним документом)

9. Добавление документа.

Результаты тестирования добавления документа представлены в таблице Таблица 4.9.

Таблица 4.9. Тестирование добавления документа

Входные данные

Ожидаемый результат

Реальный результат

1

null

Ошибка «Параметр не может быть null»

Ошибка «Параметр не может быть null»

2

Document { FlatText=”Flat text”,

Name=”DocumentName”,

СorpusId=0 }

Ошибка «Корпуса c таким id не существует»

Ошибка «Корпуса c таким id не существует»

3

Document {Name=”DocumentName”,

СorpusId=1 }

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную

4

Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=0, FlatText=””,

HTMLstring=”<br/>test<br/>”,

Name=”Document2Name”,

СorpusId=1 }

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную

5

Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=0, FlatText=”text”,

HTMLstring=”<br/>test<br/>”,

Name=”Document2Name”,

СorpusId=2}

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную. Добавление в документо-ориентированную базу со структурой индексов для слов «flat» и «text»

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную. Добавление в документо-ориентированную базу со структурой индексов для слов «flat» и «text»

6

Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=3, FlatText=”Flat text”,

HTMLstring=”<br/>test<br/>”,

Name=”Document2Name”,

СorpusId=2}

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную. Добавление в документо-ориентированную базу со структурой индексов для слов «flat» и «text»

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную. Добавление в документо-ориентированную базу со структурой индексов для слов «flat» и «text»

7

Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=0, FlatText=”Flat? text!!”,

HTMLstring=”<br/>test<br/>”,

Name=”Document2Name”,

СorpusId=2}

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную. Добавление в документо-ориентированную базу со структурой индексов для слов «flat» и «text»

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную. Добавление в документо-ориентированную базу со структурой индексов для слов «flat» и «text»

10. Изменение документа.

Результаты тестирования изменения документа представлены в таблице Таблица 4.10.

Таблица 4.10. Тестирование изменения документа

Входные данные

Ожидаемый результат

Реальный результат

1

null

Ошибка «Параметр не может быть null»

Ошибка «Параметр не может быть null»

2

Document { FlatText=”Flat text”,

Name=”DocumentName”,

СorpusId=0 }, IsTextChanged = false

Ошибка «Такого документа не существует»

Ошибка «Такого документа не существует»

3

Document { DocumentId = 1, Name=”DocumentName”,

СorpusId=1 }, IsTextChanged = false

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных

4

Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=1, FlatText=””,

HTMLstring=”<br/>test<br/>”,

Name=”Document2Name”,

СorpusId=1 }, IsTextChanged = false

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных

5

Document { DocumentId=0, Annotation=”<page>Midnight Rain</page >”, DocumentId=2, FlatText=”new text”,

HTMLstring=”<br/>test<br/>”,

Name=”Document_Name”,

СorpusId=4}, IsTextChanged = true

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных. Изменение в документо-ориентированной базе индексов: добавление индексов для слова «new»

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных. Изменение в документо-ориентированной базе индексов: добавление индексов для слова «new»

6

Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=2, FlatText=”text”,

HTMLstring=”<br/>test2<br/>”,

Name=”Document2Name”,

СorpusId=2}, IsTextChanged = true

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных. Изменение в документо-ориентированной базе индексов: удаление индексов для слова «new»

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных. Изменение в документо-ориентированной базе индексов: удаление индексов для слова «new»

7

Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=3, FlatText=”Flat? Text!!!”,

HTMLstring=”<br/>test<br/>”,

Name=”Document2Name”,

СorpusId=2}, IsTextChanged = false

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных. Изменений в документо-ориентированной базе индексов нет

Изменение информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных. Изменений в документо-ориентированной базе индексов нет

11. Удаление документа.

Результаты тестирования удаления документа представлены в таблице Таблица 4.11.

Таблица 4.11. Тестирование удаления документа

Входные данные

Ожидаемый результат

Реальный результат

1

DocumentId = 0 (Документа с таким id в базе данных нет)

Нет действий

Нет действий

2

DocumentId = 1

Удаление информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных. Удаление вхождений 1 из документо-ориентированной базе индексов

Удаление информации о документе c DocumentId = 1 в реляционной и документо-ориентированной базе данных. Удаление вхождений 1 из документо-ориентированной базе индексов

3

DocumentId = 3

Удаление информации о документе c DocumentId = 3 в реляционной и документо-ориентированной базе данных. Удаление вхождений 1 из документо-ориентированной базе индексов

Удаление информации о документе c DocumentId = 3 в реляционной и документо-ориентированной базе данных. Удаление вхождений 1 из документо-ориентированной базе индексов

12. Получение информации о документе/документах.

Результаты тестирования получения информации о документе/документах представлены в таблице Таблица 4.12.

Таблица 4.12. Тестирование получения информации о документе

Входные данные

Ожидаемый результат

Реальный результат

1

GetDocument(DocumentId=0)

null

null

2

GetDocument(DocumentId=2)

Document {Name=”DocumentName”,

СorpusId=1 }

Document {Name=”DocumentName”,

СorpusId=1 }

3

GetDocuments(CorpusId=0)

Пустой массив

Пустой массив

4

GetDocuments(CorpusId=3)

Пустой массив

Пустой массив

5

GetDocuments(CorpusId =2)

Массив документов

Массив документов

6

GetDocuments(CorpusId =1)

Массив документов

Массив документов

13. Поиск документа по названию.

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

Таблица 4.13. Тестирование поиска документа по названию

Входные данные

Ожидаемый результат

Реальный результат

1

«Document», CorpusId=1

Все общедоступные документы с вхождением подстроки «document» в названии

Все общедоступные документы с вхождением подстроки «document» в названии

2

«DocUMent» , CorpusId=1

Все общедоступные документы с вхождением подстроки «document» в названии

Все общедоступные документы с вхождением подстроки «document» в названии

3

«Document» , CorpusId=2

Все документы корпуса с CorpusId=2 с вхождением подстроки «document» в названии

Все документы корпуса с CorpusId=2 с вхождением подстроки «document» в названии

4

«Hello» , CorpusId=1

Пустой массив документов

Пустой массив документов

5

«Document» , CorpusId=0

Пустой массив документов

Пустой массив документов

14. Поиск документа по ключевым словам.

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

Таблица 4.14. Тестирование поиска документа по ключевым словам

Входные данные

Ожидаемый результат

Реальный результат

1

«Text», CorpusId=1

Все общедоступные документы с вхождением подстроки «text»

Все общедоступные документы с вхождением подстроки «text»

2

«TeXt» , CorpusId=1

Все общедоступные документы с вхождением подстроки «text»

Все общедоступные документы с вхождением подстроки «text»

3

«TeXts» , CorpusId=1

Все общедоступные документы с вхождением подстроки «text»

Все общедоступные документы с вхождением подстроки «text»

4

«TeXts» , CorpusId=2

Все документы корпуса с CorpusId=2 с вхождением подстроки «text»

Все документы корпуса с CorpusId=2 с вхождением подстроки «text»

5

«Hello» , CorpusId=1

Пустой массив документов

Пустой массив документов

6

«TeXts» , CorpusId=0

Пустой массив документов

Пустой массив документов

4.2 Интеграционное тестирование

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

Таблица 4.15. Интеграционное тестирование

Входные данные

Ожидаемый результат

Реальный результат

1

null

Ошибка «Параметр не может быть null»

Ошибка «Параметр не может быть null»

2

Добавление информации о пользователе: User{UserId = 0, FIO = “Фамилия Имя Отчество”, Email = “email@email.com”, Login = “Login3”, Password = “Password3”}

В базу данных добавлена информация о пользователе с FIO = “Фамилия Имя Отчество”, Email = “email@email.com”, Login = “Login3”, Password = “Password3”. UserId сгенерирован

В базу данных добавлена информация о пользователе с FIO = “Фамилия Имя Отчество”, Email = “email@email.com”, Login = “Login3”, Password = “Password3”. UserId сгенерирован (5)

3

Добавление корпуса: (Name = “Test3Name”, Documents [ {

DocumentId = 0, FlatText = "Another",

Name = "Test Document",

СorpusId = 0 }], UserId = 5)

В базу данных добавлен частный корпус с документом (DocumentId = 0, FlatText = " Another",

Name = "Test Document",

СorpusId соответствует) с названием “Test3Name”

В базу данных добавлен частный корпус с документом (DocumentId = 0, FlatText = " Another",

Name = "Test Document",

СorpusId соответствует) с названием “Test3Name”

4

Добавление документа: Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=0, FlatText=”text”,

HTMLstring=”<br/>test<br/>”,

Name=”Document2Name”,

СorpusId=5}

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную. Добавление в документо-ориентированную базу со структурой индексов для слов «flat» и «text»

Добавление информации о документе в реляционную базу данных, а также в документо-ориентированную. Добавление в документо-ориентированную базу со структурой индексов для слов «flat» и «text»

5

Поиск по ключевому слову: «TeXts» , CorpusId=5

Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=0, FlatText=”text”,

HTMLstring=”<br/>test<br/>”,

Name=”Document2Name”,

СorpusId=5}

Document { Annotation=”<title>Midnight Rain</title>”, DocumentId=0, FlatText=”text”,

HTMLstring=”<br/>test<br/>”,

Name=”Document2Name”,

СorpusId=5}

6

Удаление пользователя: UserId = 5

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

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

Были созданы и использованы следующие тестовые программы:

1. Консольное приложение, написанное на языке c#.

2. Консольное приложение, написанное на языке Java, которое использует стандартный модуль для создания кода клиента сервиса из документа WSDL.

3. Web-клиент, представляющий собой HTML-страницу, с вызовами функций сервиса с помощью JQuery.

4.3 Тестирование индексации на основе естественно-языковой адресации

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

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

Рисунок 4.1. Графики зависимости времени поиска от количества слов в корпусе

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

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

Заключение

Итогом данной работы стал WCF-сервис для хранения корпусов текстов с индексацией на основе естественно-языковой адресации, реализованный на языке C#. Данный сервис является частью системы для анализа научных текстов с веб-интерфейсом, которая разрабатывается в рамках работы научно-исследовательской группы НИУ ВШЭ-Пермь.

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

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

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

Результаты исследования вместе с результатами работ Каликовой А.Р. и Гуляевым В.Ю. прошли апробацию на всероссийской научно-практической конференции молодых учёных с международным участием «Математика и междисциплинарные исследования - 2018» (ПГНИУ, г. Пермь) в секции «Прикладная лингвистика» и заняли первое место.

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

Библиографический список

1. Бармина Е.И. Система для обработки корпусов текстов / Е.И. Бармина, Р.Н. Бушуев, Н.В. Котельникова, В.В. Ланин, О.А. Плотникова // Математика и междисциплинарные исследования - Пермь: Пермский государственный национальный исследовательский университет, 2016. - С. 245-250.

2. Величко В. К вопросу естественно-языковой адресации / В. Величко, К. Иванова, К. Марков // Problems of Computer in Intellectualization. - София, Болгария: ITHEA 2012. - С. 77-83.

3. Документация по базе данных Azure Cosmos // Техническая документация, материалы по API и примеры кода. URL: https://docs.microsoft.com/ru-ru/azure/cosmos-db/ (дата обращения: 12.11.2017)

4. Индексирование в базах данных // Основы компьютерного моделирования - URL: http://bourabai.ru/dbt/dbms/001.htm (дата обращения: 12.11.2017)

5. Конноли Т. Базы данных. Проектирование, реализация и сопровождение. Теория и практика / Т. Конноли, К. Бегг. - М.: ООО "И.Д. Вильямс". - 2017. - 1440 c.

6. Копотев М.В. Введение в корпусную лингвистику: учеб. пособие для студентов филологических и лингвистических специальностей университетов / М.В. Копотев. - Прага: Animedia Company. - 2014. - 230 с.

7. Сведения о производительности (Entity Framework) // Техническая документация, материалы по API и примеры кода. URL: https://docs.microsoft.com/ru-ru/dotnet/framework/data/adonet/ef/performance-considerations (дата обращения: 04.05.2018)

8. Типы коллекций Hashtable и Dictionary // Техническая документация, материалы по API и примеры кода. URL: https://docs.microsoft.com/ru-ru/dotnet/standard/collections/hashtable-and-dictionary-collection-types (дата обращения: 04.05.2018)

9. Фаулер M. NoSQL: новая методология разработки нереляционных баз данных / М. Фаулер, П. Дж. Садаладж - М.: ООО "И.Д. Вильямс". - 2013. - 192 c.

10. Anthony L. AntConc: design and development of a freeware corpus analysis toolkit for the technical writing classroom / L. Anthony // Anthony Professional Communication Conference, 2005 - IPCC, 2005 - С. 729-737.

11. Bontcheva K. GATE Teamware: a web-based, collaborative text annotation framework / K. Bontcheva , H. Cunningham, Ian Roberts, A. Roberts, V. Tablan, N. Aswani, G. Gorrell // Language Resources and Evaluation. - Sheffield, UK: Springer Netherlands, 2013 -№47 - С. 1007-1029.

12. Boldi P. MG4J at TREC 2005 / P. Boldi, S. Vigna // Proceedings of the Fourteenth Text REtrieval Conference (TREC 2005) - NIST, 2005 - Vol. 500 - С. 266-271.

13. CORSIS // An open-source corpus analysis class library -URL: http://corsis.sourceforge.net/index.php/CORSIS (дата обращения: 27.01.2017)

14. Cunningham H. Gate / H. Cunningham, D. Maynard, K. Bontcheva, V. Tablan // Proceedings of the 40th Annual Meeting on Association for Computational Linguistics - ACL 02, 2002.

15. Cunningham H. Getting More Out of Biomedical Documents with GATEs Full Lifecycle Open Source Text Analytics / H. Cunningham, V. Tablan, A. Roberts, K. Bontcheva // PLoS Computational Biology. - 2013 -№9 - С. 1-16.

16. DictionaryBase.cs // Microsoft Reference Source. URL: https://referencesource.microsoft.com/#mscorlib/system/collections/dictionarybase.cs (дата обращения: 04.05.2018)

17. Entity Framework Windows SQL Azure // Microsoft Developer Network. URL: https://msdn.microsoft.com/en_us/library/jj556244(v=vs.113).aspx (дата обращения: 04.05.2018)

18. GATE. General architecture for text engineering // А full-lifecycle open source solution for text processing. URL: https://gate.ac.uk (дата обращения: 12.11.2017)

19. Hardie A. CQPweb -- combining power, flexibility and usability in a corpus analysis tool / A. Hardie // International Journal of Corpus Linguistics. -Amsterdam:John Benjamins Publishing Company, 2012 -№17(3) - С. 380-409.

20. Hirani Z. Entity Framework 6 Recipes / Z. Hirani, L. Tenny, N. Gupta, B. Driscoll, R. Vettor. - Apress. - 2013. - 548 с.

21. Ivanova K. Ontoarm - a system for storing ontologies by natural language addressing / K. Ivanova // International Journal "Information Technologies & Knowledge". - Sofia, Bulgaria: ITHEA 2014. -№8 - С. 303-312.

22. Ivanova K. Practical aspects of natural language addressing / K. Ivanova // Computational models for business and engineering domains. - Sofia, Bulgaria: ITHEA® 2012. - С. 172-186.

23. Manning C. Introduction to Information Retrieval / C. Manning, P. Raghavan, H. Schьtze. - Cambridge: Cambridge University Press. - 2008. - 680 с.

24. Markov K. Natural Language Addressing: / K. Markov, K. Ivanova, K. Vanhoof, V. Velychko, J. Castellanos. - Sofia, Bulgaria: ITHEA. - 2015. - 315 с.

25. Salvendy G. Handbook of Industrial Engineering, Technology and Operations Management: / G. Salvendy. - Hoboken, NJ, USA: John Wiley & Sons, Inc. - 2001. - 2796 с.

26. Stevens M. Subtleties of Scientific Style / M. Stevens. - Thornleigh, N.S.W. : ScienceScape Editing. - 2007. - 104 c.

27. Windows Communication Foundation // Microsoft Developer Network. URL: https://msdn.microsoft.com/ru_ru/library/dd456779.aspx (дата обращения: 12.11.2017)

Приложение А

Описание прецедентов

1. Создание нового корпуса текстов

Акторы: Клиент (Другие приложение).

Краткое описание: Вызов функции для создания корпуса с переданными необходимыми данными в качестве аргументов.

Основной поток:

1. Клиент выполняет вызов функции для создания корпуса (Е1).

2. Сервис отправляет запрос в реляционную СУБД для сохранения информации о корпусе (Е2).

Альтернативные потоки:

E1: Клиент сначала выполняет поиск пользователя для создания частного корпуса.

E2: При возникновении ошибки система отправляет информацию о ней клиенту.

2. Изменение корпуса текстов

Акторы: Клиент (Другие приложение).

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

Основной поток:

1. Клиент выполняет вызов функции для изменения корпуса.

2. Сервис отправляет запрос в реляционную СУБД для изменения информации о корпусе (Е1).

Альтернативные потоки:

E1: При возникновении ошибки система отправляет информацию о ней клиенту.

3. Удаление корпуса текстов

Акторы: Клиент (Другие приложение).

Краткое описание: Вызов функции для удаления корпуса с переданным идентификатором в качестве аргумента.

Основной поток:

1. Клиент выполняет вызов функции для удаления корпуса (S1).

2. Сервис отправляет запрос в реляционную СУБД для удаления информации о корпусе (Е1).

Подпотоки:

S1: Система удаляет все документы из данного корпуса.

Альтернативные потоки:

E1: При возникновении ошибки система отправляет информацию о ней клиенту.

4. Создание нового документа

Акторы: Клиент (Другие приложение).

Краткое описание: Вызов функции для добавления документа с переданными необходимыми данными в качестве аргументов.

Основной поток:

1. Клиент выполняет вызов функции для добавления документа (Е1).

2. Сервис отправляет запрос в реляционную СУБД для сохранения информации о документе (Е2).

3. Сервис отправляет запрос в документо-ориентированную СУБД для сохранения информации о документе (S1).

Подпотоки:

S1: Индексация документа.

Альтернативные потоки:

E1: Клиент сначала выполняет поиск корпуса для добавления документа.

E2: При возникновении ошибки система отправляет информацию о ней клиенту.

5. Изменение документа

Акторы: Клиент (Другие приложение).

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

Основной поток:

1. Клиент выполняет вызов функции для изменения документа.

2. Сервис отправляет запрос в реляционную СУБД для изменения информации о корпусе (Е1).

3. Сервис отправляет запрос в документо-ориентированную СУБД для изменения информации о документе (Е2).

Альтернативные потоки:

E1: При возникновении ошибки система отправляет информацию о ней клиенту.

E2: При изменении текста документа происходит переиндексация текста (удаления старых индексов, добавление новых).

6. Удаление документа

Акторы: Клиент (Другие приложение).

Краткое описание: Вызов функции для удаления документа с переданным идентификатором в качестве аргумента.

Основной поток:

1. Клиент выполняет вызов функции для удаления корпуса (S1).

2. Сервис отправляет запрос в реляционную и документо-ориентированную СУБД для удаления информации о корпусе (Е1).

Подпотоки:

S1: Система удаляет все индексы для данного документа.

Альтернативные потоки:

E1: При возникновении ошибки система отправляет информацию о ней клиенту.

7. Регистрация нового пользователя

Акторы: Клиент (Другие приложение).

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

Основной поток:

1. Клиент выполняет вызов функции для добавления информации о пользователе.

2. Сервис отправляет запрос в реляционную СУБД для сохранения информации о пользователе (Е1).

Альтернативные потоки:

E1: При возникновении ошибки система отправляет информацию о ней клиенту.

8. Изменение информации о пользователе

Акторы: Клиент (Другие приложение).

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

Основной поток:

1. Клиент выполняет вызов функции для изменения информации о пользователе.

2. Сервис отправляет запрос в реляционную СУБД для изменения информации о пользователе (Е1).

Альтернативные потоки:

E1: При возникновении ошибки система отправляет информацию о ней клиенту.

9. Удаление информации о пользователе

Акторы: Клиент (Другие приложение).

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

Основной поток:

1. Клиент выполняет вызов функции для удаления информации о пользователе (S1).

2. Сервис отправляет запрос в реляционную СУБД для удаления информации о пользователе (Е1).

Подпотоки:

S1: Система удаляет все корпуса данного пользователя.

Альтернативные потоки:

E1: При возникновении ошибки система отправляет информацию о ней клиенту.

10. Получение информации о пользователе

Акторы: Клиент (Другие приложение).

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

Основной поток:

1. Клиент выполняет вызов функции для получения информации о пользователе.

2. Сервис отправляет запрос в реляционную СУБД для получения информации о пользователе и отправляет её клиенту (Е1).

Альтернативные потоки:

E1: Если такой пользователь не найден, возвращается пустая ссылка.

11. Получение информации о корпусе

Акторы: Клиент (Другие приложение).

Краткое описание: Вызов функции для получения информации о корпусе с переданным идентификатором в качестве аргумента.

Основной поток:

1. Клиент выполняет вызов функции для получения информации о корпусе.

2. Сервис отправляет запрос в реляционную СУБД для получения информации о корпусе и отправляет её клиенту (Е1).

Альтернативные потоки:

E1: Если такой корпус не найден, возвращается пустая ссылка.

12. Получение информации о документе

Акторы: Клиент (Другие приложение).

Краткое описание: Вызов функции для получения информации о документе с переданным идентификатором в качестве аргумента.

Основной поток:

1. Клиент выполняет вызов функции для получения информации о документе.

2. Сервис отправляет запрос в реляционную и документо-ориентированную СУБД для получения информации о документе и отправляет её клиенту (Е1).

Альтернативные потоки:

E1: Если такой документ не найден, возвращается пустая ссылка.

13. Поиск документа

Акторы: Клиент (Другие приложение).

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

Основной поток:

1. Клиент выполняет вызов функции для поиска документов по названию.

2. Сервис отправляет запрос в реляционную СУБД для поиска документов и отправляет их клиенту (Е1).

Альтернативные потоки:

E1: Если такие документы не найдены, возвращается пустой массив.

14. Поиск документов по ключевым словам

Акторы: Клиент (Другие приложение).

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

Основной поток:

1. Клиент выполняет вызов функции для поиска документов по ключевым словам.

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

Альтернативные потоки:

E1: Если такие документы не найдены, возвращается пустой массив.

Приложение Б. Технико-экономическое обоснование

ИНДЕКСАЦИИ ХРАНИЛИЩА ТЕКСТОВ НА ОСНОВЕ ЕСТЕСТВЕННО-ЯЗЫКОВОЙ АДРЕСАЦИИ

Технико-экономическое обоснование

Листов 4

Руководитель разработки

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

___________ Лядова Л.Н.

“_____”____________2018

Ответственный исполнитель

Студентка 4-ого курса группы ПИ-14-1

факультета экономики, менеджмента и бизнес-информатики

____________Симонова Н.А.

“_____”____________2018

2018

1. Расчет стоимости разработки и поддержки сервиса

Итоговая стоимость реализации сервиса, в которую включена стоимость анализа требований, проектирования, разработки, тестирования и публикации сервиса, представлена в таблице B.1 и составляет 40 486 руб. В качестве стоимости часа взята средняя стоимость для рынка города Перми в 2017 году.

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

Таблица B.1. Расчет стоимости разработки

Работа

Количество часов

Профессиональный стандарт

Стоимость часа

Итоговая стоимость (руб.)

1. Проанализировать:

18

4407

1.1. Существующие технологии хранения больших массивов текстовой информации.

5

Системный аналитик

250

1250

1.2. Протоколы передачи.

2

Системный аналитик

250

500

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

8

Системный аналитик

250

2000

1.4. Разработать техническое задание.

3

Технический писатель

219

657

2. Произвести моделирование web-сервиса для хранения корпусов:

14

5625

2.1. Произвести моделирование вариантов использования с помощью диаграммы прецедентов.

3

Специалист по информационным системам

375

1125

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

8

Специалист по информационным системам

375

3000

2.3. Произвести моделирование архитектуры системы с помощью диаграммы компонентов.

3

Архитектор программного обеспечения

500

1500

3. Реализовать web-сервис:

95

30454

3.1. Реализовать CRUD-функции для корпусов.

39

14625

3.1.1. Реализовать добавление корпусов.

3

Программист

375

1125

3.1.2. Реализовать удаление корпусов.

3

Программист

375

1125

3.1.3. Реализовать изменение корпусов.

3

Программист

375

1125

3.1.4. Реализовать добавление документов.

7

Программист

375

2625

3.1.5. Реализовать удаление документов.

7

Программист

375

2625

3.1.6. Реализовать изменение документов.

7

Программист

375

2625

3.1.10. Реализовать добавление пользователей.

3

Программист

375

1125

3.1.11. Реализовать удаление пользователей.

3

Программист

375

1125

3.1.12. Реализовать изменение пользователей.

3

Программист

375

1125

3.2. Реализовать индексацию на основе естественно-языковой адресации.

20

8500

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

8

Архитектор программного обеспечения

500

4000

3.2.2. Реализовать функции для работы со структурой.

8

Программист

375

3000

3.2.3. Реализовать изменение структуры.

4

Программист

375

1500

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

3

Программист

375

1125

3.4. Произвести функциональное и интеграционное тестирование.

33

6204

3.4.1. Протестировать добавление корпусов.

2

Специалист по тестированию в области информационных технологий

188

376

3.4.2. Протестировать удаление корпусов.

2

Специалист по тестированию в области информационных технологий

188

376

3.4.3. Протестировать изменение корпусов.

2

Специалист по тестированию в области информационных технологий

188

376

3.4.4. Протестировать добавление документов.

4

Специалист по тестированию в области информационных технологий

188

752

3.4.5. Протестировать удаление документов.

4

Специалист по тестированию в области информационных технологий

188

752

3.4.6. Протестировать изменение документов.

4

Специалист по тестированию в области информационных технологий

188

752

3.4.7. Протестировать добавление индексов.

3

Специалист по тестированию в области информационных технологий

188

564

3.4.8. Протестировать удаление индексов.

3

Специалист по тестированию в области информационных технологий

188

564

3.4.9. Протестировать изменение индексов.

3

Специалист по тестированию в области информационных технологий

188

564

3.4.10. Протестировать добавление пользователей.

2

Специалист по тестированию в области информационных технологий

188

376

3.4.11. Протестировать удаление пользователей.

2

Специалист по тестированию в области информационных технологий

188

376

3.4.12. Протестировать изменение пользователей.

2

Специалист по тестированию в области информационных технологий

188

376

ИТОГО:

127

40 486

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

Проект является некоммерческим, поэтому расчет срока окупаемости не производится.

2. Обоснование выбранных технологий

В качестве инструментов разработки и подходов были выбраны:

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

2. Visual Studio 2015, так как данная IDE поддерживает C#, является удобным инструментом разработки кода (имеет встроенные возможности рефакторинга, навигации по коду, исправлений и отладки), а также имеет встроенную поддержку интеграции с сервисами Azure и является бесплатной.

3. Windows Communication Foundation, так как в отличие от обычного сервиса, WCF позволяет иметь несколько точек доступа, поддерживает сессии на уровне сервиса, а не метода, позволяет использовать различные протоколы и предоставляет некоторые другие расширенные возможности.

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

5. Технология Entity Framework для работы с реляционной базой данных, так как она обеспечивает независимость базы данных и более быструю реализацию, а также поддерживает LINQ, транзакции и параллелизм.

6. Cosmos DB в качестве СУБД для хранения документов, так как данная СУБД уже является сервисом, не требует сложных настроек, поддерживает различные языки, хоть и предоставляется только по подписке.

7. Индексация на основе естественно языковой адресации, так как данный подход позволяет уменьшить необходимый объем памяти (нет необходимости отдельно хранить индексы), а значит позволит, при необходимости, уменьшить затраты на память (например, в облачном хранилище).

Приложение В. Руководство программиста

1. Назначение и условия применения программ

1.1. Назначение системы

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

1.2. Функции, выполняемые системой

Сервис обеспечивает возможность выполнения перечисленных ниже функций:

1. Создание/удаление/изменение корпусов текстов.

2. Добавление/удаление/изменение документов в корпусы.

3. Добавление/удаление/изменение аннотаций к текстам.

4. Добавление/удаление/изменение других представлений текстов.

5. Добавление информации о пользователе (регистрация пользователя).

6. Удаление/изменение информации о пользователе.

7. Поиск документа в базе.

8. Поиск фрагмента документа по тексту документов.

1.3. Требования к составу и параметрам технических средств

Требования к составу и параметрам технических средств не предъявляются, так как сервис расположен на серверах Azure.

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

Для работы над программой необходима среда разработки Visual Studio 2013 или выше. Для работы программы с облачными базами данных Azure необходима подписка Azure.

2. Характеристика программы

2.1. Характеристика используемых средств

Исходные коды программы реализованы на языке C#. В качестве интегрированной среды разработки программы использована среда Visual Studio 2017.

Программа использует SQL Azure для хранения реляционных данных. Обращение к БД происходит с помощью Entity Framework и LINQ.

Программа использует Azure Cosmos DB для хранения нереляционных данных. Обращение к БД происходит с помощью API и LINQ.

2.2. Структура программы

Архитектуры системы создана представленная на диаграмме компонентов (рис. C.1).

Рисунок C.1. Диаграмма компонентов сервиса-хранилища

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

Для хранения реляционных данных будет использоваться также располагаемая на сервисах Azure база данных SQL Azure (RelationDatabase.svc), предоставляемая как сервис. DocumentDatabase.svc - Cosmos DB, нереляционная база данных как сервис для хранения документов. Также используется сторонняя реализация стеммера по алгоритму стемминга Портера (Stemmer.dll).

2.3. Структура баз данных

Информация о пользователях и корпусах содержится в реляционной СУБД (рис. C.2), а также ключи нереляционной части хранящихся документов в корпусах (DocumentId), названия документов и оригинальный файл.

Рисунок C.2. Схема реляционной базы данных

Работа с реляционной базой данной осуществляется с помощью Entity Framework, ниже представлена получившаяся модель (рис. C.3).

Рисунок C.3. Entity Designer Diagram

В документо-ориентированной базе данных хранится информация о документах. Так как документы в документо-ориентированных СУБД не имеют четкой структуры, была определена примерная схема информации, которая будет храниться в формате JSON (рис. C.4).

Рисунок C.4. Примерная структура документа в документо-ориентированной базе данных

Гибкость структуры позволит хранить любую дополнительную информацию о документе помимо определенной выше.

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

Классы для работы с индексацией (рис. С.5) на основе естественно-языковой адресации включают в себя классы структуры индексов: NLAStructure и NLAHeadDocument, которые включают в себя словарь ссылок на класс IndexStructureObject.

Рисунок С.5. Диаграмма классов для работы с индексацией

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

2.4. Временные характеристики

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

3. Обращение к программе

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

1. Добавление ссылки на службу в проект Visual Studio.

2. Использование класса ChannelFactory и предоставляемой библиотеки с контрактом класса.

Более подробную информацию можно посмотреть по ссылкам:

1. https://docs.microsoft.com/ru-ru/dotnet/framework/wcf/how-to-create-a-wcf-client (Практическое руководство. Создание клиента Windows Communication Foundation)

2. https://msdn.microsoft.com/en_us/library/system.servicemodel.channelfactory.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

(ChannelFactory Class, Microsoft Developer Network)

В контракте сервиса определены следующие методы:

1. AutorizeUser(string Login, string Password) : User - возвращает информацию о пользователе по логину и паролю.

2. GetCorpora(int UserId) : Corpus[] - возвращает список всех корпусов пользователя.

3. GetDocuments(int CorpusId) : Document[] - возвращает список всех документов в корпусе.

4. GetDocument(int Document) : Document - возвращает информацию о документе.

5. MakeCorpus(string Name, Document[] documents) : int - создает общий корпус с выбранными документами (можно создать и пустой корпус, передав пустой массив).

6. MakeCorpus(string Name, Document[] documents, int UserId) : int - создает частный корпус с выбранными документами (можно создать и пустой корпус, передав пустой массив).

7. AddUser(User user) : int - регистрация нового пользователя.

8. UpdateUser(User user) : void - изменение информации о пользователе. По старому идентификатору обновляются все поля.

9. DeleteUser(int userId) : void - удаление информации о пользователе по идентификатору. При этом происходит удаление всех корпусов пользователя.

10. AddDocument(Document document) : int - добавление нового документа.

11. UpdateDocument(Document document) : void - изменение документа. По старому идентификатору обновляются все поля.

12. DeleteDocument(int documentId) : void - удаление документа по идентификатору.

13. UpdateCorpus(Corpus corpus) : void - изменение корпуса. По старому идентификатору обновляются все поля.

14. DeleteCorpus(int corpusId) : void - удаление корпуса по идентификатору. При этом происходит удаление всех документов корпуса.

15. FindDocuments(string Name, int corpusId) : Document[] - поиск документа по имени.

16. FindText(string Text) : Document[] - поиск фрагмента по документам.

4. Входные и выходные данные

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

Стандартами взаимодействия являются вызов методов сервиса, а также использование классов, определенных в контракте сервиса:

Были выделены следующие сущности и атрибуты:

1. User - пользователь с информацией о ФИО (nullable), электронной почтой (not nullable), логине (not nullable) и пароле (not nullable) пользователя.

2. Corpus - корпус с информацией о названии корпуса (not nullable).

3. Document - документ, содержащий оригинальный файл (nullable), плоский текст (not nullable), аннотацию (nullable), строку HTML-разметки (nullable) и название (not nullable).

5. Сообщения

При работе с сервисом в случае успешной работы метод возвращает данные в соответствии с сигнатурой метода, например:

1. При вызове метода FindDocuments вернется массив документов.

2. При вызове метода DeleteCorpus нет возвращаемого значения.

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

Таблица C.1. Сообщения специфичных ошибок

Класс ошибки

Сообщение ошибки

Описание ошибки

Требуемые действия при возникновении ошибки.

Document

Такого документа не существует

Метод UpdateDocument. Документа с данным идентификатором нет в базе данных.

Изменить идентификатор документа или добавить данный документ в базу.

Corpus

Такого корпуса не существует

Метод UpdateCorpus. Корпуса с данным идентификатором нет в базе данных.

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

User

Другой пользователь с таким логином уже существует

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

Изменить новый логин изменяемого пользователя.

User

Такого пользователя не существует

Метод UpdateUser. Пользователя с данным идентификатором нет в базе данных.

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

User

Пользователь с таким логином уже существует

Метод AddUser. В базе данных существует пользователь с таким логином

Изменить логин добавляемого пользователя.

Приложение Г

Листинг

namespace CorporaStorageServiseContract

{

[ServiceContract]

public interface ICorporaStorageService

{

[OperationContract]

[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "AutorizeUser?Login={Login}&Password={Password}")]

User AutorizeUser(string Login, string Password);

[OperationContract]

[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetCorpora?UserId={UserId}")]

Corpus[] GetCorpora(int UserId);

[OperationContract]

[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetDocuments?CorpusId={CorpusId}")]

Document[] GetDocuments(int CorpusId);

[OperationContract]

[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetDocument?DocumentId={DocumentId}")]

Document GetDocument(int DocumentId);

[OperationContract]

[WebInvoke(Method = "POST",

BodyStyle = WebMessageBodyStyle.Wrapped,

ResponseFormat = WebMessageFormat.Json,

UriTemplate = "MakeCommonCorpus")]

int MakeCommonCorpus(string Name, Document[] documents);

[OperationContract]

[WebInvoke(Method = "POST",

BodyStyle = WebMessageBodyStyle.Wrapped,

ResponseFormat = WebMessageFormat.Json,

UriTemplate = "MakeCorpus")]

int MakeCorpus(string Name, Document[] documents, int UserId);

[OperationContract]

[WebInvoke(Method = "POST",

BodyStyle = WebMessageBodyStyle.Wrapped,

ResponseFormat = WebMessageFormat.Json,

UriTemplate = "AddUser")]

int AddUser(User user);

[OperationContract]

[WebInvoke(Method = "POST",

BodyStyle = WebMessageBodyStyle.Wrapped,

ResponseFormat = WebMessageFormat.Json,

UriTemplate = "UpdateUser")]

void UpdateUser(User user);

[OperationContract]

[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "DeleteUser?userId={userId}")]

void DeleteUser(int userId);

[OperationContract]

[WebInvoke(Method = "POST",

BodyStyle = WebMessageBodyStyle.Wrapped,

ResponseFormat = WebMessageFormat.Json,

UriTemplate = "AddDocument")]

int AddDocument(Document document);

[OperationContract]

[WebInvoke(Method = "POST",

BodyStyle = WebMessageBodyStyle.Wrapped,

ResponseFormat = WebMessageFormat.Json,

UriTemplate = "UpdateDocument")]


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

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

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

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

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

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

    автореферат [296,5 K], добавлен 31.01.2012

  • Что такое компьютерный корпус. Компьютерный корпус служит для монтажа компонентов компьютерной системы. Какие моменты следует учесть при покупке корпуса. Компоненты. Стандарты корпусов BTX: подробности о новом форм-факторе. Ценовые категории.

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

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

    контрольная работа [42,2 K], добавлен 12.03.2011

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

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

  • Возникновение и функции интернета. Системы адресации и протоколы передачи данных. Структура иерархической базы данных. Формирование базы данных учета сотрудников организации, создание таблиц с тремя видами запросов на выборку, конструктор отчетов.

    контрольная работа [885,8 K], добавлен 10.11.2010

  • Описание ДСМ-метода автоматического порождения гипотез. Исследование результатов влияния компонентов ДСМ-метода на качество определения тональности текстов. Алгоритм поиска пересечений. N-кратный скользящий контроль. Программная реализация ДСМ-метода.

    курсовая работа [727,0 K], добавлен 12.01.2014

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

    реферат [63,5 K], добавлен 24.05.2013

  • Разработка структуры корпоративной информационной системы ООО НПО "Мир": создание схемы адресации, системы доменных имен; выбор программной и аппаратной конфигураций клиентских станций и развернутых серверов. Расчет стоимости программного обеспечения.

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

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