DC-грамматика

DC-грамматика

Грамматика, построенная на определённых предложениях (сокр. DC-грамматика, DCG; от англ. Definite clause grammar) — это способ построения грамматики в логических языках программирования, например, Пролог. DC-грамматика обычно ассоциируется с Прологом, но и другие языки, например, Mercury, также могут использовать DC-грамматику. Словосочетание «определенные предложения» используется в название потому, что эта грамматика основывается на дизъюнкте Хорна в логике первого порядка.

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

Чтобы яснее представить себе, что же такое DC-грамматики, можно провести следующее гипотетическое сопоставление: множество определённых предложений можно рассмотреть как множество аксиом, а корректность входной строки и существование для неё дерева разбора — как теорему, доказательство который строится на этих аксиомах [1]. Такое представление имеет преимущество, так как распознавание и разбор выражений языка превращается в доказательство выражений, точно так же как это делается в логических языках программирования.

Содержание

История

История DC-грамматик тесно связана с историей Пролога, которая в свою очередь создавалась в Марселе (Франция) и Эдинбурге (Шотландия). Благодаря Роберту Ковальски, первому разработчику языка Пролог, первая Пролог система была разработана в 1972 году Алэном Колмероэ и Филлипом Роусселом[2]. Первая программа, написанная на языке, была попыткой реализации системы обработки естественного языка. Также в разработке Пролога принимали участие Фернандо Переиро и Девид Уоррен из университета Эдинбурга.

Предыдущая работа Колмероэ была посвящена системе обработки языка, известной под названием Q-система, которая использовалась для перевода с английского на французский [3]. В 1978 Колмероэ написал статью о способе представления грамматик, которые назывались метаморфозными грамматики (metamorphosis grammars) и которые лежали в основе первой версии Пролога, называемого марсельским Прологом. В этой статье он дал формальное описание метаморфозным грамматикам и привел некоторые примеры, демонстрирующие их применение.

Два других создателя Пролога, Фернандо Перейра и Давид Уоррен, придумали термин грамматика с определёнными предложениями и создали ту нотацию DC-грамматик, которая используется в Прологе по сей день. Они оценили идеи Колмероэ и Ковальски и заметили, что DC-грамматика — это частный случай метаморфозных грамматик Колмероэ. Эта идея была представлена в статье «Definite Clause Grammars for Language Analysis» (DC-грамматики для языкового анализа), в которой описывалась DC-грамматика, как «формализм … в котором грамматика выражается предложениями предикатной логики первого порядке», что «позволяет создавать эффективные программы на языке программирования Пролог»[4].

Позже Перейра, Уоррен и другие пионеры Пролога описали другие аспекты DC-грамматик. Перейра и Уоррен написали статью «Parsing as Deduction» (Разбор с помощью логического вывода), описывающую процедуру доказательства логического вывода Эрли, использующаяся для разбора[5]. Также Перейра в соавторстве со Стюартом Шейбером написал книгу «Prolog and Natural Language Analysis» (Пролог и анализ естественных языков), которая была предназначена для изучения основ вычислительной лингвистики с использованием логического программирования[6].

Расширение

Для DC-грамматик, описанных Перейрой и Уорреном, были предложены улучшения. Например, сам Перейра предложил экстрапозиционные грамматики (extraposition grammars, XGs)[7]. Этот формализм был необходим для того, чтобы упростить представление примечательного грамматического феномена — экстрапозиции. Перейра писал : «Различие между правилами XG и DC-грамматики заключается в том, что левая часть XG правила может состоять из нескольких символом.» Это делает её проще для выражения контекстно-зависимых грамматик. Однако, XG может быть трансформирована в DC-грамматику, а DC-грамматика, в принципе, может все, что умеет XG.

Значительно позднее в 1995 году исследователями из NEC корпорации было разработано другое расширение, называемое — много-модальной DC-грамматикой (Multi-Modal Definite Clause Grammars, MM-DCGs). Их расширение предназначалось для того, чтобы распознавать и разбирать выражения, которые включают не только текстовые части, но и например, картинки[8].

В 1984 году было описано другое расширение, называемое DC-грамматиками трансляции (definite clause translation grammars, DCTGs)[9]. DCTG нотация выглядит практически точно также, как и нотация DC-грамматики, за исключением того, что в правилах использовалась запись ::= вместо -->. Она была придумана для удобной поддержки атрибутных грамматик[10]. Перевод DCTG в нормальные предложения Пролога точно такое же, как и при DC-грамматиках, но добавляется три аргумента вместо двух.

Пример

Элементарный пример DC-грамматик поможет понять на что способны такие грамматики и что из себя представляют.

sentence --> noun_phrase, verb_phrase. 
noun_phrase --> det, noun. 
verb_phrase --> verb, noun_phrase. 
det --> [the]. 
det --> [a]. 
noun --> [cat]. 
noun --> [bat]. 
verb --> [eats]. 

