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

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

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

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

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

Как было сказано выше, язык программирования, используемый в данной разработке это Java, следовательно, рассмотрим наиболее популярные IDE для разработки программ на выбранном языке. По итогам анализа информации в сети Интернет, можно выделить три среды разработки: Eclipse IDE for Java Developers, NetBeans IDE и IntelliJ IDEA. Достоинства и недостатки каждой из них сформулированы на основе, как личного опыта использования, так и отзывов других пользователей. Рассмотрим каждую из них более детально.

2.3.2.1 Среда разработки Eclipse IDE for Java Developers

Eclipse IDE for Java Developers - это программная платформа с открытым кодом, разработанная компанией Eclipse Foundation и предоставляемая в открытом доступе [22]. Программная среда является полностью бесплатной, при полном функционале, что сильно повышает ее популярность. Основными достоинствами данного инструмента являются:

- Кроссплатформенность, возможность работать с Windows, Linux, Solaris и Mac OS X.

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

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

- Возможность интеграции с GIT.

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

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

- Медленная скорость работы среды, из-за старых версий Java Virtual Machine, на которой основывается работа IDE [22].

- Вероятность возникновения конфликта между плагинами в ходе загрузки.

- Необходимость настройки среды перед применением.

2.3.2.2 Среда разработки NetBeans IDE

IDE NetBeans- это интегрированная среда разработки, поддерживаемая компанией Oracle. Данный инструмент поддерживает разработку на многих языках, таких как Java, Python, PHP, JavaScript, C, C++ и т.д. IDE позволяет разрабатывать настольные, мобильные и веб-приложения. Программное средство предоставляется с открытым исходным кодом бесплатно на официальном сайте [23].

Рассматриваемая среда обладает следующими достоинствами:

- Скорость работы, быстрее, чем Eclipse IDE, но медленнее, чем Intellij IDEA.

- Удобное и простое средство для построения пользовательского интерфейса GUI Builder.

- Поддержка различных стандартов Java (Enterprise Edition, Standard Edition, Mobility).

- Редактор кода заканчивает код при написании и предлагает список элементов.

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

2.3.2.3 Среда разработки Intellij IDEA

IntelliJ IDEA - это программное обеспечение, разработанное компанией JetBrains, которое позволяет программистам создавать программные продукты. Среда разработки поддерживает большое количество языков - Java, JavaScript, CoffeeScript, HTML/XHTML/HAML, CSS/SASS/LESS, XML/XSL/XPath, YAML, ActionScript/MXML, Python, Ruby, SQL, PHP, Kotlin, Clojure, C, C++. IntelliJ IDEA имеет две формы поставки: бесплатная Community Edition и платная Ultimate Edition. Первая версия предназначена для JVM и Android разработки, вторая - для производственной и веб-разработки. Среда разработки IntelliJ IDEA обладает следующими достоинствами:

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

- Подсветка синтаксиса при вводе строк на других языках программирования, таких как SQL, HTML, CSS и JavaScript.

- Рефакторинг одинаковых фрагментов кода.

- Интеграция с системами контроля версий, такими как Git.

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

- Неоправданно высокая стоимость в рамках академической разработки - приблизительно $500 в год [25].

- Долгое время выполнения компиляции.

- При подключении дополнительных модулей, многие из них могут «конфликтовать».

- Частые поломки при обновлении плагинов среды разработки.

2.3.2.4 Итоги обзора

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

- Средство разработки IntelliJ IDEA.

- Программное средство NetBeans.

- Среда разработки Eclipse IDE for Java Developers.

Данное расположение элементов списка объясняется тем, что по скорости работы и по качеству обработки кода, Eclipse уступает NetBeans и IntelliJ IDEA. Но в рамках данной работы, данная система является наиболее подходящей по ряду причин:

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

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

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

4. Средства для разработки графического интерфейса Eclipse IDE, на порядок ниже, чем у NetBeans и IntelliJ IDEA, но так как визуализация в программном модуле осуществляется с помощью генератора отчетов BIRT, данный недостаток не является существенным.

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

Выводы по второй главе

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

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

