Научная статья на тему 'РАЗРАБОТКА ПРОГРАММНОГО МОДУЛЯ ДИНАМИЧЕСКОГО УПРАВЛЕНИЯ ВВОДОМ-ВЫВОДОМ БИБЛИОГРАФИЧЕСКИХ ДАННЫХ'

РАЗРАБОТКА ПРОГРАММНОГО МОДУЛЯ ДИНАМИЧЕСКОГО УПРАВЛЕНИЯ ВВОДОМ-ВЫВОДОМ БИБЛИОГРАФИЧЕСКИХ ДАННЫХ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
122
11
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ОБРАБОТКА ДАННЫХ / РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ / ЯЗЫК ПРОГРАММИРОВАНИЯ PYTHON / ДИНАМИЧЕСКОЕ УПРАВЛЕНИЕ ПРОГРАММНЫМИ МОДУЛЯМИ / DATA PROCESSING / SOFTWARE DEVELOPMENT / PYTHON / DYNAMIC MODULE SELECTION

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Петров Евгений Николаевич, Гагарина Лариса Геннадьевна

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Петров Евгений Николаевич, Гагарина Лариса Геннадьевна

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

DEVELOPMENT OF SOFTWARE MODULE OF DYNAMIC CONTROL FOR INPUT/OUTPUT OF BIBLIOGRAPHIC DATA

The complexity of the bibliographic data processing lies in the variety of acceptable standards and the lack of multifunctional software that can be extended for new formats and can process data containing insignificant errors. The work describes the software input/output module dynamic control as a part of the software complex of bibliographic data processing. The analysis of the problem situation within the framework of the subject area, related to multiformat bibliographic data processing, has been carried out. A method of solving the given problem due to placing the processing modules beyond the functional nucleus and due to creating the decomposition extendable system has been proposed. The article includes the general principles of the software model and the implementation details in the programming language Python. The problem of multiple acceptable bibliographic data standards and numerous proprietary formats of the organizations engaged in bibliographic data processing has been solved. The developed software for input/output dynamic control can be applied within the framework of the software complex for bibliographic data processing.

Текст научной работы на тему «РАЗРАБОТКА ПРОГРАММНОГО МОДУЛЯ ДИНАМИЧЕСКОГО УПРАВЛЕНИЯ ВВОДОМ-ВЫВОДОМ БИБЛИОГРАФИЧЕСКИХ ДАННЫХ»

ИНФОРМАЦИОННО-КОММУНИКАЦИОННЫЕ

ТЕХНОЛОГИИ INFORMATION-COMMUNICATION TECHNOLOGIES

УДК 004.457:(01.004.6) DOI: 10.24151/1561-5405-2019-24-4-415-422

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

Е.Н. Петров, Л.Г. Гагарина

Национальный исследовательский университет «МИЭТ», г. Москва, Россия

gagar@bk.ru

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

Ключевые слова: обработка данных; разработка программного обеспечения; язык программирования Python; динамическое управление программными модулями

Для цитирования: Петров Е.Н., Гагарина Л.Г. Разработка программного модуля динамического управления вводом-выводом библиографических данных // Изв. вузов. Электроника. - 2019. - Т. 24. - № 4. - С. 415-422. DOI: 10.24151/15615405-2019-24-4-415-422

Финансирование работы: работа выполнена при финансовой поддержке Фонда содействия инновациям в рамках проекта «Разработка облачного сервиса преобразования библиографических данных на основе алгоритмов машинного обучения».

© Е.Н. Петров, Л.Г. Гагарина, 2019

Development of Software Module of Dynamic Control for Input/Output of Bibliographic Data

E.N. Petrov, L.G. Gagarina

National Research University of Electronic Technology, Moscow, Russia gagar@bk.ru

Abstract: The complexity of the bibliographic data processing lies in the variety of acceptable standards and the lack of multifunctional software that can be extended for new formats and can process data containing insignificant errors. The work describes the software input/output module dynamic control as a part of the software complex of bibliographic data processing. The analysis of the problem situation within the framework of the subject area, related to multiformat bibliographic data processing, has been carried out. A method of solving the given problem due to placing the processing modules beyond the functional nucleus and due to creating the decomposition extendable system has been proposed. The article includes the general principles of the software model and the implementation details in the programming language Python. The problem of multiple acceptable bibliographic data standards and numerous proprietary formats of the organizations engaged in bibliographic data processing has been solved. The developed software for input/output dynamic control can be applied within the framework of the software complex for bibliographic data processing.

Keywords: data processing; software development; Python; dynamic module selection

For citation: Petrov E.N., Gagarina L.G. Development of software module of dynamic control for input/output of bibliographic data. Proc. Univ. Electronics, 2019, vol. 24, no. 4, pp. 415-422. DOI: 10.24151/1561-5405-2019-24-4-415-422

