В данном докладе рассматриваются проблемы быстрого ввода данных в электронный каталог Ирбис, и пути их решения с помощью программы MS Excel 2007 и кода Perl. Для наглядности подробно рассматривается пример заполнения полей для записей о диссертациях Института экономики УрО РАН.
Если характеризовать работу в электронном каталоге Ирбис с точки зрения скорости ввода данных, можно отметить определенные преимущества и недостатки. Неоспоримым достоинством Ирбис являются следующие возможности:
При поиске решения вопроса об ускоренном заполнении полей следует отметить, что Ирбис импортирует и экспортирует записи в файле формата .txt, который имеет унифицированную структуру. Формат .txt обеспечивает доступ к файлу на любой платформе (Windows, Unix).
Отдельные записи в экспортированном файле четко разделены, каждая строка отдельной записи имеет следующую структуру:
Одна запись электронного каталога может содержать около 20-25 строк, при этом некоторые поля записи являются составными, и включают в себя информацию из нескольких подполей.
Таким образом, экспортированный файл имеет очень удобную структуру для обработки с помощью языка программирования. Использование языка программирования позволит облегчить работу каталогизатора по вводу данных, которые повторяются в каждой записи для одного вида документов (поле 900: Вид документа). Язык программирования Perl прекрасно подходит для решения этой задачи в силу следующих преимуществ:
-
через сеть CPAN1.
-
Perl был создан для лучшего понимания людьми, а не только компьютерами2.
-
Perl широко используется для обработки текстовых данных.
-
Perl очень императивен, и позволяет решить одну и ту же задачу сразу несколькими способами.
Для решения проблемы выбора необходимых для заполнения полей представляется возможным предложить каталогизатору упрощенный интерфейс, в котором все поля для ввода расположены на одной странице. Для создания такого интерфейса с минимальными временными затратами можно использовать вкладку «Разработчик» программы Excel 2007 пакета Microsoft Office. MS Excel позволяет создавать выпадающее меню с любым списком элементов, блокировать отдельные ячейки, чтобы сделать их недоступными для ввода, а также экспортировать данные в формате .csv
1, который, в свою очередь, прекрасно подходит для работы в Perl. Рассмотрим процесс создания записей о диссертациях с помощью MS Excel и кода Perl.
Решение: Форма для ввода данных MS Excel
В первую очередь, необходимо создать упрощенную форму для ввода записей о диссертациях в MS Excel, в которую войдут только уникальные поля записи: Ф. И. О. автора, название диссертации, степень автора, специальность, и т. д. Эту форму позднее можно будет скопировать и вставить в другие листы. Таким образом, в одном файле MS Excel каталогизатор сможет ввести сразу несколько записей о диссертациях.
Чтобы создать форму ввода, воспользуемся вкладкой «Разработчик». Если вкладка не представлена в верхней части окна MS Excel, ее необходимо включить:
-
Кнопка Office -> Параметры Excel -> Показывать вкладку «Разработчик» на ленте
Откроем чистый лист MS Excel и назовем его «Форма», и создадим на нем форму для ввода данных, озаглавив каждую ячейку для удобства пользователя, и добавив выпадающее меню для следующих параметров:
-
Степень (кандидат или доктор экономический наук)
-
Год публикации (1991 - 2015)
-
Инициалы каталогизатора (БИС, ВФК)
Для создания выпадающего меню воспользуйтесь вкладкой «Разработчик»:
-
Вкладка «Разработчик» -> Вставить -> Элементы управления формы -> Поле со списком.
-
Задайте область выпадающего меню с помощью мыши.
Для добавления значений для выбора в выпадающее меню необходимо будет указать источник значений. Целесообразно создать отдельный лист в книге Excel, на котором будут представлены все значения для выпадающего меню (См. Рис. 1) – назовем его «Данные».
Рисунок 1. Лист MS Excel с данными для выпадающего меню.
Также имеет смысл создать дополнительный лист для вывода всех заполненных полей – назовем его «Сводный лист». Для того, чтобы выпадающее меню начало функционировать, вызовите подменю объекта правой кнопкой мыши:
-
Правый щелчок по выпадающему меню -> Формат объекта -> Левый щелчок мыши по кнопке справа от строки «Формировать список по диапазону»
-
Войдите в Лист «Данные», и выделите мышкой нужный Вам диапазон вариантов для выпадающего меню.
-
В строке диапазона появится формула вида Данные!$F$6:$F$7, где Данные – это название Листа, а $F$6:$F$7 – это диапазон ячеек со значениями для выпадающего меню.
В подменю «Формат объекта» необходимо создать указать ячейку, в которую MS Excel выведет порядковый номер значения, которое пользователь выбрал из выпадающего меню. Для всех результатов ввода через выпадающее меню зарезервируем отдельную строку в Листе «Сводные данные».
Для того, чтобы отобразить все данные, которые были введены каталогизатором нескольких формах для ввода, на одном листе «Сводные данные», воспользуемся следующими формулами:
-
Для полей, которые заполняются вручную с клавиатуры, используем формулу равенства =Форма!E5, связав ячейку вывода данных в листе «Сводные данные» с ячейкой ввода данных в листе «Форма».
-
Для полей с выпадающим меню необходимо преобразовать порядковый номер варианта, который выбрал каталогизатор, в собственно значение поля. Для этого можно использовать формулу Индекс: =ИНДЕКС(Данные!C6:C7| 'Сводный лист'!C5), где Данные!C6:C7 – это название листа и диапазон значений выпадающего меню, а 'Сводный лист'!C5 – это название листа и ячейка, в которой отображается порядковый номер значения, которое выбрал пользователь.
Важно отметить, что для каждой записи об одной диссертации важно выделить одну строку. Если Вы используете несколько листов ввода в одном файле, необходимо расположить введенные данные в Сводном листе следующим образом (См. Рис. 2):
Рисунок 2. Расположение записей о диссертации в Сводном листе
Следующий этап работы – сохранение введенных данных. Поскольку все данные записи о диссертации располагаются на Сводном листе, нам необходимо сохранить только одну страницу всего файла MS Excel. Для сохранения данных, которые впоследствии будут обрабатываться с помощью кода Perl, удобно использовать формат .csv. Файл данного формата использует запятые для разделения значений. Поскольку два значения записи о диссертации также могут содержать запятые (поля Название диссертации и Ключевые слова), необходимо изменить разделитель в файле csv. с запятой на другой символ - например, символ «|», который может встретиться среди значений полей с очень низкой долей вероятности. Чтобы изменить разделитель, перейдите в меню «Пуск»:
-
Пуск -> Настройка -> Панель Управления -> Язык и региональные стандарты -> Региональные параметры -> Настройка
-
В поле «Разделитель элементов списка» введите символ «|» (Shift+/ на английской раскладке клавиатуры) -> OK
После сохранения файла со сводным листом в формате .csv, откроем файл в программе Блокнот, и сохраним его в формате .txt с прежним именем (dissertation_data.txt). Если мы отменим
Перенос по словам в меню
Формат в Блокноте, записи будут иметь следующий вид (См. Рис. 3):
-
Нечетные строки содержат цифровые данные о выборе значений из выпадающего меню каталогизатором, и не представляют интереса.
-
Каждая четная строка содержит полную запись о диссертации; значения уникальных полей разделены символом «|».
Рисунок 3. Файл dissertation_data.txt (с использованием Переноса по словам)
Решение: Создание кода Perl для импорта записей в Ирбис
Для того, чтобы импортировать данные в каталог Ирбис, нам необходимо преобразовать файл dissertation_data.txt таким образом, чтобы он включал все данные о диссертациях, структурированные определенным образом для Ирбис. Мы используем код Perl для преобразования файла. Строки, начинающиеся с символа «#», содержат к комментарии к коду, и не читаются системой при работе кода.
-
Вводим необходимые настройки.
-
#usr/bin/perl #ссылка на Perl
use warnings; #отображать ошибки
use locale; #использовать местный набор символов
|
-
Открываем файл dissertation_data.txt.
-
#открыть файл с данными, отобразить ошибку в случае неудачи
open (IN, "< dissertation_data.txt") || die " Файл не найден или не может быть открыт";
|
-
Читаем файл построчно, для каждой строки применяем действия внутри фигурных скобок {}.
-
while() # прочитать весь файл построчно
{ # открываем петлю
|
-
Пропускаем ненужные строки.
-
next if /^[||]/; # пропустить строчки со связанными ячейками
|
-
Присваиваем ярлыки для переменных элементов, разделенных символом «|».
-
my ($lastname,$fullinitials,$degree,$specialization,
$year,$librarian,$inumber,$pages,$title,$keywords) = split(/\|/);
|
-
Генерируем дату ввода данных и переводим ее в формат «ггггммдд».
-
#генерировать дату ввода
my @timeData = localtime(time);
my $startpoint = "1900";
my $current_year = "$timeData[5]"+"$startpoint";
my $month= "$timeData[4]"+1;
my $date= join "", "$current_year", "0", "$month", "$timeData[3]";
|
-
Извлекаем инициалы из полного имени автора.
-
#генерировать инициалы
@names = split(/\s/, $fullinitials); my @chars1= split(//, $names[0]); my @chars2= split (//, $names[1]);
my $initials= join "", "$chars1[0]", ".", " ", "$chars2[0]", ".";
|
-
Создаем и открываем новый файл для экспорта данных.
-
open (OUT, ">> dissertation_import.txt") || die "Невозможно создать файл";
|
-
Объединяем постоянные и уникальные поля в новом текстовом файле для импорта в Ирбис.
-
print OUT "\n", "#920: PAZK", "\n", "#102: RU", "\n", "#101: rus", "\n", "#919: ^Arus^N02^KPSBO", "\n", "#710: ^A", "$title", "^CЕкатеринбург", "\n","#210: ^D", "$year", "^4Екатеринбург", "\n", "#10: ^Aнет^DБ.ц.", "\n", "#900: ^Tb^B05^Cm^Xk", "\n", "#700: ^A", "$lastname", "^B","$initials","^G","$fullinitials", "\n",
"#215: ^A", "$pages", "с.", "\n", "#328: ^A", "$degree", "^N", "$specialization", "^BИнститут экономики УрО РАН, г. Екатеринбург", "\n", "#907: ^CПК^A", "$date", "^B", "$librarian", "\n", "#964: 06", "\n", "#610: ", "$keywords", "#106: ^Ah", "\n", "#621: (Д)", "\n", "#200: ^A", "$title", "^E", "$degree", " ", " :", " ", "$specialization", "^BРукопись^F", "$initials","$lastname", "\n", "#910: ^A0^B", "$inumber", "^", "$date", "^DХР^EБ.ц.^11", "\n", "#905: ^F2^D1^J1^S1", "\n", "*****", "\n",;
|
-
Закрываем оба файла, выводим подтверждение об успешном экспорте файлов.
-
} # закрыть петлю
close (OUT);
close (IN);
print "Поздравляем! Данные успешно экспортированы.\n";
|
Таким образом, файл dissertation_import.txt готов для импорта в каталог Ирбис.
Область применения
Приведенный в данном докладе код Perl планируется модифицировать для ввода данных о содержании журналов, которые хранятся в Библиотеке Института экономики УрО РАН. Для получения записей о статьях журналов с сайтов издательств мы планируем использовать модуль HTML. В новом коде также будет активно использоваться Regex для распознавания элементов содержания журнала: имен авторов, названий страниц, номеров страниц и названий тематических рубрик оглавления журнала1.