После того как были определены функции, которые должен выполнять программный модуль и построена его архитектура, был произведен сравнительный анализ инструментов разработки, таких как язык программирования и интегрированная среда разработки. В частности, язык разработки - Java - был выбран на основании средства обработки естественного языка, описанного в первой главе, системы Gate Developer, которая также реализована на этом языке. Были рассмотрены популярные среды разработки на выбранном языке программирования и выбрана Eclipse IDE for Java Developers, которая повысит удобство разработки за счет того, что генератор отчетов является программным компонентом для интеграции в данную среду. Таким образом, на данном этапе выделены функциональные требования к программному модулю, а также выбраны инструмент необходимые для разработки.

Глава 3. Разработка программного модуля

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

3.1 Описание параметров входа и выхода

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

Рисунок 3.1. Входные и выходные параметры программного модуля

Опишем каждый из вышеуказанных параметров подробнее (табл. 3.1).

Таблица 3.1. Характеристика параметров входа и выхода

Параметр

Название параметра

Обязательность

Тип данных

Описание

URL путь до файла с шаблоном отчета

templateFileURL

-

URL

Содержит в себе путь до файла с шаблоном отчета

URL путь до директории результирующего файла

outputfileURL

+

URL

Содержит в себе путь до директории в которой необходимо сохранить отчет

Список маркеров для сбора статистики

Вводятся при создании обрабатывающего ресурса

+

Список полей типа Boolean

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

Список корпусов для сбора статистики

corpList

-

List<String>

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

Формат экспортируемого файла

outputFormat

-

String

Формат файла экспорта, если он не указан, то по умолчанию выгружается файл в формате HTML

Указатель необходимости создания нового отчета

isNeededNewTemplate

+

Boolean

Параметр указывает на необходимость создания нового отчета. Если значение параметра - true, то плагин открывает BIRT RCP Report Designer.

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

//Путь до шаблона-отчета

public URL getTemplateFileURL()

{

return templateFileURL;

}

@gate.creole.metadata.RunTime //указывается тип параметра

@gate.creole.metadata.Optional //указывается необязательность параметра

@CreoleParameter(

comment = "Filename of template report",

suffixes = ".rpttemplate",//так как тип параметра - путь к файлу - указывается тип файла

priority = 1)

public void setTemplateFileURL(URL source)

{

this.templateFileURL = source;

}

protected URL templateFileURL;

Листинг 3.1. Добавление параметра templateFileURL

Полный листинг добавления параметров можно увидеть в приложении Б. В результате выполнения плагина, в окне редактора параметров обрабатывающего ресурса отображаются добавленные параметры (рис. 3.2) и список необходимых маркеров (рис. 3.3).

Рисунок 3.2. Входные параметры обрабатывающего ресурса

Рисунок 3.3. Список маркеров для сбора статистики

3.2 Описание процесса создания плагина

Согласно документации разработчиков Gate [2], разработку нового плагина необходимо начинать с вызова Bootstrap Wizard. Это инструмент, который создает директорию будущего плагина согласно введенным параметрам (рис. 3.4).

Рисунок 3.4. Инструмент Bootstrap Wizard

После нажатия кнопки “Finish”, в указанном месте файловой системы создается папка, содержимое которой представлено на рисунке 3.5.

Рисунок 3.5. Корневая папка плагина

Для того чтобы плагин заработал, необходимо добавить данную папку в папку “plugins” в директории Gate Developer, а также загрузить *.jar файл с кодом плагина. Далее необходимо добавить плагин в систему через Creole Manager (рис. 3.6).

Рисунок 3.6. Окно CREOLE Manager

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

3.3 Особенности реализации плагина в среде Gate Developer

Ранее было сказано, что в системе Gate Developer уже существует плагин для сбора статистических данных. На данный момент StatsCollector, программный компонент по сбору статистики, экспортирует результат работы в виде файла в формате *.txt. Данный формат не удобен для дальнейшей обработки, к тому же результирующий файл не обладает необходимой для этого структурой. Таким образом, в плагине необходимо реализовать алгоритм, который бы выгружал аннотированные тексты в структурированную форму (XML) и передавал их в генератор отчетов, в качестве источника данных. В зависимости от значения параметра corpList, плагин формирует .xml документ с данными корпуса или же документ с данными из нескольких корпусов, с помощью функции getcorp(). В качестве входного параметра getcorp() принимает название корпуса, и формирует строку с данными. Для работы с XML и его обработкой, была использована библиотека DOM4J. В случае, если плагин применяется к нескольким корпусам, метод применяется к каждому из них и формирует общую строку для набора корпусов.

