Научная статья на тему 'Построитель компьютерного словаря'

Построитель компьютерного словаря Текст научной статьи по специальности «Математика»

CC BY
134
17
i Надоели баннеры? Вы всегда можете отключить рекламу.
Журнал
Системные технологии
ВАК
Область наук
Ключевые слова
"ПОСТРОИТЕЛЬ" / "МАТЕМАТИЧЕСКАЯ МОДЕЛЬ" / "КОМПЬЮТЕРНАЯ МОДЕЛЬ" / "ГРАФ" / "СЕТЬ" / "МОРФОЛОГИЯ" / "СИНТАКСИС" / "СЕМАНТИКА" / "СЛОВОСОЧЕТАНИЕ" / "СИНТАКСИЧЕСКИЙ АНАЛИЗАТОР" / "МОРФОЛОГИЧЕСКИЙ АНАЛИЗАТОР" МОДЕЛИ СИНТАКСИСА" / BUILDER / MATHEMATICAL MODEL / COMPUTER MODEL" / "GRAPH" / "NETWORK" / "MORPHOLOGY" / "SYNTAX" / "SEMANTICS" / "PHRASE" / "PARSER" / "MORPHOLOGICAL ANALYSER" MODEL SYNTAX"

Аннотация научной статьи по математике, автор научной работы — Ясулова Х.С.

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

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

BUILDER COMPUTER DICTIONARY

The article provides an example of a Builder that acts as a source of information and assistant to build different words and expressions which main function is building computer dictionary.

Текст научной работы на тему «Построитель компьютерного словаря»

Литература С.А.Романенко, С.В.Савосин, А.В.Спицын,

1. Fowler M. Refactoring. Improving the П.Б. Фельдман. - СПб.:Изд-во СПбГЭТУ Design of Exiting Code. - Boston: Addison- «ЛЭТИ», 2002

Wesley, 1999. 3. А.Л. Калабин, E.H. Грязнов. Рефак-

2. Реинжиниринг и рефакторинг про- торинг исходного кода. Основные приемы// граммного обеспечения: Учеб. пособие/ Программные продукты и системы. 2013. №2

УДК 004.42 Х.С Ясулова, Дагестанский государственный

педагогический университет

ПОСТРОИТЕЛЬ КОМПЬЮТЕРНОГО СЛОВАРЯ

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

Ключевые слова: «построитель», «математическая модель», «компьютерная модель», «граф», «сеть», «морфология», «синтаксис», «семантика», «словосочетание», «синтаксический анализатор», «морфологический анализатор» модели синтаксиса».

The article provides an example of a Builder that acts as a source of information and assistant to build different words and expressions which main function is building computer dictionary.

Keywords: builder, mathematical model, computer model", "graph", "network", "morphology", "syntax", "semantics", "phrase", "parser", "morphological analyser" model syntax".

Термин построитель (выражений, В русском языке имена и глаго-объектов и т.д.) широко используется в лы являются изменяемыми частями различных приложениях при визуаль- речи. Имена существительные име-ном программировании. Построитель ют наименьшее число форм, но не выступает как источник информации так просто по исходной форме слова и помощник при построении различ- определить все 12 его форм. Необхо-ных слов и выражений. Построитель димость в наличии такой процедуры компьютерного словообразовательного возникает в тех случаях, когда при словаря русского языка должен быть наборе или анализе текста встреча-важной составной частью (службой) ется слово, отсутствующее в слова-текстового редактора и любого ана- ре. Предположим, что таким словом лизатора предложений ЕЯ. оказалось имя «доска». Приложение

(программа) спрашивает у пользователя: Сохранить ли это слово в словаре? Да, мы хотим сохранить это слово в словаре, и не только его, а все 12 его форм.

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

• иметь в наличии все формы этого слова, включая и само слово;

• оптимально разместить их в одной словарной статье;

• иметь возможность выбрать любую из словоформ.

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

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

в-и-р1,р2,... рк; (5.1)

строит все к словоформ этой парадигмы:

S1> S2> . . . Sk

(5.2)

Напомним, морфологическое правило для парадигмы 1 (6 падежных форм имени в единственном числе) имени «доска» имеет следующий вид: «доска-1-а,и,е,у,ой,е;».

По правилу (5.1) образуются словоформ следующим образом.

N1 := Length(s) - п;

S0 := Copy(s, 1, n1);

S[i] := s0 + p., i = 1..k.

