Udało mi się zbudować drzewo parsowane dla danego zdania i oto jest ono dla zdania: "Mężczyzna poszedł do domu".Jak przekonwertować drzewo prologu do logicznego zdania
T = s(np(det(the), n(man)), vp(v(went), np(n(home))))
1) Jak używać wyrażenia/2 na ten temat?
How to translate a sentence in a logical language using prolog? - jest podobny do tego, czego potrzebuję, ale jego rozwiązanie nie działa na mnie.
2) Chcę to odwzorować za pomocą wzoru gramatycznego i uzyskać etykietę słów. Det=the
, N(Subject)=man
, V=went
, N(Object)=home
Czy istnieje sposób mapować tego drzewa z danego zbioru drzewiastych struktur i identyfikacji gramatyki. Jak korzystać z drzewa parse do identyfikacji tematu, czasownika, obiektu, wzoru gramatycznego i wygenerowania zdania w języku docelowym.
Zmieniano później .. Próbowałem ten kod i daje znaczną odpowiedź. Wszelkie sugestie dotyczące tego kodu.
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].
Dzięki Mathee
'phrase/2' odnosi się do reguły DCG i listy wejściowej. Możesz go używać w dowolnym kierunku, ale jeśli nie analizujesz ani nie tworzysz listy, prawdopodobnie nie jest to właściwe narzędzie do pracy. W drugiej odpowiedzi zadziałało dla mnie, ponieważ wyrazy s Lisp są z natury listami. –
proszę sprawdzić kod dodałem później. Postępowałem zgodnie z twoją metodą. i działało w prologu SWI. Czy możesz zaproponować ulepszenia kodu pasujące do kilku szablonów gramatycznych i zidentyfikować wzór gramatyczny dla danego zdania. – Mathee
'white' jest tabulatorem i spacją; "spacja" obejmuje je, więc potrzebujesz tylko "spacji" w "spacji" // 0 ". Chciałbym usunąć 'Result' z' upraszczać/2' i po prostu umieścić listę jako drugi argument i nie ma ciału na tej zasadzie. W przeciwnym razie wygląda mi dobrze. Zaskakujące, to nie było to, o czym myślałem, że pytasz w ogóle, ale nie wygląda mi to źle. :) –