Kesin cümle dilbilgisi - Definite clause grammar

Bir kesin cümle dilbilgisi (DCG) dilbilgisini ifade etmenin bir yoludur. doğal veya resmi diller, mantıksal programlama dilinde Prolog. Kavramı ile yakından ilgilidir öznitelik gramerleri / ek dilbilgisi DCG'ler genellikle Prolog ile ilişkilendirilir, ancak Prolog gibi benzer diller Merkür ayrıca DCG'leri içerir. Kesin cümle dilbilgisi olarak adlandırılırlar çünkü bir dizi olarak bir grameri temsil ederler. kesin hükümler içinde birinci dereceden mantık.

DCG terimi, Prolog ve diğer benzer dillerdeki özel ifade tipini ifade eder; Belirli cümlecikler kullanarak gramerleri ifade etmenin tüm yolları DCG olarak kabul edilmez. Bununla birlikte, DCG'lerin tüm yetenekleri veya özellikleri, esasen Prolog'da olduğu gibi belirli cümleciklerle temsil edilen herhangi bir dilbilgisi için aynı olacaktır.

Bir DCG'nin kesin cümlecikleri, bir cümlenin geçerliliğinin ve belirli bir ayrıştırma ağacına sahip olmasının bu aksiyomlardan gelen teoremler olarak kabul edilebileceği bir aksiyom seti olarak düşünülebilir.[1] Bu, bir dildeki ifadelerin tanınması ve ayrıştırılmasının, mantık programlama dilindeki ifadeler gibi ifadeleri kanıtlamanın genel bir meselesi haline gelmesi için bunu yapma avantajına sahiptir.

Tarih

DCG'lerin tarihi, Prolog'un tarihine yakından bağlıdır ve Prolog'un tarihi, hem Marsilya, Fransa ve hem de Edinburgh, İskoçya'daki birkaç araştırmacının etrafında dönmektedir. Göre Robert Kowalski Prolog'un erken geliştiricisi olan ilk Prolog sistemi 1972'de Alain Colmerauer ve Phillipe Roussel.[2] Dilde yazılan ilk program, büyük bir doğal dil işleme sistemiydi. Fernando Pereira ve David Warren Edinburgh Üniversitesi'nde de Prolog'un erken gelişiminde yer aldı.

Colmerauer daha önce, İngilizce ve Fransızca arasında çeviri yapmak için kullanılan Q sistemleri adı verilen bir dil işleme sistemi üzerinde çalışmıştı.[3] 1978'de Colmerauer, Prolog'un Marseille Prolog adlı ilk versiyonunun bir parçası olan metamorfoz gramerleri adı verilen gramerleri temsil etmenin bir yolu hakkında bir makale yazdı. Bu yazıda, metamorfoz gramerlerinin resmi bir tanımını ve bunları kullanan programların bazı örneklerini verdi.

Prolog'un diğer iki erken mimarı Fernando Pereira ve David Warren, "kesin cümle dilbilgisi" terimini icat ettiler ve bugün Prolog'da kullanılan DCG'ler için notasyonu yarattılar. Fikir için Colmerauer ve Kowalski'ye itibar ettiler ve DCG'lerin Colmerauer'in metamorfoz gramerlerinin özel bir durumu olduğunu not ettiler. Fikri, "Dil Analizi için Kesin Madde Dilbilgisi" adlı bir makalede sundular ve burada DCG'leri "biçimcilik ... içinde gramerlerin, programlama dilinin etkili programlarını oluşturan" birinci dereceden yüklem mantığının "cümleleri olarak ifade edildiği" bir "biçimcilik" olarak tanımladılar. Prolog".[4]

Pereira, Warren ve Prolog'un diğer öncüleri daha sonra DCG'lerin diğer birkaç yönü hakkında yazdı. Pereira ve Warren, Earley Tümdengelim kanıtlama prosedürünün ayrıştırma için nasıl kullanıldığı gibi şeyleri açıklayan "Tümdengelim Olarak Ayrıştırma" adlı bir makale yazdı.[5] Pereira ayrıca Stuart M. Shieber "Önsöz ve Doğal Dil Analizi" adlı bir kitapta, hesaplamalı dilbilimleri mantık programlama kullanarak.[6]

Misal

Temel bir DCG örneği, ne olduklarını ve neye benzediklerini göstermeye yardımcı olur.

 cümle --> isim tamlaması, verb_phrase. isim tamlaması --> det, isim. verb_phrase --> fiil, isim tamlaması. det --> []. det --> [a]. isim --> [kedi]. isim --> [yarasa]. fiil --> [yiyor].

Bu, "kedi yarasayı yer", "yarasa kediyi yer" gibi cümleler oluşturur. Bu dilbilgisi tarafından oluşturulan dilde geçerli tüm ifadeler bir Prolog yorumlayıcısında yazarak üretilebilir. cümle (X, []). Benzer şekilde, bir cümlenin dilde geçerli olup olmadığı gibi bir şey yazarak test edilebilir. cümle ([the, bat, eats, the, bat], []).

Kesin hükümlere çeviri

