Метод автоматической генерации правил синтаксической сегментации
Манушкин Е.С. (EugeneLebowsky@mail. ru), Московский государственный институт электроники и математики Клышинский Э.С. (klyshinsky@mail. ru) Институт прикладной математики им. М.В. Келдыша РАН
1. Введение
Классический подход решения задач автоматической обработки текстов (АОТ) путем полного анализа обладает экспоненциальным ростом вычислительных затрат. Кроме того, создание систем правил для АОТ сопоставимо со сложностью создания программного обеспечения для таких систем. Количество правил в реальных задачах таково, что в них также легко запутаться, как в многочисленном и объемном программном коде. В связи с этим в последнее время начали активно развиваться методы, позволяющие автоматически генерировать правила для АОТ. Это произошло благодаря тому, что в сети Интернет накопилось достаточное количество параллельных текстов, в которых одна и та же информация примерно одними и теми же словами изложена на разных языках. Ярким примером такой системы может служить система Google Translate (http:\\translate.google.com\). Однако генеративная модель не обеспечивает решения таких задач, как составление рефератов, машинный диалог, анализ содержимого текстов.
Для ускорения работы синтаксического анализа обычно используется предшествующий ему этап синтаксической сегментации, который пытается выделить априорную информацию о структуре предложения на основе выделения его фрагментов [1]. Одной из задач синтаксической сегментации является определение границ структурных единиц (фрагментов, сегментов, групп) предложения. Если границы фрагментов определять в соответствии с границами правил синтаксического анализа, то можно получить существенный прирост в скорости работы последнего. Однако на практике выделение и написание правил синтаксической сегментации является трудоемкой и сложной задачей, а организация связей между правилами синтаксического анализа и этапа синтаксической сегментации еще больше увеличивает эту сложность. В связи с этим встает проблема автоматической
генерации правил сегментации, одним из решений которой может являться использование имеющихся правил синтаксического анализа.
2. Необходимые теоретические сведения
Будем считать, что правила синтаксического анализа в той или иной форме записаны в виде БНФ. В дальнейшем изложении будем опираться на следующие теоретические сведения [2].
Под грамматикой будем понимать четверку 0={УЫ, УТ, Р, Е}. Здесь УК -множество нетерминалов, УТ - множество терминалов, Р - набор правил, описывающих цепочки, принадлежащие описываемому языку, Е - начальный символ грамматики. В нашем случае терминалом будет являться некоторый шаблон, который будет применяться для поиска слова, отвечающего заданным требованиям, на заданном месте в предложении. Таким образом, в отличие от положений, принятых в теории компиляторов, у нас входная строка не будет состоять из терминалов, так как терминал будет использоваться как шаблон для сравнения со словами, входящими в исходный текст. Более того, один терминал может успешно сравниваться с различными словами входного текста.
Для унификации знаки препинания также будем считать словами.
Если а любая строка символов грамматики, то Р1Я8Т(а) - это множество терминалов, с которых могут начинаются строки, выводимые из а. Если а ^е, то ее Б1Я8Т(а). Здесь е - пустая цепочка.
Б1Я8Т(Х) вычисляется для всех символов X грамматики с применением следующих правил.
• Если X - терминал, то Б1Я8Т(Х) = {X}
• Если Х=е, то добавляем е к Б1Я8Т(Х)
• Если X - нетерминал и Х®У1У2_Ук - продукция, то помещаем а в Б1Я8Т(Х)
если для некоторого 1 аеР1Я8Т(У;) и ееР1Я8Т(У|) V] таких что У1У2^У;-
*
1 ^е. В последнем случае добавляем е к Б1Я8Т(Х).
Правила применяются до тех пор, пока не окажется больше терминалов и е, для которых их можно применить.
Если а любая строка символов грамматики, то ЬЛ8Т(а) - это множество терминалов,
*
которыми могут заканчиваться строки, выводимые из а. Если а ^е, то ее ЬЛ8Т(а).
Правила построения LAST(X) для символов грамматики аналогичны правилам построения FIRST(X) с той лишь разницей, что рассмотрение цепочки ведется не слева направо, а справа налево.
Заметим, что для грамматик, не содержащих и не порождающих е-цепочки, правила вычисления FIRST, LAST и вводимых ниже FIRST2 и LAST2 будут значительно проще. Рассмотрением именно этого класса грамматик мы и займемся в данной работе.
Поясним вышесказанное на примере. Пусть имеется следующая грамматика : <SENT> ::=<A1>
<A1>::=<A3><A4>\<A4> (1)
<A3>::=[1]\[1]<A3>\[2]<A3>
<A4>:: =[2][3]\[2][4]\[4][5][6]
Здесь терминалы ограничиваются квадратными, а нетерминалы - треугольными скобками.
Тогда FIRST и LAST для продукций будут следующими (2): FIRST(SENT) = {[1], [2], [4]} LAST(SENT) = {[3], [4], [6]}
F1RST(A1) = {[1], [2], [4]} LAST(A1) = {[3],[4],[6]}
F1RST(A3) = {[1], [2]} LAST(A3) = {[1]} (2)
F1RST(A4) = {[2],[4]} LAST(A4) = {[3],[4],[6]}
Введем новое множество ONLY(a), которое будет содержать множество
цепочек, выводимых из a и состоящих из единственного терминального символа.
*
ONLY(a)={a}, a: a ^a, aeVT.
Для грамматики (1) ниже приводятся значения множеств ONLY (см. (3)).
ONLY(SENT) = {0}
ONLY(A1) = {0} (3)
ONLY(A3) = {[1]} ONLY(A4) = {0}
Заметим, что если aeVT, то ONLY(a)={a}.
На основе полученной информации можно рассчитать значения функций FIRST2 и LAST2, показывающих с каких двух терминалов могут начинаться цепочки, генерируемые при помощи правила или какими двумя терминалами такие цепочки
могут заканчиваться. При этом будем считать, что грамматика не содержит е-символов. В связи с этим алгоритм будет иметь некоторые отличия от приведенного
в [2].
Если а любая последовательность символов грамматики, то Р1Я8Т2(а) - это множество пар терминалов, с которых могут начинаться терминальные цепочки, выводимые из а.
Если в любая последовательность символов грамматики, то ЬЛ8Т2(Р) - это множество пар терминалов, которыми могут заканчиваться терминальные цепочки, выводимые из р.
Б1Я8Т2 в нашем случае рассчитывается по следующему алгоритму. Пусть рассматривается продукция вида Б^Л1Л2а, причем а может являться произвольной (в том числе и пустой) цепочкой символов. В этом случае возможны следующие варианты.
• Если 6еОКЬУ(Л1), то ЬсеР1Я8Т2(Б), где сеР1Я8Т(Л2).
• Если Л^УЬТ, то Р1Я8Т2(Л1)еР1Я8Т2(Б);
ЬЛ8Т2 вычисляется аналогичным образом, но при этом рассуждения применяются не слева направо, а справа налево к продукциям вида Б^аЛ2 Л^
Для пояснения вернемся к примеру. В (4) можно видеть результаты расчетов множеств Б1Я8Т2 и ЬЛ8Т2 для грамматики, приведенной в (1). ЕШЕПрЕт) = {[1][1], [1][2], [2][1], [2][2], [2][3], [2][4], [4][5], [1][4]} ¥ШШ(Л1) = {[1][1], [1][2], [2][1], [2][2], [2][3], [2][4], [4][5], [1][4]} ¥ШШ(Л3) = {[1][1], [1][2], [2][1], [2][2]}
¥ШШ(Л4) = {[2][3], [2][4], [4][5]} (4)
ЬЛ8Т2(8ЕЫТ) = {[2][3], [2][4], [5][6]}
ЬЛШ(Л1) = {[2][3], [2][4], [5][6]}
ЬЛШ(Л3) = {[1][1], [2][1]}
ЬЛШ(Л4) = {[2][3], [2][4], [5][6]}
Кроме того, введем множества Б1Я8Т2' и ЬЛ8Т2', определяемые только по первому пункту приведенного алгоритма. Эти множества будут содержать в себе лишь те пары терминалов, которые появляются лишь в данном правиле, без «наследования» пар терминалов от других правил.
Для грамматики (1) соответствующие множества будут иметь следующий вид.
F1RST2 '(SENT) = {0} LAST2'(SENT) = {0}
F1RST2 '(A1) = {[1][2], [1][4]} LAST2'(A1) = {0}
F1RST2 '(A3) = {[1][1], [1][2], [2][1], LAST2'(A3) = {[1][1], [2][1]} (5)
[2][2]} LAST2'(A4) = {[2][3], [2][4],
F1RST2 '(A4) = {[2][3], [2][4], [4][5]} [5][6]}
Введем также новое множество MIDDLE2(a), которое будет показывать какие пары терминалов могут находиться в середине цепочек, выводимых из a. То есть пусть 3a^p: р=р1р2...рш freVT, ie[1,n]. Тогда MIDDLE2(a)={ab}, где a и beVT: 3je[2,n-2], PjPj+1=ab. Из определения видно, что значение MIDDLE2 определено только для цепочек, порождающих терминальные цепочки длиною не менее 4 символов.
Расчет значений, входящих в множество MIDDLE2, будет вестись по следующему алгоритму. Пусть рассматривается продукция вида B^aA1A2p, причем a и Р могут являться произвольными (в том числе и пустыми) цепочками символов.
Пусть a и be VT. Тогда для a и Р возможны следующие варианты.
1. Пусть a=0. Тогда MIDDLE2(a)={ab}, aeLAST(A1), a^ONLY(A1), beFIRST(A2).
2. Пусть p=0. Тогда MIDDLE2(a)={ab}, aeLAST(A1), beFIRST(A2), b£ONLY(A2).
3. Пусть a=0 и p=0. Тогда MIDDLE2(a)={ab}, aeLAST(A1), a^ONLY(A1), beFIRST(A2), b^ONLY(A2).
4. Пусть a^0 и p^0. Тогда MIDDLE2(a)={ab}, aeLAST(A1), beFIRST(A2).
5. MIDDLE2(a) e MIDDLE2(B), MIDDLE2(A1) e MIDDLE2(B), MIDDLE2(A2) e MIDDLE2(B), MIDDLE2(p) e MIDDLE2(B),
Рассчитаем значения множеств MIDDLE2 для грамматики (1) (см. (6)).
M1DDLE2(SENT) = {[2][4],[2][2]}
M1DDLE2(A1) = {[2][4], [2][2]} (6)
M1DDLE2(A3) = {0}
M1DDLE2(A4) = {0}
3. Метод генерации правил
Итак, функции FIRST и LAST показывают, с каких терминалов могут начинаться или, соответственно, заканчиваться правила. При этом на основании результатов вычисления этих множеств можно решить обратную задачу: определить какие правила могут начинаться или заканчиваться данным терминалом. При этом гипотетически возможен случай, когда с данного терминала будет начинаться небольшое количество правил. В этом случае можно будет говорить о том, что данный терминал является характеристическим. То есть, обнаружив данный терминал на входе, можно выдвинуть гипотезу или небольшое количество гипотез о структуре данного фрагмента. При этом количество комбинаций терминалов, получаемых с помощью функций FIRST2 и LAST2, и являющихся характеристическими, должно возрастать. На основе этой информации можно будет попытаться построить правила синтаксической сегментации в автоматизированном или автоматическом режиме.
В самом простом случае метод получения правил будет следующим. Необходимо определить множества FIRST2 и LAST2. Далее для каждой пары терминалов, входящих в FIRST2 для заданной грамматики, составить множество нетерминальных символов, в множество FIRST2 которых входит данная пара. Подобное множество назовем backFIRST2 и формально определим как backFIRST2(ab)={A}: abeFIRST2(A). Аналогичным образом определим множество backLAST2.
Для множеств backFIRST2(A) с мощностью, равной единице, можно сформировать правила синтаксической сегментации вида «если встретилось ab, то с терминала a начинать разбор по правилу A». Аналогично для множеств backLAST2(A) с мощностью, равной единице, можно сформировать правила вида «если встретилось ab, то терминалом b заканчивается разбор по правилу A».
Однако в общем случае может получиться ситуация, когда пара ab может встречаться в середине выводимых цепочек за счет того, что терминал a будет заканчивать цепочку, выводимую из A, терминал b будет начинать цепочку, выводимую из B, и будет существовать правило, включающее в себя нетерминал B, идущий следом за нетерминалом A. Приведем несколько примеров, причем для
каждого из них покажем как позитивный, так и негативный вариант текста. В апострофах приведены нормальные формы слов, которые будут искаться терминалом.
[sign; ',';][conj; 'AS';] начинает фрагмент ASCLAUSE
The result was obvious, as the pressure had fallen almost to zero.
The result was obvious, as obvious as "2 x 2 = 4 ".
[prep; '1N';][noun; 'ORDER';] начинает фрагмент 1N ORDER TO
1n order to save time keep your files in order.
Keep your files in order to save time.
[conj;'AND';][card;";]завершает фрагмент числительного two hundred and three
There were 5 tasks. He solved four and three of them were wrong Подобные ситуации определяются при помощи множества MIDDLE2. Такие пары не могут быть названы характеристическими, так как встретив пару ab мы не можем достоверно решить без привлечения анализа, что этой парой начинается или заканчивается некоторое правило. В связи с этим необходимо исключить подобные пары из множеств FIRST2 и LAST2, а лишь затем формировать множества backFIRST2 и backLAST2.
Далее заметим, что для формирования множеств backFIRST2 и backLAST2 могут использоваться не множества FIRST2 и LAST2, а множества FIRST2' и LAST2'. В ходе синтаксического анализа при методе разбора «снизу вверх» первая свертка будет проводиться по правилу, непосредственно порождающему терминальную пару ab, то есть, необходима информация только о нем. При разборе «сверху вниз» можно проверять достижимость из текущего нетерминала искомого. С одной стороны это требует вычислительных затрат, однако они компенсируются за счет поиска в множестве меньшей мощности.
Исходя из вышеизложенного определим множества backFIRST2 и backLAST2 следующим образом.
backFIRST2(ab)={A}: abeFIRST2'(A), "B ab^MIDDLE2(B). backLAST2(ab)={A}: abeLAST2'(A), "B ab^MIDDLE2(B). Для грамматики (1) получим следующие значения этих множеств.
Ьас№ШТ2([1 ][1 ])={Л3} ЬаскР1ЕБТ2([1][2])={Л1, Л3} Ьаск¥Ш$>Т2([1 ][4])={Л1} ЬаскР1ЕБТ2([2][1 ])={Л3} ЬаскР1ЕБТ2([2][2])={Л3} ЬаскР1ЕБТ2([2][3])={Л4} ЬаскР1ЕБТ2([2][4])={Л4} ЬаскР1ЕБТ2([4][5])={Л4}
Как можно видеть, пара [1][2] не является характеристической. Для остальных пар из (7) могут быть построены соответствующие правила.
4. Учет согласования слов
Приведенное описание хорошо подходит для формальных языков. Но естественных языках наблюдается такое явление, как согласование и управление. Так, например, существительное в русском языке управляется своими прилагательными, требуя, чтобы те находились в том же числе, падеже и роде. В каких-то языках (например, в китайском) такое явление отсутствует, в каких-то (английском) ощущается слабо, но для таких языков, как русский без учета данного явление нельзя строить сколь-либо серьезную теорию. В связи с этим дополним предложенный метод учетом возможности согласования слов.
Для согласования слов будем использовать параметры. Определим параметр как пару Р=<^ У>, где N — имя параметра, а V — его значение. Под именем параметра здесь будем понимать лексические характеристики слов: падеж, род, число и так далее. Для каждой характеристики определен набор значений: падеж может быть именительным, родительным, ... ; число единственным и множественным. Таким образом, каждое слово в тексте будет обладать не только нормальной формой и частью речи, но и набором параметров, указывающих на форму, в которой находится данное вхождение слова. Все эти данные могут быть получены в результате морфологического анализа.
Для задач обеспечения синтаксического анализа введем еще один вид параметров, типизированных, обладающих также типом: Р1=<^ V, Т>, где Т - тип параметра. Дело в том, что входе синтаксического анализа параметры могут
ЬаскЬЛ8Т2([1 ][1 ])={Л3} ЬаскЬЛ8Т2([2][1 ])={Л3} ЬаскЬЛ8Т2([2][3])={Л4} ЬаскЬЛ8Т2([2][4])={Л4} ЬаскЬЛ8Т2([5][6])={Л4}
использоваться в различных ситуациях: нам может быть необходимо проверить значение параметра на предмет совпадения или несовпадения с конкретным значением, проверить согласование параметров между собой, добавить новый параметр к слову и так далее. Тип параметра будет определять набор действий, производимых при помощи данного параметра. Например, при поиске объекта мы будем искать существительное с параметром «падеж не равен именительному».
Каждому терминалу и нетерминалу будет приписываться некоторое (возможно пустое) множество типизированных параметров. Не нарушая общности рассуждений, разобьем все параметры в зависимости от приписанного им типа на два множества: множество РС={Р1} параметров, используемых для проверки согласования конструкций, и множество Р0={Р1} остальных параметров.
С учетом наличия параметров согласования продукцию можно переписать в виде
Б'^ 4... Лп, где Б'=<Б, Р? >, 4=<Ль РА>, ... , Ап =<ЛП, РСА" >. Здесь под
Р? понимается множество параметров согласования для символа X. При проверке согласования слов в тексте значения параметров берутся:
1. для терминалов - от соответствующих слов из текста;
2. для нетерминалов - от символов продукций, по которым был проведен успешный разбор.
При сравнении терминального символа с конкретным словом, типизированные параметры сравниваются с параметрами этого слова. Если помимо стандартных операций, используемых при сравнении терминала со словом, все сравнения проведены успешно, то считается, что терминал успешно сравнился со словом.
Для каждой продукции Б'^ А1... Ап можно определить множество имен
п щ
параметров, используемых для согласования: = • • ^у, где Ш; - количество
¿=1 ]=1
параметров у 1-го символа продукции, ^ - имя ]-го параметра 1-го символа продукции. В этом случае можно сказать, что мощность множества, объединяющего
значения каждого согласовывающегося параметра = • равна 1 (либо равна 2 и
] =1
включает в себя значение параметра, согласовывающееся с любым другим значением). Таким образом, продукция может считаться успешно сравнившейся, если помимо стандартных выполняется предыдущее условие. Значения параметров для
нетерминалов берутся из описанных выше объединенных множеств значений параметров.
В соответствии с вышеизложенным нам необходимо модифицировать и правила определения пар, входящих в FIRST2' или LAST2'. Для этого будем использовать следующий алгоритм.
Определим множество FIRST', состоящее из терминалов, входящих в FIRST(A'), с приписанными к ним множествами параметров согласования.
a' е FIRST'(A') : 3A'^ a''a', A'=<A, Pf >, a'=<a, P/>, a''=<a, P/"> a e FIRST(A) ,
Pf=PA n Pf
Основным отличием от предыдущего варианта определения будет являться наличие параметров. При этом множество параметров у терминала, входящего в FIRST' будет модифицироваться по сравнению с исходным терминалом: остаются только те параметры, которые входят как в множество параметров согласования терминала, так и в множество параметров согласования правила, в которое входит данный терминал
Множества LAST' и ONLY' будут определяться аналогично как множество терминалов с приписанными к ним типизированными параметрами.
Доопределим теперь множество FIRST2', как множество пар терминалов с приписанными к ним типизированными параметрами. Пусть рассматривается продукция вида B^AiA2a, причем a может являться произвольной (в том числе и пустой) цепочкой символов. Тогда b'c 'eFIRST2'(B), если b'eONLY'(Ai') и c'eFIRST'(A2'). При этом, так как нас будет интересовать взаимное согласование символов, из множеств параметров каждого из символов мы можем отбросить те параметры, которые участвуют в согласовании, но присутствуют лишь в одном из терминалов.
Аналогичным образом переопределим множества LAST2' и MIDDLE2' на множестве пар терминалов, содержащих типизированные параметры. Далее определим множества backFIRST2' и backLAST2'.
backFIRST2'(a'b')={A'}: a'b'eFIRST2'(A'), VB' a'b'^MIDDLE2' (B').
backLAST2'(a'b')={A'}: a'b'eLAST2'(A), VB' a'b'^MIDDLE2' (B').
Формально в этом случае возможен вариант, когда одна и та же пара терминалов будет входить в перечисленные множества несколько раз с различными наборами согласовываемых параметров.
Приведем пример. Пусть грамматика (1) с учетом введения параметров выглядит следующим образом (8). <БЕЫТ> ::=<А1>
<А1>::=<А3; р1><А4; р1> | <А4; р1> (8)
<А3; р1>::=[1; р1]Ц1; р1]<А3; р1>1[2; р1]<А3; р1> <А4; р1>:: =[2; р1][3]1[2; р1][4]1[4][5; р1][6]
После знака точки с запятой добавлены имена параметров по которым проводится согласование. Для данной грамматики могут быть получены соответствующие множества.
ЕЖБТ'БЕЖ) = {[1; р1], [2;р1], [4]} ЬАБТ'(БЕт) = {[3],[4],[6]}
ЕЖБТ'(А1) = {[1; р1],[2; р1],[4]} ЬАБТ'(А1) = {[3],[4],[6]}
ЕЖБТ'(А3) = {[1; р1],[2; р1]} ЬАБТ'(А3) = {[1; р1]}
ЕЖБТ'(А4) = {[2; р1],[4]} ЬАБТ'(А4) = {[3],[4],[6]}
ОЖГ^ЕМ1) = {0} (9)
ОЖУ'(А1) = {0}
ОЖ¥'(А3) = {[1; р1]}
ОЖУ'(А4) = {0}
Е1ЯБТ2 '(БЕЫТ) = {[1; р1][1; р1], [1; р1][2; р1], [2; р1][1; р1], [2; р1][2; р1], [2][3],
[2][4], [4][5], [1][4]} ЕЖБТ2'(А1) = {[1; р1][1; р1], [1; р1][2; р1], [2; р1][1; р1], [2; р1][2; р1], [2][3],
[2][4], [4][5], [1][4]} Е1ВБТ2'(А3) = {[1; р1][1; р1], [1; р1][2; р1], [2; р1][1; р1], [2; р1][2; р1]} ЕШГ2'(А4) = {[2][3], [2][4], [4][5]} ЬАШ'(БЕШ) = {[2][3], [2][4], [5][6]} ЬАБТ2'(А1) = {[2][3], [2][4], [5][6]} ЬАБТ2'(А3) = {[1; р1][1; р1], [2; р1][1; р1]} ЬАБТ2'(А4) = {[2][3], [2][4], [5][6]}
Из множеств Р1Я8Т2' и ЬЛ8Т2' могут быть получены множества ЪаекР1Я8Т2' и ЪаекЬЛ8Т2' (10).
Ьаск¥1ЯБТ2 '([1; р1][1; р1 ])={Л3} Ьаск¥Ш8Т2 '([1; р1][2; р1])={Л1, Л3} Ьаск¥ЖТ2 '([1 ][4])={Л1} Ьаск¥ШТ2 '([2; р1][1; р1 ])={Л3} Ьаск¥Ш8Т2 '([2; р1][2; р1 ])={Л3} Ьаск¥Ш8Т2 '([2][3])={Л4} Ьаск¥Ш8Т2 '([2][4])={Л4}
ЬаскЬЛБТ2 '([1; р1][1; р1])={Л3} ЬаскЬЛБТ2 '([2; р1][1; р1 ])={Л3} ЬаскЬЛ8Т2 '([2][3])={Л4} ЬаскЬЛ8Т2 '([2][4])={Л4} ЬаскЬЛ8Т2 '([5][6])={Л4}
Ьаск¥1ЯБТ2 '([4][5])={Л4}
Как видно из примера, теперь пары терминалов будут применяться не к каждому вхождению пар слов в тексте, а лишь при условии согласования этих слов (там, где это необходимо). То есть применяя (7) ко входу [2;р1=у2][1;р1=у1][2;р1=у2][4;р2=у4] (согласование первых двух слов не проведено) мы успешно (и ошибочно) определим, что начало фрагмента должно разбираться по правилу А3, тогда как согласно (10) мы (вполне корректно) не сможем выделить такой информации о структуре входного текста. Здесь запись р1=у2 означает, что параметр с именем р1 принимает значение у2. При этом как при помощи (7), так и при помощи (10) будет определено, что [2][4] разбирается по правилу А4.
5. Результаты эксперимента
Для проверки изложенных положений, нами был проведен вычислительный эксперимент. Была разработана программа, которая вычисляла значения множеств ЪаекР1Я8Т2' и ЪаекЬА8Т2'. На вход программы были поданы реально действующие грамматики русского и английского языков, разработанные для системы машинного перевода «Кросслятор 2.0». По результатам вычислений были выделены наборы правил, соответствующие терминалам или парам терминалов.
Грамматика английского языка, использовавшаяся для экспериментов, содержала порядка 450 правил. В результате генерации множеств Б1Я8Т2 и ЬА8Т2 было обнаружено, что более 900 пар терминалов однозначно идентифицируют начало правила и порядка 100 пар терминалов однозначно идентифицируют окончание правила. Для русского языка была взята грамматика из примерно 130 правил. Для нее
было получено Более 100 пар в множестве backFIRST2 и всего 13 в множестве backLAST2.
Полученные результаты являлись во многом декартовым произведением небольшого количества конкретных слов, встречающихся рядом. Это существенно снижает вероятность применения правил.
Однако выяснилось, что результаты работы могут служить для проверки корректности грамматики. Так, среди пар терминалов было найдено порядка десятка таких, которые не допускаются реальной грамматикой языка. Например, встретилась пара терминалов, каждый из которых является предлогом. По результатам исследования было очевидно, в каком месте грамматики искать ошибку..
Исследование полученных правил показало, что все корректные пары и в самом деле являются претендентами на правила синтаксической сегментации. Под каждым правилом, приведенным ниже, показан позитивный пример. Формат терминала здесь следующий: [часть речи; нормальная форма; параметры].
[pn_pers;'WHO';][mod;'MAY';formprf] начинает фрагмент WHO FRASE Jane went to ask who may show us the way.
[part; 'NO';][noun; 'MATTER';] начинает фрагмент NO MATTER no matter
[pn_poss; ";][noun;'';] начинает фрагмент DEF OBJECT his cat
[prep; 'OF';][article;'';]
[prep; 'OF';][part; 'NO';] начинают фрагменты S DET one of the finest smells
6. Обсуждение
Следует заметить, что терминал в нашей нотации проверяет не всю информацию, приписанную к слову в тексте, а только ее часть. Так, например, проверяется лишь интересующее нас подмножество параметров (первый терминал будет искать произвольное существительное, а второй - в именительном падеже), может не проверяться нормальная форма слова (мы можем искать как конкретный, так и произвольный предлог). В связи с этим один и тот же терминал может применяться к целому классу интересующих нас слов. Однако, справедливо и
обратное: несколько различных терминалов могут применяться к одному и тому же слову. Это происходит в связи с тем, что терминалы могут отличаться лишь набором параметров или проверкой нормальной формы слова.
В связи с этим возникает дополнительная неоднозначность. К одному и тому же месту в тексте может быть применено несколько правил фрагментарного анализа, говорящих, что с данного места может применяться несколько правил. Однако подобная ситуация не так страшна. Дело в том, что мы в любом случае существенно сокращаем количество вариантов разбора, достигая тем самым поставленной цели. Вместо проверки всех возможных гипотез мы строим лишь несколько. Кроме того, вариативность результатов может быть изначально присуща этапу синтаксической сегментации (так как входной текст сам по себе может быть синтаксически неоднозначен), и нам не придется менять ход синтаксического анализа.
1. Кобзарева Т.Ю., Лахути Д.Г., Ножов И.М. Модель сегментации русского предложения // Труды Международного семинара Диалог'2001, том 2, Аксаково, 2001
2. Ахо А.В., Сети Р., Ульман Д.Д. Компиляторы: принципы, технологии и инструменты // М.: Вильямс, 2003.