250.45K
Категория: Базы данныхБазы данных

Использование строковых функций при работе с лингвистической картотекой Мs access. (Задачи 1-7)

1.

2.

УДК 81ʼ322::004.65
А.Ю. Станкевич (Гродно)
ИСПОЛЬЗОВАНИЕ СТРОКОВЫХ ФУНКЦИЙ ПРИ РАБОТЕ С
ЛИНГВИСТИЧЕСКОЙ КАРТОТЕКОЙ MS ACCESS
Приводятся условия ориентированных на студентов-филологов задач
на применение встроенных и пользовательских строковых функций
Ms Access. Даются комментированные решения таких задач.
Строковые функции Ms Access являются эффективным инструментом
обработки данных лингвистической картотеки. Ниже приводим условия
задач на применение строковых функций и комментированные примеры
решений. Для компактной записи решений даем SQL-код запроса; важно,
что в режиме SQL аргументы многоместных функций отделяются друг от
друга знаком «,», а в режиме конструктора – знаком «;».
ЗАДАЧА № 1. Дано: поле Voc таблицы DICTIONARY (тип данных:
текстовый; значение этого поля для каждой записи – заголовочное слово
словарной статьи; единый стиль оформления заголовочных слов не
выдержан: часть вокабул набрана с первой прописной буквы, часть –
полностью прописными буквами, часть – строчными буквами).
Задание: преобразовать записи в поле Voc так, чтобы все
заголовочные слова были набраны прописными буквами (иначе говоря –
были набраны в верхнем регистре).
Решение-1:
UPDATE DICTIONARY SET DICTIONARY.Voc = UCase([Voc]);
Решение-2:
UPDATE DICTIONARY SET DICTIONARY.Voc = StrConv([Voc],1);
Комментарий. В решении-1 используется строковая функция UCase,
возвращающая заданную строку, преобразованную в верхний регистр. В
решении-2 используется строковая функция StrConv, возвращающая
заданную строку, преобразованную в соответствии со значением второго
аргумента (здесь равен 1), в верхний регистр.
Вариацией задачи № 1 может стать задача на преобразование
символов строки в нижний регистр через функцию LCase или функцию
StrConv (со значением второго аргумента, равным 2).
ЗАДАЧА № 2. Дано: поле Author таблицы KWIC (тип данных:
текстовый; значение этого поля для каждой записи – набранные через
пробел имя, отчество и фамилия автора; в записях поля Author могут быть
следующие ошибки: имя и/или отчество и/или фамилия автора набраны со
строчной буквы).
Задание: преобразовать записи в поле Author так, чтобы имя, отчество
и фамилия были набраны с первой прописной буквы.

3.

Решение-1:
UPDATE KWIC SET KWIC.Author = StrConv(LCase([Author]),3);
Решение-2:
UPDATE KWIC SET KWIC.Author = StrConv(StrConv([Author],2),3);
Комментарий.
Задача
№2
вводится
для
того,
чтобы
продемонстрировать специфику функции StrConv и (что более важно) –
чтобы продемонстрировать прием использования в качестве аргумента
некоторой функции значения, возвращаемого вложенной функцией.
ЗАДАЧА № 3. Дано: поле Word таблицы TAB_TEXT (тип данных:
текстовый; значение этого поля для каждой записи – словоформа
некоторого текста, словоформы могут повторяться).
Задание: получить обратный словарь словоформ, исключив из него
повторы.
Решение:
SELECT TAB_TEXT.Word
FROM TAB_TEXT
GROUP BY TAB_TEXT.Word, StrReverse([word])
HAVING (((TAB_TEXT.Word) Is Not Null))
ORDER BY StrReverse([word]);
Комментарий. Группировка исключает из выдачи повторяющиеся
элементы. Обратный порядок достигается сортировкой по полю с
реверсированными строками, возвращаемыми функцией StrReverse.
Реверсированная строка не показывается в выдаче. Поскольку возникает
синтаксическая ошибка, если функция StrReverse получает как аргумент
пустую строку, исключение пустых строк (фрагмент SQL-кода: Is Not Null)
обязательно.
Одной из вариаций задачи № 3 может быть задача на получение
обратного частотного словаря (допустим, поле Word содержит начальные
формы множества слов, образованных суффиксальным способом, и
исследуется словообразовательная активность суффиксов); решение:
SELECT TAB_TEXT.Word, Count(TAB_TEXT.Word) AS Freq
FROM TAB_TEXT
GROUP BY TAB_TEXT.Word, StrReverse([word])
HAVING (((TAB_TEXT.Word) Is Not Null))
ORDER BY StrReverse([word]), Count(TAB_TEXT.Word) DESC;
ЗАДАЧА № 4. Дано: поле SingPlur таблицы PARADYGM (тип данных:
текстовый; каждая запись поля содержит две формы: форму единственного
и форму множественного числа некоторой лексемы, формы разделены
знаком «//»).
Задание: распределить содержимое поля SingPlur по двум полям: для
каждой записи в поля Sing и Plur записать формы единственного и
множественного числа соответственно.
Решение:
SELECT Paradygm.SingPlur, Left([SingPlur],InStr([SingPlur],"//")-1) AS

4.

Sing, Mid([SingPlur],InStr([SingPlur],"//")+2) AS Plur
FROM Paradygm;
Комментарий. В решении используются следующие строковые
функции: а) функция Left, возвращающая определенное вторым
аргументом количество знаков с левого края строки, указанной первым
аргументом; б) функция InStr, возвращающая номер позиции первого
вхождения подстроки, определенной вторым аргументом, в строку,
определенную первым аргументом; в) функция Mid, возвращающая из
строки, указанной первым аргументом, подстроку с позиции, указанной
вторым аргументом. Используются вложенные функции.
ЗАДАЧА № 5. Дано: поле Voc таблицы DICTIONARY (тип данных:
текстовый; значение этого поля для каждой записи – заголовочное слово
словарной статьи; единый стиль оформления заголовочных слов не
выдержан: в записи встречаются начальные пробелы).
Задание: исключить начальные пробелы в поле Voc.
Решение:
UPDATE DICTIONARY SET DICTIONARY.Voc = LTrim([Voc]);
Комментарий. В решении используется строковая функция LTrim,
возвращающая копию указанной строки без начальных пробелов.
ЗАДАЧА № 6. Дано: код пользовательской функции DelSpace,
удаляющей начальные, конечные и двойные пробелы (знак пробела
обозначен так: Chr(32)):
Function DelSpace(str)
If Len(str) > 0 Then str = Trim(str)
Do While Len(str) > 0 And InStr(1, str, Chr(32) & Chr(32)) > 0
str = Replace(str, Chr(32) & Chr(32), Chr(32))
Loop
DelSpace = str
End Function
SQL-код запроса с пользовательской функцией DelSpace, очищающей
от некорректных пробелов поле Def таблицы DICTIONARY, таков:
UPDATE DICTIONARY SET DICTIONARY.Def = DelSpace([Def]);
Задание: пользуясь справкой Ms Access, найти описание встроенных
функций Trim, Len, InStr, Replace, инструкций If … Then и Do … Loop и
проанализировать синтаксис пользовательской функции.
Комментарий. На продвинутом этапе обучения можно дать основы
создания пользовательских функций. В пользовательской функции
DelSpace использованы следующие встроенные текстовые функции:
а) функция Trim, возвращающая копию указанной строки без начальных и
конечных пробелов; б) функция Len, возвращающая число знаков в строке;
в) функция InStr (описана в комментарии к задаче № 4); г) функция
Replace, возвращающая строку, где указанная вторым аргументом часть
строки (здесь – два пробела) заменена строкой, указанной третьим
аргументом (здесь – один пробел).