Funding: the work has been financial supported by FASIE as a part of «Development of bibliographical data processing cloud service» project.

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

Под допустимыми форматами представления библиографических данных понимается совокупность комбинаций стандартов оформления библиографических ссылок (ГОСТ 7.0.5-2008 [1], ISBD [2], MLA [3] и др.) и типов файлов (txt, doc, xls, html и др.), а также собственных форматов библиографических данных, создаваемых организациями для внутренних нужд. Под отклонениями от форматов, возникающими из-за человеческого фактора, понимаются опечатки, ошибки оформления и копирования данных.

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

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

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

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

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

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

Формат библиографической структуры учитывает наиболее востребованные логические компоненты библиографической записи [4]:

Библиографическая запись { автор(ы); название статьи; название журнала; год издания; номер издания; страницы.

}

Рис.1. Структурная схема программного модуля Fig.1. Software module structure

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

Библиографическая структура { Петров Е.Н.;

Восстановление простых линейных

и итерационных функций средствами

MATLAB;

Молодой ученый;

2017;

№5

52-55

}

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

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

Современные языки, используемые для промышленного программирования, позволяют загружать отдельные модули или динамические библиотеки «на лету» [6, 7]. Это верно не только для интерпретируемых языков программирования (Python, Perl), но и для компилируемых (C), поэтому для большинства систем этот принцип реализуется в рамках одного исполняемого файла. Если для разработки выбирается язык программирования, не поддерживающий динамическую загрузку библиотек, функциональное ядро строится на основе модели «клиент - сервер». В этом случае клиентское приложение реализуется с помощью выбранного языка, а серверное - на языке программирования, поддерживающем динамическую загрузку библиотек.

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

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

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

Программная реализация. Рассмотрим практическую реализацию перечисленных принципов в рамках разработки программного модуля динамического управления вводом-выводом библиографических данных с помощью языка программирования Python. Интерпретируемость выбранного языка программирования позволяет реализовать программный модуль без использования модели «клиент - сервер» и хранить обрабатывающие модули локально (рис.2) [8].

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

• --input_module: входной обрабатывающий модуль (по умолчанию -gost7052008.py);

• --output_module: выходной обрабатывающий модуль (по умолчанию -gost7052008.py);

• --input_file: путь к входному файлу;

• --output_file: путь к выходному файлу (по умолчанию - output.txt);

• --version: сведения о программном модуле;

• --help: сведения об аргументах интерфейса командной строки.

Аргументы командной строки программного модуля имеют следующие приоритеты и соответствующие им режимы работы: если указан аргумент --help, то программный модуль выводит только сведения об аргументах интерфейса командной строки; если указан аргумент --version, но не указан аргумент --help, то программный модуль выводит только сведения о программном модуле; если не указаны ни аргумент --version, ни аргумент --help, то программный модуль считывает значения остальных аргументов и передает пути к входному и выходному файлам в соответствующие обрабатывающие модули. Разбор строки аргументов проводится с помощью библиотеки getopt.

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

Рис. 2. Файловая структура программного модуля

Fig.2. Software module file structure

Приведем фрагмент кода для загрузки выбранного модуля на языке Python:

import importlib