Извлечение элементов строки sp = «s-n-p1,p2, . . . pk;» не представляет труда.

Procedure RuleToWordforms (spl: string; Var s: ArrStr_k);

{ Type ArrStr_k = array [1..k] of string}

Var

I: Integer;

S: string;

begin

i := Pos('-', sp); s := Copy(sp, 1, i - 1);

Delete(s, 1, i);

i := Pos('-', sp); n := Val(Copy(sp, 1, i - 1)); S1 := Copy(s, 1, n1);

Delete(sp, 1, i-1);

While sp[1] = ',' do

Begin

Delete(sp, 1, 1);

i := Pos(7, sp); p := Copy(sp, 1, i - 1);

Delete(sp, 1, i-1);

S[i] := s1 + p;

End;

End;

Следующей по важности процедурой является процедура обратная RuleToWordforms; она из последовательности словоформ (5.2) строит правило (5.1).

Процесс построения морфологического правила состоит из нескольких шагов:

• выделение общей левой части для всех слов из (5.1);

• вырезка общей левой части из всех слов (5.1) и формирование последовательности постфиксов;

• формирование морфологического правила.

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

function LeftComm(s, t: string): string ; var

i: integer; begin i: = 1;

if (s='') or (t='') then begin ShowMessage('Слова не определены'); Exit; end;

while (s[i] = t[i]) and (i < length (s)) and (i < length(t)) do inc(i); if s[i] <> t[i] then dec(i); Result := copy(s, 1, i); end;

Если падежные формы имени хранятся в массиве WForms[1..6], то общая левая часть s для них определяется следующими командами:

s:= WForms[1];

for i := 2 to 6 do s := LeftComm(s, WForms [i]);

Предположим, что падежные формы имени хранятся в массивах: WForms1 [1..6] - формы единственного числа; WForms2 [1..6] - формы множественного числа. Следующая функция с параметром num = 1 или 2 формирует морфологическое правило, порождающее падежные формы имени единственного числа (num = 1) или множественного числа (num = 2).

function WFormsToPostFix(num: integer): string;

var

i, LenLeftComm: integer; s, t, parad: string; WFs: array[1..6] of string;

Begin if num = 1 then Begin

parad := '1130'; for i : = 1 to 6 do WFs[i] : = WForms1[i] end

else Begin

parad := '1230'; for i : = 1 to 6 do WFs[i] : = WForms2[i] end;

{Выделяется общая левая часть для всех словоформ } S := WForms1[1]; for i := 2 to 6 do s := Left Comm(s,WFs[i]);

LenLeftComm := Length(s);

{Далее формируется последовательность постфиксов}

S := '';

for i := 1 to 6 do begin t := WFs[i];

Delete(t, 1, LenLeftComm); S := s + t + ','; end;

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

После того как определены имя и его род и одушевленность, можно воспользоваться кнопками Button с надписями: «Формы ед. числа» и «Формы мн. числа». После нажатия на эти ко-

{Формируется мандные кнопки под ними появятся

морфологическое правило}

t := IntToStr(LenLeftComm); if LenLeftComm < 10 then t : =

'0'+t;

Result := WFs[i] + parad + t + s; end;

многострочные редакторы Memo, в которых будут отображены падежные формы рассматриваемого слова.

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

редактировать формы имени. Можно Теперь пора обозначить элемен- изучить правила склонения имен и ты Формы (Form1), в которых будут попытаться программно отобразить отображаться рассматриваемое имя формы имени и, тем самым, облег-

и его формы.

На Forml расположены три па-

чить работу пользователю.

Разработка процедур, образую-

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

правой части отображается словарная статья рассматриваемого сло-

построителя словарной статьи. Здесь ничего не надо изобретать.

ва. В верхней части Forml располо- Нужна кропотливая работа по из-жены две панели: на панели справа учению правила склонения имен и

находятся элементы для распознавания словоформы, а на панели

реализации их в виде процедур. Под каждым редактором Memo

слева - элементы для добавления расположена командная кнопка «Го-

нового слова в словарь. Именно, тово». При нажатии на кнопку «Гото-

эта функция проекта рассматрива- во» выписывается морфологическое

ется ниже. правило (листинг соответствующей

На верхней части панели нахо- процедуры приводится ниже), по

дится элемент Edit (однострочный которому можно будет строить все

редактор), в котором записывает- шесть форм, указанных в соответ-

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

ся исходное слово. Справа от самого ствующем редакторе. Строящаяся