Размеченные корпуса в формате XML после обработки обладают структурой, изображенной на рисунке 3.7.

Рисунок 3.7. Структура аннотированного текста

Следующим этапом работы программного модуля является выгрузка XML документа в генератор отчетов в качестве DataSource. Для этого используется класс ReportGenerator, который определяет формат экспорта, генерирует отчет и выгружает его в указанную пользователем директорию. Все эти операции осуществляются посредством библиотеки BIRT API, которая позволяет внести в шаблон отчета информацию об источнике данных, с помощью класса OdaDataSourceHandle.

Чтобы редактировать программный код плагинов Gate, необходимо открыть соответствующую папку в папке “plugins” директории Gate Developer и запустить *.jar файл через какой-либо редактор, в нашем случае IDE Eclipse. Листинг программы представлен в Приложении Б.

3.3 Разработка шаблонов для генерации отчетов

Для того чтобы сгенерировать отчет, пользователю необходимо передать в плагин URL адрес расположения шаблона отчета. В текущем контексте шаблон рассматривается как спроектированная структура отчета. Для создания и редактирования шаблонов отчетов существует независимый от среды разработки Eclipse интерфейс, к которому можно получить доступ посредством введения значения true во входной параметр isNeededDrawTemplate. После введения данного параметра необходимо нажать кнопку “Run Application”, после чего пользователь видит окно, изображенное на рисунке 3.8.

Рисунок 3.8. Интерфейс BIRT Report Designer

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

Сначала необходимо создать шаблон (.rpttemplate) или дизайн(.rptdesign),в данном случае это будет шаблон. После этого перейти на вкладку Data Explorer и с

помощью контекстного меню вызвать окно создания источника данных (рис. 3.9).

Рисунок 3.9. Создание источника данных

Далее необходимо последовательно выбрать «XML Data Source», а затем указать путь до самого источника данных (рис. 3.10). Схему данных программа определяет автоматически.

Рисунок 3.10. Указание источника данных

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

Рисунок 3.11. Выбор колонок из структуры документа

После добавления данных пользователь может выполнять действия с ними, а также использовать различные элементы для создания шаблона. В конце работы необходимо сохранить шаблон в формате *.rpttemplate (или *.rptdesign). Указанные процедуры являются необходимыми, так как структура данных, включенная в шаблон, позволяет загрузить результаты вычисления статистики в отчет и отобразить их, так как было задано пользователем.

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

Рисунок 3.12. Шаблон отчета в программе BIRT RCP Designer

3.4 Результаты реализации программного модуля

В рамках данной работы был реализован плагин, который позволяет сгенерировать отчет о собранной статистике. Для того чтобы убедиться в полноте реализации, необходимо протестировать работу программы. В качестве примеров были выбраны два текста. Задачей является загрузить их в плагин и сгенерировать отчет по шаблону. Для анализа выбран один маркер - «Noun» - так как, данные можно будет проверить посредством подсчётов «вручную». Для визуализации была выбрана столбчатая диаграмма (рис. 3.13), на которой можно увидеть разницу между частотностью использования маркера в пределах каждого из текстов.

Рисунок 3.13. Диаграмма частотности маркера "Noun"

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

Заключение

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

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

В ходе моделирования программного продукта были сформулированы функциональные требования, на основе требований заказчика. А также построена архитектура разрабатываемого плагина, которая содержит все описанные компоненты. Выбор языка программирования Java для реализации был основан на решении использовать систему Gate Developer в качестве среды для интеграции модуля. Так как был определен язык реализации, выбор интегрированной среды разработки свелся к трем, наиболее популярных Java IDE. ПО результатам анализа была выбрана среда Eclipse IDE.

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

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

1. Трофимов С. Варианты использования (Use Case) [Электронный ресурс]. URL: http://www.caseclub.ru/articles/use_case.html (дата обращения: 24.05.2017).