5.

ЗАДАЧА № 7. Дано: код пользовательской функции DelSpace.
Задание: изменить функцию так, чтобы она возвращала строку,
очищенную от знаков перевода строки и двойных пробелов; разделители
слов обозначать так: знак пробела: Chr(32), знак перевода строки: Chr(10).
Решение:
Function ReplaceSymZ(str)
Do While Len(str) > 0 And InStr(1, str, Chr(10)) > 0
str = Replace(str, Chr(10), Chr(32))
Loop
Do While Len(str) > 0 And InStr(1, str, Chr(32) & Chr(32)) > 0
str = Replace(str, Chr(32) & Chr(32), Chr(32))
Loop
ReplaceSymZ = str
End Function
Хотя формулировка задач содержит имена только задействованных в
решении полей, желательно, чтобы студенты работали с таблицами, поля
которых соответствуют возможному множеству атрибутов некоторого
лингвистического объекта. Так, таблица DICTIONARY, являющаяся
упрощенным
представлением
структуры
словарной
статьи
(представлением через одну таблицу, а не системой связанных таблиц),
помимо описанных в условиях задач поля Voc и ключевого поля Code,
может содержать следующие поля: для грамматических и стилистических
помет: поля Gram и Styl (тип данных обоих полей: текстовый, желательно:
задана подстановка), для толкования и иллюстраций: поля Def и Ex (тип
данных обоих полей: поле Memo). Таблица KWIC, помимо описанных в
условиях задач поля Author и ключевого поля Code, может содержать
следующие поля: для левого и правого контекстов: поля LContext и
RContext (тип данных обоих полей: текстовый), для опорного слова: поле
Pattern (тип данных: текстовый), для служебных реверсированных полей,
используемых при обратной сортировке левого / правого контекстов и
опорного слова – поля RevLContext, RevRContext, RevPattern
соответственно (тип данных каждого из трех полей: текстовый); заметим,
что сходную, но с большим числом полей таблицу студенты получают при
экспорте в формат xls фрагмента выдачи поиска по НКРЯ [2].
Знание строковых функций, во-первых, сделает более эффективной
работу студентов-филологов с лингвистической картотекой, во-вторых –
подготовит студентов, обучающихся по направлению «Компьютерное
обеспечение», к изучению аппарата строковых методов Python.
СПИСОК ЛИТЕРАТУРЫ
1. Ms Access: справка [Электронный ресурс] / Microsoft Corporation. – Режим
доступа: http://office.microsoft.com/ru-ru/access-help/FX010064691.aspx. – Дата доступа:
20.09.2012.
2. Национальный корпус русского языка [Электронный ресурс] / НКРЯ. – Режим
доступа: http://www.ruscorpora.ru/. – Дата доступа: 20.09.2012.
English     Русский Правила