слова расположены два раскрываю- словарная статья будет отображена

на нижней панели напротив надписи: «Словарная статья».

Командная кнопка «Записать в словарь» используется для добавления в словарь полученной словарной статьи.

Командная кнопка «Словарь» используется для показа (Show) и скрытия (Hide) словаря.

var

i, LenLeftComm: integer; s, t: string; begin

if MmNum1.Count < 6 then begin

ShowMessage('Hет словоформ'); Exit; End;

{Если в редакторе MmNum1 перечислены формы имени,

то они переписываются в массив WForms1[1..6]}

for i: = 1 to 6 do WForms1[i]: = MmNum1.Lines[i-1];

{Строка s, представляющая собой последовательность

постфиксов для словоформ из WForms1, формируется функцией WFormsToPostFix(WForms1)}

s:= WFormsToPostFix(WForms1);

{Далее к строке s приписывается само слово DictFormNW и код парадигмы <1130 и получается морфологическое правило}

Рис. 2. Процедура построения s := DictFormNW + '1130' + s;

морфологических правил Label6.Caption:= DictFormNW;

Листинг процедуры для построе- end; ния морфологического правила.

Падежные формы единственного procedure TForm1.Button 4 Click числа имени DictFormNW находи-(Sender: TObject); лись в редакторе MmNum1, поэтому

Рис.1. Построитель компьютерного словаря

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

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

procedure TForml.Button 5 Click (Sender: TObject); var

i, LenLeftComm: integer; s, t: string; begin

if MmNum2.Count < 6 then begin

ShowMessage('Hет словоформ');

Exit;

End;

for i: = 1 to 6 do WForms2[i]: = MmNum1.Lines[i-1];

s:= WFormsToPostFix(WForms2); s := DictFormNW + '1230' + s; Label6.Caption:= DictFormNW; end;

Функция WFormsToPostFix (s: array[1..6] of string) также очень проста имеет следующий вид.

function WFormsToPostFix(WFs: array[1..6] of string): string; var

i, LenLeftComm: integer;

s, t: string;

Begin

S := WForms1[1]; { s -

исходная форма имени }

for i :=2 to 6 do s := LeftComm(s, WFs[i]);

{ s - общая левая часть словоформ WFs[1..6] }

LenLeftComm := Length(s); s:= '';

for i :=1 to 6 do begin t := WFs[i];

Delete(t, 1, LenLeftComm); S := s + t + ','; end;

{ s - последовательность постфиксов, вырезанных из

каждой формы WFs[1..6] и разделенных запятой }

t := IntToStr(LenLeftComm); if LenLeftComm < 10 then t := '0' + t + ':';

Result := t + s; end;

Из приведенных процедур видно, что построитель словарной статьи достаточно простая программа, если под построителем подразумевать программу, которая из словоформ WFs[1..6] строить соответствующее правило для восстановления элементов WFs[1..6]. Например, если

WFs[1..6] = (доска, доски, доске, доску, доской, доске)

то WFormsToPostFix(WFs) = '04:а,и,е,у,ой,е'.

Однако рассмотренные выше процедуры составляют менее 5% от общего объема программы-построителя словарной статьи. Программа усложняется настолько, насколько точно она сможет «угадать» формы отсутствующего в словаре слова. Работа пользователя упрощается настолько, насколько точно программа «угадает» формы имени. Морфология имен в русской грамматике настолько сложна множеством исключительных случаев, что их перечисление и реализация занимает много времени и увеличивает объем кода программы.

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

Таким образом, разработка построителя компьютерного словаря может быть интересна как начинающему, так и опытному программисту.

Литература

1. Ножов И.М. Морфологическая и синтаксическая обработка текста (модели и программы) М., 2003, Канд. диссертация.

2. Слобин Д., Грин Дж.. Психолингвистика. М., «Прогресс», 1976, 350 с.

3. Тестелец Я.Г.. Введение в общий синтаксис. М., Российский государственный гуманитарный университет, 2001, 798 с.

4. Тузов В.А. Математическая модель языка. - Л., Изд-во ЛГУ, 1984.

5. Тузов В.А. Синтаксическая структура русского языка. //Вестник СПбГУ. Сер.1, 1997, вып.1 (№17).

6. Харари Ф. Теория графов. М., «Мир», 1874, 344 с.

7. Шихиев Ф.Ш. Формализация и сетевая формулировка задачи синтаксического анализа. Канд. диссертация.

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