2. Cunningham H. [и др.]. Developing language processing components with GATE (a user guide) // University of Sheffield. 2001. № Gate 2 (2006). C. 1-457.

3. Laurence Anthony's Homepage [Электронный ресурс]. URL: http://www.laurenceanthony.net/ (дата обращения: 24.05.2017).

4. GATE.ac.uk - index.html [Электронный ресурс]. URL: https://gate.ac.uk/ (дата обращения: 24.05.2017).

5. The Stanford Natural Language Processing Group [Электронный ресурс]. URL: https://nlp.stanford.edu/software/tagger.shtml (дата обращения: 24.05.2017).

6. Лингвистический Энциклопедический Словарь. Кореферентность [Электронный ресурс]. URL: http://tapemark.narod.ru/les/243a.html (дата обращения: 24.05.2017).

7. Чанкер для русского языка [Электронный ресурс]. URL: http://web-corpora.net/wsgi/chunker.wsgi/npchunker/ (дата обращения: 24.05.2017).

8. Strinyuk S. A., Shuchalova Y., Lanin V. Academic Papers Evaluation Software, in: Application of Information and Communication Technologies (AICT), 2015 9th International Conference on,14-16 Oct. 2015. Rostov-on-Don : IEEE, 2015. doi P. 506-510.

9. генератор отчетов - это... Что такое генератор отчетов? [Электронный ресурс]. URL: http://dic.academic.ru/dic.nsf/eng_rus/56647/генератор (дата обращения: 24.05.2017).

10. Crystal Reports [Электронный ресурс]. URL: https://msdn.microsoft.com/ru-ru/library/bb126227(v=vs.90).aspx (дата обращения: 24.05.2017).

11. Генератор отчетов для Java. Экспорт отчетов в PDF, MS Office, Open Office и т.д.?:: Стимулсофт [Электронный ресурс]. URL: https://www.stimulsoft.com/ru/products/reports-java (дата обращения: 24.05.2017).

12. Бизнес аналитика. Генератор отчетов для JavaScript, .NET, ASP.NET, WPF, Flex, PHP, Silverlight, Java, ASP.NET MVC, WinRT, HTML5. Дизайнер отчетов. Создание отчетов. Сервер отчетов. Бизнес-аналитика.?:: Стимулсофт [Электронный ресурс]. URL: https://www.stimulsoft.com/ru (дата обращения: 24.05.2017).

13. JasperReports® Library | Jaspersoft Community [Электронный ресурс]. URL: http://community.jaspersoft.com/project/jasperreports-library (дата обращения: 24.05.2017).

14. Business reporting software - NextReports Designer, Engine and Server [Электронный ресурс]. URL: http://www.next-reports.com/ (дата обращения: 24.05.2017).

15. BIRT Home [Электронный ресурс]. URL: http://www.eclipse.org/birt/ (дата обращения: 24.05.2017).

16. About [Электронный ресурс]. URL: http://www.eclipse.org/birt/about/project-organization/ (дата обращения: 24.05.2017).

17. Hardie A. The IMS Open Corpus Workbench ( CWB ) CQPweb System Administrator ' s Manual 2014. C. 1-45.

18. Scott M. WordSmith Tools step by step 2010.

19. Talk T., Diachronic T., Corpus E. A Guide to using AntConc C. 1-9.

20. Сравнение утилит анализа корпусов -- NLPub [Электронный ресурс]. URL: https://nlpub.ru/Сравнение_утилит_анализа_корпусов (дата обращения: 24.05.2017).

21. Каталог лингвистических программ и ресурсов в Cети, ч.1 / Linguistics Software Catalogue, ch.1 [Электронный ресурс]. URL: http://rvb.ru/soft/catalogue/c01.html (дата обращения: 24.05.2017).

22. Sketch Engine | language corpus management and query system [Электронный ресурс]. URL: https://www.sketchengine.co.uk/ (дата обращения: 24.05.2017).

23. Обзор платформы Eclipse - как её использовать | Статьи о программном обеспечении [Электронный ресурс]. URL: https://hightech.in.ua/content/art-eclipse-platform (дата обращения: 24.05.2017).

24. Welcome to NetBeans [Электронный ресурс]. URL: https://netbeans.org/ (дата обращения: 24.05.2017).