DCG gösterimi sadece Sözdizimsel şeker Prolog'daki normal kesin maddeler için. Örneğin, önceki örnek şuna çevrilebilir:

 cümle(Bir,Z) :- isim tamlaması(Bir,B), verb_phrase(B,Z). isim tamlaması(Bir,Z) :- det(Bir,B), isim(B,Z). verb_phrase(Bir,Z) :- fiil(Bir,B), isim tamlaması(B,Z). det([|X], X). det([a|X], X). isim([kedi|X], X). isim([yarasa|X], X). fiil([yiyor|X], X).

Fark listeleri

Her bir functor için argümanlar, örneğin (A, B) ve (B, Z) vardır fark listeleri; fark listeleri, bir listenin önekini iki son ek arasındaki fark olarak göstermenin bir yoludur (daha küçük olanı da içerir). Listeler için Prolog gösterimini kullanarak, bir tekli liste öneki P = [H] arasındaki fark olarak görülebilir [H | X] ve Xve böylece çifti ile temsil edilir ([H | X], X), Örneğin.

Bunu söylüyorum P arasındaki fark Bir ve B demekle aynı ek (P, B, A) tutar. Veya önceki örnekte, ek ([H], X, [H | X]).

Fark listeleri, verimlilik nedenleriyle DCG'lerle listeleri temsil etmek için kullanılır. Liste farklılıklarını (önekleri), kullanılabilecekleri koşullarda birleştirmek çok daha etkilidir, çünkü (A, B) ve (B, Z) sadece (A, Z).[7]

Aslında, ekle (P, B, A), ekle (Q, Z, B) gerektirir ekle (P, Q, S), ekle (S, Z, A). Bu, liste birleştirme olduğunu söylemekle aynıdır. ilişkisel:

A = P + B = P + (Q + Z) = (P + Q) + Z = S + Z = A

Bağlamdan bağımsız gramerler

İçinde saf Prolog, önceki örnekte olduğu gibi, işlevler üzerinde fazladan bağımsız değişken içermeyen normal DCG kuralları yalnızca bağlamdan bağımsız gramerler; sayfanın sol tarafında sadece bir argüman var üretim. Ancak, bağlama duyarlı gramerler aşağıdaki örnekte olduğu gibi ekstra argümanlar sağlayarak DCG'lerle de ifade edilebilir:

 s --> a(N), b(N), c(N). a(0) --> []. a(M) --> [a], a(N), {M dır-dir N + 1}. b(0) --> []. b(M) --> [b], b(N), {M dır-dir N + 1}. c(0) --> []. c(M) --> [c], c(N), {M dır-dir N + 1}.

Bu DCG kuralları kümesi, formun dizelerinden oluşan dili oluşturan dilbilgisini açıklar. .[8]

 s --> semboller(Sem,a), semboller(Sem,b), semboller(Sem,c). semboller(son,_) --> []. semboller(s(Sem),S) --> [S], semboller(Sem,S).

Bu DCG kuralları kümesi, formun dizelerinden oluşan dili oluşturan dilbilgisini açıklar. yapısal olarak temsil ederek n[kaynak belirtilmeli ]

Özellikleri temsil etmek

Çeşitli dilbilimsel özellikleri ayrıca, functorlara ekstra argümanlar sağlayarak DCG'lerle oldukça kısaca temsil edilebilir.[9] Örneğin, aşağıdaki DCG kuralları kümesini göz önünde bulundurun:

 cümle --> zamir(konu), verb_phrase. verb_phrase --> fiil, zamir(nesne). zamir(konu) --> [o]. zamir(konu) --> [o]. zamir(nesne) --> [onu]. zamir(nesne) --> [ona]. fiil --> [seviyor].

Bu dilbilgisi "ondan hoşlanıyor" ve "ondan hoşlanıyor" gibi cümlelere izin verir, ancak değil "onu seviyor" ve "onu seviyor".

DCG'lerle Ayrıştırma

Bu dilbilgisi için bir örnek ayrıştırma ağacı.

Bir DCG'nin temel pratik kullanımı, verilen gramerdeki cümleleri ayrıştırmak, yani bir ayrıştırma ağacı oluşturmaktır. Bu, aşağıdaki kurallarda olduğu gibi, DCG'deki functor'lara "ekstra argümanlar" sağlayarak yapılabilir:

 cümle(s(NP,VP)) --> isim tamlaması(NP), verb_phrase(VP). isim tamlaması(np(D,N)) --> det(D), isim(N). verb_phrase(vp(V,NP)) --> fiil(V), isim tamlaması(NP). det(d()) --> []. det(d(a)) --> [a]. isim(n(yarasa)) --> [yarasa]. isim(n(kedi)) --> [kedi]. fiil(v(yiyor)) --> [yiyor].

Herhangi bir cümlenin ayrıştırma ağacını elde etmesi için yorumlayıcı sorgulanabilir:

 | ?- cümle(Parse_tree, [,yarasa,yiyor,a,kedi], []). Parse_tree = s(np(d(),n(yarasa)),vp(v(yiyor),np(d(a),n(kedi)))) ? ;

