2013-07-20 8 views
5

मैं दिए गए वाक्य के लिए पार्स पेड़ बनाने में कामयाब रहा और यहां वाक्य के लिए यह है: "आदमी घर गया।"प्रोलॉग पार्स पेड़ को वापस तार्किक वाक्य में कैसे परिवर्तित करें

T = s(np(det(the), n(man)), vp(v(went), np(n(home)))) 

1) इस पर वाक्यांश/2 का उपयोग कैसे करें?

How to translate a sentence in a logical language using prolog? - मुझे जो चाहिए वह समान है, लेकिन इसका समाधान मुझ पर काम नहीं करता है।

2) मैं इसे व्याकरण पैटर्न के साथ मैप करना चाहता हूं और शब्द टैग प्राप्त करना चाहता हूं। Det=the, N(Subject)=man, V=went, N(Object)=home

वहाँ एक रास्ता दिए गए सेट वृक्ष संरचना के साथ इस पेड़ के नक्शे और व्याकरण की पहचान के लिए है। मैं विषय, क्रिया, वस्तु, व्याकरण पैटर्न और लक्ष्य भाषा वाक्य उत्पन्न करने के लिए पार्स पेड़ का उपयोग कैसे कर सकता हूं।


संपादित बाद में .. मैं इस कोड की कोशिश की और यह काफी जवाब देता है। इस कोड पर कोई सुझाव।

sent("(s(np(n(man))) (vp(v(went)) (np(n(home)))))"). 

whitespace --> [X], { char_type(X, white) ; char_type(X, space) }, whitespace. 
whitespace --> []. 

char(C) --> [C], { char_type(C, graph), \+ memberchk(C, "()") }. 

chars([C|Rest]) --> char(C), chars(Rest). 
chars([C]) --> char(C). 

term(T) --> chars(C), { atom_chars(T, C) }. 
term(L) --> list(L). 

list(T) --> "(", terms(T), ")". 

terms([]) --> []. 
terms([T|Terms]) --> term(T), whitespace, !, terms(Terms). 

simplify([s,[np, [n,[Subject]]], [vp,[v,[Verb]],[np,[n,[Object]]]]],Result) :- Result = [Subject,Verb,Object]. 

धन्यवाद Mathee

+0

'वाक्यांश/2' किसी डीसीजी नियम और किसी प्रकार की इनपुट सूची से संबंधित है। आप इसे किसी भी दिशा में उपयोग कर सकते हैं, लेकिन यदि आप न तो पार्सिंग कर रहे हैं और न ही सूची बना रहे हैं तो शायद यह नौकरी के लिए सही उपकरण नहीं है। यह मेरे लिए दूसरे जवाब में काम करता है क्योंकि लिस्प एस-एक्सप्रेशन मूल रूप से सूचियां हैं। –

+0

कृपया बाद में जोड़े गए कोड की जांच करें। मैंने आपकी विधि का पालन किया। और यह एसडब्ल्यूआई प्रोलॉग में काम किया। क्या आप कोड के लिए कई व्याकरण पैटर से मेल खाने के लिए सुधार सुझा सकते हैं और दिए गए वाक्य के लिए व्याकरण पैटर्न की पहचान कर सकते हैं। – Mathee

+0

'white' टैब और स्थान है; 'स्पेस' में वे शामिल हैं, इसलिए आपको केवल 'व्हाइट्स स्पेस // 0' में' स्पेस 'की आवश्यकता है। मैं 'सरलीकृत/2' से 'परिणाम' को हटा दूंगा और केवल सूची को दूसरे तर्क के रूप में रखूंगा और इस नियम पर कोई शरीर नहीं होगा। अन्यथा यह मेरे लिए अच्छा लग रहा है। आश्चर्य की बात यह है कि मैंने ऐसा नहीं सोचा था कि आप बिल्कुल पूछ रहे थे, लेकिन यह मेरे लिए बुरा नहीं लग रहा है। :) –

उत्तर

3

करने के लिए सरल तरीके से कर रहा है पेड़, प्रतीकों आप रुचि रखते हैं पर 'hardcoded' के लिए एक यात्रा का मतलब है।

part_of(T, S, R) :- T =.. [F|As], 
    ( F = S, 
     R = T 
    ; member(N, As), 
     part_of(N, S, R) 
    ). 

?- part_of(s(np(det(the), n(man)), vp(v(went), np(n(home)))),np,P). 
P = np(det(the), n(man)) ; 
P = np(n(home)) ; 
false. 

यह सदस्य/2 का एक प्रकार है, सिर्फ पेड़ों के लिए है:

यहाँ एक अधिक सामान्य उपयोगिता, कि उपयोग करता है (=..)/2 पेड़ की एक नामित भाग पर कब्जा करने के लिए है। बीटीडब्ल्यू मैं आपके प्रश्न के पहले भाग को नहीं समझता: आप सिंटैक्स पेड़ पर वाक्यांश/2 का उपयोग क्यों करना चाहते हैं? आम तौर पर व्याकरण (वाक्यांश/2 के लिए पहला तर्क) 'कच्चे' वर्ण स्ट्रीम से एक वाक्यविन्यास पेड़ का निर्माण होता है ...

+0

आपके उत्तर से चीजों को जानकर खुशी हुई। लेकिन मुझे दिए गए पेड़ की तुलना व्याकरण पैटर्न के साथ करने की ज़रूरत है, जहां मैं व्यक्ति को वस्तु के रूप में वस्तु और घर के रूप में प्राप्त कर सकता हूं। इसके लिए मुझे http://stackoverflow.com/questions/14953960/how-to-translate-a-sentence-in-a-logical-language-using-prolog/17759505#17759505 से वाक्यांश विचार मिला। – Mathee

संबंधित मुद्दे