25. Обзор NetBeans IDE | Обзор IDE [Электронный ресурс]. URL: https://aboutide.wordpress.com/2011/03/23/обзор-netbeans-ide/ (дата обращения: 24.05.2017).

26. IntelliJ IDEA [Электронный ресурс]. URL: http://jetbrains.ru/products/idea/ (дата обращения: 24.05.2017).

27. SAP Crystal Reports 2011 User вЂTM s Guide SAP Crystal Reports 2011 2012

67

Приложение А. UseCase диаграмма для описания функциональных требований

Рисунок А.1. Диаграмма описания функциональных требований

Приложение Б. Листинг программы

/*

* StatsCollector.java

*

* Copyright (c) 2000-2012, The University of Sheffield.

*

* This file is part of GATE (see http://gate.ac.uk/), and is free

* software, licenced under the GNU Library General Public License,

* Version 3, 29 June 2007.

*

* A copy of this licence is included in the distribution in the file

* licence.html, and is also available at http://gate.ac.uk/gate/licence.html.

*

* Maria, 20/3/2017

*

* For details on the configuration options, see the user guide:

* http://gate.ac.uk/cgi-bin/userguide/sec:creole-model:config

*/

package jsh.academic.tagger;

import gate.util.Out;

import java.net.URL;

import org.eclipse.birt.core.framework.Platform;

import org.eclipse.birt.report.engine.api.*;

import org.eclipse.birt.report.model.api.*;

import org.w3c.dom.*;

import gate.*;

import gate.creole.*;

import gate.creole.metadata.*;

import gate.util.*;

import java.awt.Desktop;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.URL;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.Iterator;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;

import org.dom4j.*;

import org.dom4j.io.SAXReader;

import org.eclipse.birt.core.exception.BirtException;

/**

* This class is the implementation of the resource STATSCOLLECTOR.

*/

@CreoleResource(name = "StatsCollector",

comment = "Collecting statistics in corpus and documents")

public class StatsCollector extends AbstractLanguageAnalyser