Diğer kullanımlar

DCG'ler, uygulamaları ayrıştırmanın yanı sıra koddaki belirli parametreleri başka yerlerde gizlemek için uygun bir sözdizimsel şeker işlevi görebilir. Merkür G / Ç bir çift ile temsil edilmelidir io.state arguments.DCG gösterimi, G / Ç kullanımını daha kolay hale getirmek için kullanılabilir,[10] durum değişkeni gösterimi genellikle tercih edilmesine rağmen.[kaynak belirtilmeli ]DCG gösterimi, Prolog'da olduğu gibi Mercury'de de ayrıştırma ve benzer şeyler için kullanılır.

Uzantılar

DCG'ler Pereira ve Warren tarafından piyasaya sürüldüğünden beri, birkaç uzantı önerildi. Pereira, ekstrapozisyon gramerleri (XG'ler) adlı bir uzantı önerdi.[11] Bu biçimcilik, kısmen sol ekstrapozisyon gibi belirli gramer fenomenlerini ifade etmeyi kolaylaştırmayı amaçlıyordu. Pereira, "XG kuralları ile DCG kuralları arasındaki fark, bir XG kuralının sol tarafının birkaç sembol içerebileceğidir." Bu, bağlama duyarlı gramerler için kuralları ifade etmeyi kolaylaştırır.

Peter Van Roy, birden fazla akümülatöre izin vermek için DCG'leri genişletti.[12][13]

Daha yeni bir başka uzantı, 1995 yılında NEC Corporation'daki araştırmacılar tarafından Multi-Modal Definite Clause Grammars (MM-DCGs) olarak yapıldı. Uzantıları, resimler gibi metinsel olmayan kısımları içeren ifadeleri tanımaya ve ayrıştırmaya izin vermeyi amaçlıyordu.[14]

Kesin cümle çeviri gramerleri (DCTG'ler) olarak adlandırılan başka bir uzantı, 1984'te tanımlanmıştır.[15] DCTG gösterimi, DCG gösterimine çok benziyor; en büyük fark, birinin kullanmasıdır ::= onun yerine --> kurallarda. Dilbilgisel nitelikleri rahatça ele almak için tasarlandı.[16] DCTG'lerin normal Prolog cümlelerine çevrilmesi, DCG'lerinki gibidir, ancak 2 yerine 3 argüman eklenir.

Ayrıca bakınız

Notlar

  1. ^ Johnson, M. (1994). "Gramerleri resmileştirmenin iki yolu". Dilbilim ve Felsefe. 17 (3): 221–240. doi:10.1007 / BF00985036.
  2. ^ Kowalski, R.A. "Mantık programlamanın ilk yılları" (PDF). Alıntı dergisi gerektirir | günlük = (Yardım)
  3. ^ Colmerauer, A. (1978). "Metamorfoz gramerler". Bilgisayarlarla Doğal Dil İletişimi: 133–189.
  4. ^ Pereira, F .; D. Warren (1980). "Dil analizi için kesin cümle dilbilgisi" (PDF). Alıntı dergisi gerektirir | günlük = (Yardım)
  5. ^ Pereira, F.C.N .; D.H.D. Warren (1983). "Kesinti olarak ayrıştırma" (PDF). Hesaplamalı Dilbilim Derneği 21. yıllık toplantısının bildirileri. Hesaplamalı Dilbilim Derneği Morristown, NJ, ABD. s. 137–144.
  6. ^ Pereira, F.C.N .; S. M. Shieber (2002). Giriş ve doğal dil analizi. Mikrotom Yayıncılık.
  7. ^ Fleck, Arthur. "Kesin Madde Dilbilgisi Çevirisi". Alındı 2009-04-16.
  8. ^ Fisher, J. R. "Prolog Eğitimi - 7.1". Alındı 2016-05-17.
  9. ^ "DCG'ler bize Özellikler için Doğal Bir Gösterim Veriyor". Alındı 2009-04-21.
  10. ^ "Cıva Geçiş Kılavuzuna Giriş: Giriş / Çıkış". Alındı 2015-03-26.
  11. ^ Pereira, F. (1981). "Ekstrapozisyon gramerleri" (PDF). Hesaplamalı dilbilimleri. 7 (4): 243–256.
  12. ^ Van Roy, Peter (1990). "Genişletilmiş DCG Gösterimi: Prolog'da Uygulamalı Programlama İçin Bir Araç". UCB Teknik Raporu. 90 (583).
  13. ^ Kaynak kodu şu adreste mevcuttur: [1].
  14. ^ Shimazu, H .; Y. Takashima (1995). "Çok modlu kesin cümle dilbilgisi" (PDF). Japonya'daki Sistemler ve Bilgisayarlar. 26 (3).
  15. ^ Abramson, H. (1984). "Kesin cümle çeviri gramerleri". Alıntı dergisi gerektirir | günlük = (Yardım)
  16. ^ Sperberg-McQueen, C. M. "Belirli cümle dilbilgisi ve kesin cümle çeviri gramerlerine kısa bir giriş". Alındı 2009-04-21.

Dış bağlantılar