input bibl handler module = importlib.im.port module( 1submodules.' + input module )

output_bibl_handler_module = input_bibl_handler_module if input_module != output_module:

output bibl handler module = importlib.import module( ^submodules.' + output_module )

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

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

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

Фрагмент кода для получения объекта обрабатывающих подмодулей, импорта и экспорта библиографических данных на языке Python имеет следующий вид:

input bibl handler = getattr( input bibl handler module, BibliographyHandler')

output bibl handler = getattr( output bibl handler module, BibliographyHandler')

raw bibliographic data = input bibl handler.load( input file ) processed_bibliographic_data = None

# Обработка raw bibliographic data и заполнение pro-cessed_bibliographic_data

output bibl handler.save( output file, processed bibliographic data)

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

class BibliographyHandler: def load( path ):

f = open( path ) return f.read().split( л\п' ) def save( path, data ):

f = open( path, ,w' ) f.writelines( data )

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

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

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

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

Литература

1. ГОСТ 7.0.5-2008. Библиографическая ссылка. Общие требования и правила составления. -М.: Изд-во стандартов, 2008. - 22 с.

2. ISBD: International Standard Bibliographic Description. Consolidated Edition. - ISBD Review Group, 2011. - 364 p.

3. Iverson C., Christiansen S., Flanagin A. AMA manual of style. - 10 ed. - N.Y.: Oxford University Press, 2007. - 1010 p.

4. Tkaczyk D., Collins A., Sheridan P., Beel J. Machine learning vs. rules and out-of-the-box vs. retrained: An evaluation of open-source bibliographic reference and citation parsers // arXiv preprint arXiv:1802.01168. -2018. - 10 p. - URL: https:/arxiv.org/pdf/1802.01168.pdf (дата обращения: 21.06.2019).

5. Citeseerx: Ai in a digital library search engine / J. Wu, K. Williams, H. Chen et al. // AI Magazine. -2015. - Vol. 36. - No. 3. - P. 35-48.

6. A dynamic and service-oriented component model for python long-lived applications / T. Calmant, J.C. Americo, O. Gattaz et al. // Proceed. of the 15th ACM SIGSOFT symposium on Component Based Software Engineering. - 2012. - P. 34-40.

7. Yallop J., Sheets D., Madhavapeddy A. A modular foreign function interface // Science of Computer Programming. - 2018. - Vol. 164. - P. 82-97.

8. Гагарина Л.Г., Акимов К.С. Метод ускоренной разработки прототипов программного обеспечения // Оборонный комплекс - научно-техническому прогрессу России. - 2013. - №1 (117). - С. 3-5.

Поступила в редакцию 27.03.2019 г.; после доработки 27.03.2019 г.; принята к публикации 14.05.2019 г.

Петров Евгений Николаевич - аспирант Института системной и программной инженерии и информационных технологий Национального исследовательского университета «МИЭТ» (Россия, 124498, г. Москва, г. Зеленоград, пл. Шокина, 1), fiddenmar@gmail.com

Гагарина Лариса Геннадьевна - доктор технических наук, профессор, директор Института системной и программной инженерии и информационных технологий Национального исследовательского университета «МИЭТ» (Россия, 124498, г. Москва, г. Зеленоград, пл. Шокина, 1), gagar@bk.ru

References

1. GOST 7.0.5-2008. Citations. General requirements and composition. ISPF. Moscow, Standarty Publ. 2008. 22 p. (In Russian).

2. ISBD: International Standard Bibliographic Description. Consolidated Edition. ISBD Review Group, 2011. 364 p.

3. Iverson C., Christiansen S., Flanagin A. AMA Manual of Style. 10 ed. N.Y.: Oxford University Press, 2007. 1010 p.

4. Tkaczyk D., Collins A., Sheridan P., Beel J. Machine learning vs. rules and out-of-the-box vs. retrained: An evaluation of open-source bibliographic reference and citation parsers. arXiv preprint arXiv:1802.01168, 2018. 10 p.

5. Wu J., Williams K., Chen H. Citeseerx: Ai in a digital library search engine. AI Magazine, 2015, vol. 36, no. 3, pp. 35-48.

6. Calmant T., Americo J.C., Gattaz O., Donsez D., Gama K. A dynamic and service-oriented component model for python long-lived applications. Proceedings of the 15th ACM SIGSOFT symposium on Component Based Software Engineering. 2012, pp. 34-40.

7. Yallop J., Sheets D., Madhavapeddy A. A modular foreign function interface. Science of Computer Programming, 2018, vol. 164, pp. 82-97.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

8. Gagarina L.G., Akimov K.S. Method of rapid software prototype developing. Oboronnyj kompleks -naucno-tehniceskomu progressu Rossii = Defense Industry Achievements - Russian Scientific and Technical Progress, 2013, no.1 (117), pp. 3-5. (In Russian).

Received 27.03.2019; Revised 27.03.2019; Accepted 14.05.2019. Information about the authors:

Evgeny N. Petrov - PhD student of the Institute of System and Software Engineering and Computer Science, National Research University of Electronic Technology (Russia, 124498, Moscow, Zelenograd, Shokin sq., 1), fiddenmar@gmail.com

Larisa G. Gagarina - Dr. Sci. (Eng.), Prof., Director of the Institute of System and Software Engineering and Computer Science, National Research University of Electronic Technology (Russia, 124498, Moscow, Zelenograd, Shokin sq., 1), gagar@bk.ru

(-N

Вниманию читателей журнала

«Известия высших учебных заведений. Электроника»

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

• по каталогу «Газеты, журналы» АО Агентство «Роспечать» в любом почтовом отделении. Подписной индекс 47570

• по прямой подписке в АО Агентство «Роспечать»: www.press.rosp.ru

• по объединенному каталогу «Пресса России» ООО «Агентство «Книга-Сервис» в любом почтовом отделении. Подписной индекс 38934

• через редакцию - с любого номера и до конца года

Подписку на электронную версию журнала можно оформить на сайтах:

• Научной электронной библиотеки: www.elibrary.ru

• ООО «Агентство «Книга-Сервис»: www.rucont.ru;www.akc.ru;

www.pressa-rf.ru

• ООО «УП Урал-Пресс»: www.delpress.ru

• ООО «ИВИС»: www.ivis.ru ---

i Надоели баннеры? Вы всегда можете отключить рекламу.