Эта грамматика порождает приложения вида «the cat eats the bat», «a bat eats the cat». Для того чтобы породить корректное выражение языка при помощи этой грамматики в интерпретаторе Пролога необходимо набрать: sentence(X,[]). А для того чтобы протестировать принадлежит ли данное предложение языку можно набрать sentence([the,bat,eats,the,bat],[]).

Трансформация в множество определённых предложений

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

sentence(S1,S3) :- noun_phrase(S1,S2), verb_phrase(S2,S3). 
noun_phrase(S1,S3) :- det(S1,S2), noun(S2,S3). 
verb_phrase(S1,S3) :- verb(S1,S2), noun_phrase(S2,S3). 
det([the|X], X). 
det([a|X], X). 
noun([cat|X], X). 
noun([bat|X], X). 
verb([eats|X], X). 

Разница списков

Аргументы для каждого функтора, например, (S1,S3) и (S1,S2), представляют собой разницу списков. Разницей списков является способ представления списка с помощью разницы двух списков. Используя нотацию Пролога для списка, можно записать, что список L является парой списков ([L|X],X).

Разница списков используется для представления списков в DC-грамматиках по причине своей эффективности. Более удобно производить конкатенацию разницы списков, там где это необходимо, потому что конкатенацией списков (S1,S2) и (S2,S3) является списком (S1,S3).[11]

Не контекстно-свободные грамматики

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

s --> symbols(Sem,a), symbols(Sem,b), symbols(Sem,c). 
symbols(end,_) --> []. 
symbols(s(Sem),S) --> [S], symbols(Sem,S). 

Это множество правил DC-грамматики описывает грамматику, которая порождает строки следующей формы a^{n}b^{n}c^{n}, структурно представляя n.[12]


Особенности представления

Также с помощью DC-грамматик могут быть довольно лаконично представлены различные лингвистические особенности языка путем добавления дополнительных аргументов функторам.[13] Для примера рассмотрим следующее множество DC правил:

sentence --> pronoun(subject), verb_phrase. 
verb_phrase --> verb, pronoun(object). 
pronoun(subject) --> [he]. 
pronoun(subject) --> [she]. 
pronoun(object) --> [him]. 
pronoun(object) --> [her]. 
verb --> [likes]. 

Такая грамматика порождает предложения вида «he likes her» или «he likes him», но не позволяет порождать «her likes he» или «him likes him».

Разбор DC-грамматик

Пример дерева разбора для этой грамматики.

Главная практическая ценность использования DC-грамматик — это разбор предложений данной грамматики, то есть построение дерева разбора. Это может быть сделано при помощи добавления «дополнительных аргументов» в функторы DC-грамматики, например, так, как это сделано в следующем примере:

sentence(s(NP,VP)) --> noun_phrase(NP), verb_phrase(VP). 
noun_phrase(np(D,N)) --> det(D), noun(N). 
verb_phrase(vp(V,NP)) --> verb(V), noun_phrase(NP). 
det(d(the)) --> [the]. 
det(d(a)) --> [a]. 
noun(n(bat)) --> [bat]. 
noun(n(cat)) --> [cat]. 
verb(v(eats)) --> [eats]. 

Теперь для любого предложения можно получить дерево разбора:

| ?- sentence(Parse_tree, [the,bat,eats,a,cat], []). 
Parse_tree = s(np(d(the),n(bat)),vp(v(eats),np(d(a),n(cat)))) ? ; 

Дополнительное применение

DC-грамматики могут предоставлять дополнительный синтаксический сахар для скрытия параметров в коде в других местах, не связанных с приложениями разбора. Например, в языке программирования Mercury, который заимствует синтаксис из Пролога, DC-грамматики используются для того, чтобы скрыть io__state аргумент в коде ввода/вывода.[14] Также DC-грамматики используются и в других ситуациях в Mercury.

См. также