implements ProcessingResource {

boolean DEBUG_MODE = true;

//Указатель необходимости создания шаблона отчета

public Boolean getisNeededNewTemplate() {

return isNeededNewTemplate;

}

@gate.creole.metadata.RunTime

@CreoleParameter(

comment = "If it's needed to create new template",

priority = 1)

public void setisNeededNewTemplate(Boolean source) {

this.isNeededNewTemplate = source;

}

protected Boolean isNeededNewTemplate;

//Формат экспорта

public String getoutputFormat() {

return outputFormat;

}

@gate.creole.metadata.RunTime

@gate.creole.metadata.Optional

@CreoleParameter(

comment = "Output File Format",

priority = 1)

public void setoutputFormat(String source) {

this.outputFormat = source;

}

protected String outputFormat;

//Корпуса для сравнения

public List getCorpList() {

return corpList;

}

@gate.creole.metadata.RunTime

@gate.creole.metadata.Optional

@CreoleParameter(

comment = "List of corporas to execute",

priority = 1)

public void setCorpList(List source) {

this.corpList = source;

}

protected List corpList;

//Путь до шаблона-отчета

public URL getTemplateFileURL() {

return templateFileURL;

}

@gate.creole.metadata.RunTime

@gate.creole.metadata.Optional

@CreoleParameter(

comment = "Filename of template report",

suffixes = ".rpttemplate",

priority = 1)

public void setTemplateFileURL(URL source) {

this.templateFileURL = source;

}

protected URL templateFileURL;

//Путь до файла экспорта

public URL getOutputfileURL() {

return outputfileURL;

}

@gate.creole.metadata.RunTime

@CreoleParameter(

comment = "Filename where results will be written",

suffixes = ".txt",

priority = 1)

public void setOutputfileURL(URL source) {

this.outputfileURL = source;

}

protected URL outputfileURL;

public Boolean getAllNouns() {

return AllNouns;

}

@CreoleParameter(

comment = "Count abstract semantic verbs")

public void setAllNouns(Boolean bool) {

this.AllNouns = bool;

}

/* check to count this type of annotation */

protected Boolean AllNouns = true;

public Boolean getAbstractSemanticVerbs() {

return AbstractSemanticVerbs;

}

@CreoleParameter(

comment = "Count abstract semantic verbs")

public void setAbstractSemanticVerbs(Boolean bool) {

this.AbstractSemanticVerbs = bool;

}

/* check to count this type of annotation */

protected Boolean AbstractSemanticVerbs = true;

public Boolean getAbstractSuffixNouns() {

return AbstractSuffixNouns;

}

@CreoleParameter(

comment = "Count nouns with abstract suffixes")

public void setAbstractSuffixNouns(Boolean bool) {

this.AbstractSuffixNouns = bool;

}

/* check to count this type of annotation */

protected Boolean AbstractSuffixNouns = true;

public Boolean getArchaisms() {

return Archaisms;

}

@CreoleParameter(

comment = "Count nouns with abstract suffixes")

public void setArchaisms(Boolean bool) {

this.Archaisms = bool;

}

/* check to count this type of annotation */

protected Boolean Archaisms = true;

public Boolean getDesemantisizedVerbs() {

return DesemantisizedVerbs;

}

@CreoleParameter(

comment = "Count desemantisized verbs")

public void setDesemantisizedVerbs(Boolean bool) {

this.DesemantisizedVerbs = bool;

}

/* check to count this type of annotation */

protected Boolean DesemantisizedVerbs = true;

public Boolean getComplexConjunctions() {

return ComplexConjunctions;

}

@CreoleParameter(

comment = "Count complex conjunctions")

public void setComplexConjunctions(Boolean bool) {

this.ComplexConjunctions = bool;

}

/* check to count this type of annotation */

protected Boolean ComplexConjunctions = true;

public Boolean getComplexPrepositions() {

return ComplexPrepositions;

}

@CreoleParameter(

comment = "Count complex prepositions")

public void setComplexPrepositions(Boolean bool) {

this.ComplexPrepositions = bool;

}

/* check to count this type of annotation */

protected Boolean ComplexPrepositions = true;

public Boolean getIWePronouns() {

return IWePronouns;

}

@CreoleParameter(

comment = "Count I/We pronouns")

public void setIWePronouns(Boolean bool) {

this.IWePronouns = bool;

}

/* check to count this type of annotation */

protected Boolean IWePronouns = true;

public Boolean getIntensifyingAdverbs() {

return IntensifyingAdverbs;

}

@CreoleParameter(

comment = "Count intensifying adverbs")

public void setIntensifyingAdverbs(Boolean bool) {

this.IntensifyingAdverbs = bool;

}

/* check to count this type of annotation */

protected Boolean IntensifyingAdverbs = true;

public Boolean getOrSuffixNouns() {

return OrSuffixNouns;

}

@CreoleParameter(

comment = "Count nouns with -OR suffix")

public void setOrSuffixNouns(Boolean bool) {

this.OrSuffixNouns = bool;

}

/* check to count this type of annotation */

protected Boolean OrSuffixNouns = true;

public Boolean getPassiveVoice() {

return PassiveVoice;

}

@CreoleParameter(

comment = "Count verbs in passive voice")

public void setPassiveVoice(Boolean bool) {

this.PassiveVoice = bool;

}

/* check to count this type of annotation */

protected Boolean PassiveVoice = true;

public Boolean getPersonalPronouns() {

return PersonalPronouns;

}

@CreoleParameter(

comment = "Count personal pronouns")

public void setPersonalPronouns(Boolean bool) {

this.PersonalPronouns = bool;

}

/* check to count this type of annotation */

protected Boolean PersonalPronouns = true;

public Boolean getPostpositiveAtrributes() {

return PostpositiveAtrributes;

}

@CreoleParameter(

comment = "Count postpositive attributes")

public void setPostpositiveAtrributes(Boolean bool) {

this.PostpositiveAtrributes = bool;

}

/* check to count this type of annotation */

protected Boolean PostpositiveAtrributes = true;

public Boolean getPrepositiveAtrributes() {

return PrepositiveAtrributes;

}

@CreoleParameter(

comment = "Count prepositive attributes")

public void setPrepositiveAtrributes(Boolean bool) {

this.PrepositiveAtrributes = bool;

}

/* check to count this type of annotation */

protected Boolean PrepositiveAtrributes = true;

public Boolean getThatThoseOf() {

return ThatThoseOf;

}

@CreoleParameter(

comment = "Count that of / those of")

public void setThatThoseOf(Boolean bool) {

this.ThatThoseOf = bool;

}

/* check to count this type of annotation */

protected Boolean ThatThoseOf = true;

public Boolean getVerbTense() {

return VerbTense;

}

@CreoleParameter(

comment = "Count verb tenses")

public void setVerbTense(Boolean bool) {

this.VerbTense = bool;

}

/* check to count this type of annotation */

protected Boolean VerbTense = true;

public Boolean getYouHeShe() {

return YouHeShe;

}

@CreoleParameter(

comment = "Count you/he/she")

public void setYouHeShe(Boolean bool) {

this.YouHeShe = bool;

}

/* check to count this type of annotation */

protected Boolean YouHeShe = true;

public String getCorp(String corpName) {

String outstr = "<Corpus name=\"" + corpName + "\">";

String filenamecorp = "C:/Users/gorbunova.m/Desktop/" + corpName + ".xml";

SAXReader reader = new SAXReader();

try {

org.dom4j.Document document = reader.read(filenamecorp);

org.dom4j.Element root = document.getRootElement();

outstr += "<Document name = \"" + filenamecorp + "\">";

for (Iterator x = root.elementIterator("AnnotationSet"); x.hasNext();) {

org.dom4j.Element annotationSet = (org.dom4j.Element) x.next();

for (Iterator z = annotationSet.elementIterator("Annotation"); z.hasNext();) {

org.dom4j.Element annotation = (org.dom4j.Element) z.next();

annotation.addAttribute("fileName", filenamecorp);

annotation.addAttribute("corpusName", corpName);

outstr += annotation.asXML();

}

}

outstr += "</Document>";

} catch (DocumentException ex) {

Logger.getLogger(StatsCollector.class.getName()).log(Level.SEVERE, null, ex);

}

outstr += "</Corpus>";

return outstr;

}

public void execute() {

if(isNeededNewTemplate)

{

File filercp = new File("C:\\Users\\gorbunova.m\\Desktop\\birt\\BIRT.exe");

try {

Desktop.getDesktop().open(filercp);

} catch (IOException ex) {

Logger.getLogger(StatsCollector.class.getName()).log(Level.SEVERE, null, ex);

}

}else{

String outstr = "<?xml version='1.0' encoding='windows-1251'?>";

String filename1 = "corpora";

FileWriter fw1 = null;

if (corpList.size() != 0&&corpList.size()!=1) {

filename1 = "corpora";

outstr += "<Corporas>";

for (Iterator w = corpList.iterator(); w.hasNext();) {

String vv = (String) w.next();

outstr += getCorp(vv);

}

outstr += "</Corporas>";

} else {

Corpus corp = getCorpus();

//outstr+=getCorp(corp.getName());

FileWriter fw = null;

FeatureMap cf = corp.getFeatures();

int s = corp.size(); //size of corpus

gate.Document currDoc = getDocument();

int d = corp.indexOf(currDoc); //index of current document

if (d == 0) //if first - create the features

{

try {

outstr += "<Corpus name=\"" + corp.getName() + "\">";

for (int i = 0; i < corp.size(); i++) {

String filename = "C:/Users/gorbunova.m/Desktop/" + corp.get(i).getName() + ".xml";

File f = new File(filename);

if (f.exists()) {

f.delete();

}

f.createNewFile();

fw = new FileWriter(f, true);

PrintWriter pw = new PrintWriter(fw);

String str = corp.get(i).toXml();

pw.print(str);

pw.close();

fw.close();

SAXReader reader = new SAXReader();

try {

org.dom4j.Document document = reader.read(filename);

org.dom4j.Element root = document.getRootElement();

outstr += "<Document name = \"" + filename + "\">";

for (Iterator x = root.elementIterator("AnnotationSet"); x.hasNext();) {

org.dom4j.Element annotationSet = (org.dom4j.Element) x.next();

for (Iterator z = annotationSet.elementIterator("Annotation"); z.hasNext();) {

org.dom4j.Element annotation = (org.dom4j.Element) z.next();

annotation.addAttribute("fileName", filename);

annotation.addAttribute("corpusName", corp.getName());

outstr += annotation.asXML();

}

}

outstr += "</Document>";

} catch (DocumentException ex) {

Logger.getLogger(StatsCollector.class.getName()).log(Level.SEVERE, null, ex);

}

}

outstr += "</Corpus>";

filename1 = "C:/Users/gorbunova.m/Desktop/" + corp.getName() + ".xml";

} catch (IOException ex) {

Logger.getLogger(StatsCollector.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

File f1 = new File(filename1);

try {

if (f1.exists()) {

f1.delete();

}

f1.createNewFile();

fw1 = new FileWriter(f1, true);

PrintWriter pw1 = new PrintWriter(fw1);

pw1.print(outstr);

pw1.close();

fw1.close();

} catch (IOException ex) {

Logger.getLogger(StatsCollector.class.getName()).log(Level.SEVERE, null, ex);

}

try {

ReportGenerator report =new ReportGenerator(outputfileURL, templateFileURL, outputFormat);

} catch (BirtException ex) {

Logger.getLogger(StatsCollector.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

} // class StatsCollector

class ReportGenerator {

public ReportGenerator(URL outputfileURL, URL templatefileURL, String outputFormat) throws BirtException {

boolean DEBUG_MODE = true;

EngineConfig config = new EngineConfig();

config.setEngineHome("C:\\Users\\gorbunova.m\\Downloads\\birt-runtime-4.6.0-20160607\\ReportEngine");

Platform.startup(config);

ReportEngine engine = new ReportEngine(config);

if (DEBUG_MODE) {

Out.pr(outputfileURL + "/StatsXML.xml");

}

templatefileURL.getPath();

IReportRunnable reportRunnable = engine.openReportDesign(templatefileURL.getPath());

IRunAndRenderTask runAndRender = engine.createRunAndRenderTask(reportRunnable);

ReportDesignHandle report = (ReportDesignHandle) reportRunnable.getDesignHandle();

ElementFactory ef = report.getElementFactory();

OdaDataSourceHandle datasource = (OdaDataSourceHandle) ef.newOdaDataSource("DataSource", outputfileURL.getPath() + "StatsXML.xml");

RenderOption option = new RenderOption();

switch (outputFormat) {

case "HTML":

option.setOutputFormat("HTML");

break;

case "PDF":

option.setOutputFormat("PDF");

break;

case "TXT":

option.setOutputFormat("TXT");

break;

case "WORD":

option.setOutputFormat("WORD");

break;

default:

option.setOutputFormat("HTML");

}

option.setOutputFileName(outputfileURL.getPath()+"testReport."+option.getOutputFormat());

runAndRender.setRenderOption(option);

runAndRender.run();

runAndRender.close();

engine.destroy();

Platform.shutdown();

}

}

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

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

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

1. Скопировать папки из StatsCollector в C:\Program Files (x86) \GATE_Developer_8.0\plugins (C:\Program Files (x86) может быть заменено на место установки GATE Developer).

2. Запустить GATE Developer и выбрать File> Manage CREOLE Plugins.

3. Загрузить плагин, нажимая на значок "+" и указывая путь к папке, содержащей ресурс.

4. В окне CREOLE Plugins Manager поставить галочку напротив StatsCollector.

5. Обрабатывающий ресурс для приложения создаётся через Processing Resources> New> StatsCollector. Необходимо указать входные данные, а именно маркеры, статистику для которых необходимо собрать.

6. Плагин должен быть применен к уже аннотированным корпусам, корпусу или документу.

7. Указать Runtime параметры.

8. Запустить плагин через нажатие кнопки “Run this Application”.

9. Если параметр isNeededNewTemplate установлен в значении true, то откроется BIRT RCP Report Designer, через который можно построить новый шаблон отчета (процесс был описан ранее).

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

Для работы с реализованными плагинами использовалась Java Version 8 Update 20 (build 1.8.0_20-b26).

Подробнее о создании приложений и загрузке корпусов в GATE Developer можно узнать на сайте gate.ac.uk и в руководстве пользователя.

Размещено на Allbest.ru

...

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

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