Замечания

  1. ↑ Johnson, M. (1994). «Two ways of formalizing grammars». Linguistics and Philosophy 17 (3): 221–248.
  2. ↑ Kowalski, R. A.. «The early years of logic programming».
  3. ↑ Colmerauer, A. (1978). «Metamorphosis grammars». Natural Language Communication with Computers: 133–189.
  4. ↑ Pereira, F.; D. Warren (1980). «Definite clause grammars for language analysis».
  5. ↑ Pereira, F. C. N.; D. H. D. Warren (1983). "Parsing as deduction". Proceedings of the 21st annual meeting on Association for Computational Linguistics: 137–144, Association for Computational Linguistics Morristown, NJ, USA. 
  6. ↑ Pereira F. C. N. Prolog and natural-language analysis. — Microtome Publishing.
  7. ↑ Pereira, F. (1981). «Extraposition grammars». Computational Linguistics 7 (4): 243–256.
  8. ↑ Shimazu, H.; Y. Takashima (1995). «Multimodal definite clause grammar». Systems and Computers in Japan 26 (3).
  9. ↑ Abramson, H. (1984). «Definite clause translation grammars».
  10. ↑ Sperberg-McQueen, C. M. A brief introduction to definite clause grammars and definite clause translation grammars. Архивировано из первоисточника 22 марта 2012. Проверено 21 апреля 2009.
  11. ↑ Fleck, Arthur Definite Clause Grammar Translation. Архивировано из первоисточника 22 марта 2012. Проверено 16 апреля 2009.
  12. ↑ Fisher, J. R. Prolog Tutorial -- 7.1. Архивировано из первоисточника 22 марта 2012. Проверено 16 апреля 2009.
  13. ↑ DCGs give us a Natural Notation for Features. Архивировано из первоисточника 22 марта 2012. Проверено 21 апреля 2009.
  14. ↑ Mercury Tutorial: DCG Notation. Архивировано из первоисточника 22 марта 2012. Проверено 21 апреля 2009.

Дополнительные источники


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "DC-грамматика" в других словарях:

  • Грамматика (наука) — Грамматика (от греч. γράμμα  «запись»), как наука, есть раздел языкознания, изучающий грамматический строй языка, закономерности построения правильных осмысленных речевых отрезков на этом языке (словоформ, синтагм, предложений, текстов). Эти …   Википедия

  • Грамматика (как наука) — есть раздел языкознания, изучающий грамматический строй языка, закономерности построения правильных осмысленных речевых отрезков на этом языке (словоформ, синтагм, предложений, текстов). Эти закономерности грамматика формулирует в виде общих… …   Википедия

  • ГРАММАТИКА БЕСКОНТЕКСТНАЯ — грамматика контекстно свободная, КС грамматика, грамматика составляющих, все правила к рой имеют вид где А вспомогательный символ и непустая цепочка (так наз. бесконтекстные правила). Языки, порождаемые такими грамматиками, наз. бесконтекстными… …   Математическая энциклопедия

  • Грамматика (система) — Грамматика (от греч. grammatikáos  относящийся к буквам от gr2amma  буква), грамматический строй (грамматическая система)  совокупность закономерностей какого либо языка, регулирующих правильность построения значимых речевых отрезков (слов,… …   Википедия

  • Грамматика (как система) — Грамматика (от греч. grammatikáos  относящийся к буквам от gr2amma  буква), грамматический строй (грамматическая система)  совокупность закономерностей какого либо языка, регулирующих правильность построения значимых речевых отрезков (слов,… …   Википедия

  • Грамматика — (от греческого grammata «письмена», «писания»). В первоначальном понимании слова Г. совпадает с наукой о языковых формах вообще, включая и изучение элементов звуковой формы звуков или, как выражаются вплоть до начала XIX в., «букв»; это включение …   Литературная энциклопедия

  • ГРАММАТИКА — (греч. grammatike, от grammata письмена, происш. от graphein писать). 1) собрание законов и правил употребления устного и письменного языка. 2) учебная книга, содержащая в себе грамматику известного языка. Словарь иностранных слов, вошедших в… …   Словарь иностранных слов русского языка

  • Грамматика, разбирающая выражение — (РВ грамматика)  это тип аналитической формальной грамматики, описывающей формальный язык в терминах набора правил для распознавания строк языка. Грамматика, разбирающая выражение, в сущности, представляет собой синтаксический анализатор… …   Википедия

  • Грамматика Николая Греча — Пространная русская грамматика была опубликована в 1827 году с посвящением Николаю I. Свет увидел только первый том. Грамматику предваряет предисловие Ф.В. Булгарина, который счел необходимым заменить авторское предисловие, поскольку оно было… …   Википедия

  • ГРАММАТИКА СОСТАВЛЯЮЩИХ — грамматика непосредственно составляющих, НС грамматика, грамматика контекстная, частный случай грамматики порождающей, когда каждое ее правило имеет вид , где цепочки в алфавите и 0 непуста. Каждый шаг вывода в Г. с. состоит в замене одного… …   Математическая энциклопедия

  • ГРАММАТИКА ПОРОЖДАЮЩАЯ — грамматика Хомского, один из видов формальной грамматики;представляет собой, по существу, частный случай исчисления Поста (см. Поста каноническая система). Систематич. изучение Г. п. было начато в 50 х гг. 20 в. Н. Хомскнм (N. Chomsky), к рый… …   Математическая энциклопедия


Поделиться ссылкой на выделенное

Прямая ссылка:
… Нажмите правой клавишей мыши и выберите «Копировать ссылку»