我有 DCG 语法,理解并同意以下短语: [john,paint] 和 [john,likes,mary] 管理语义通过参数
直接进入DCG语法sentence2(VP) --> noun_phrase2(Actor),
verb_phrase2(Actor, VP).
noun_phrase2(Name) --> properName(Name).
verb_phrase2(Actor, VP) --> intrans_verb(Actor, VP).
verb_phrase2(Somebody, VP) --> trans_verb(Somebody, Something, VP),
noun_phrase2(Something).
properName(john) --> [john].
properName(mary) --> [mary].
intrans_verb(Actor, paints(Actor)) --> [paints].
trans_verb(Somebody, Something, likes(Somebody, Something)) --> [likes].
例如,短语 [john,paint] 的平均值将是: paint(john),实际上这是查询:
?- sentence2(Meaning, [john,paints],[]).
Meaning = paints(john)
好的,这样就可以在不构建解析树的情况下处理意义。
我有一个练习,要求我修改以前的语法,从句子的合成树中获取平均值。所以我的查询必须返回解析树,以及句子的含义
但是我发现这样做有些问题...我正在尝试这样的事情,但是不起作用:
/** Adding the meaning into the Parse Tree: */
sentence2(sentence(Name, VerbPhrase)) --> noun_phrase2(Name),
verb_phrase2(VerbPhrase).
noun_phrase2(noun_phrase(Name)) --> properName2(Name).
verb_phrase2(verb_phrase(IntransVerb)) --> intrans_verb2(IntransVerb).
verb_phrase2(verb_phras(TransVerb, ProperName)) --> trans_verb2(TransVerb),
noun_phrase2(ProperName).
/* properName, intrans_verb ant trans_verb are LEAVES: */
properName2(properName(john)) --> [john].
properName2(properName(mary)) --> [mary].
intrans_verb2(Actor, intrans_verb2(paints(Actor))) --> [paints].
trans_verb2(Somebody, Something, trans_verb2(likes(Somebody, Something))) --> [likes].
答案 0 :(得分:0)
我认为你的问题不合适。如果你说
?- sentence2(Meaning, [john,paints], []).
Meaning = paints(john).
你清楚地说,解析的结果是“意义”而不是解析树。我希望解析树看起来更像这样:
Parse = s(np(properNoun(john)), vp(intrans(paints))).
您可以通过使用一些结构信息扩充DCG来轻松生成解析树:
sentence(s(NounPhrase, VerbPhrase)) -->
noun_phrase(NounPhrase),
verb_phrase(VerbPhrase).
noun_phrase(proper_noun(john)) --> [john].
verb_phrase(intransitive(paints)) --> [paints].
如果您想要其中一个,只需生成您想要的那个。如果你想要两者,你应该在使用树解析之后收集含义。否则得到一个解析树没什么意义,是吗?这是一个草图:
meaning(s(proper_noun(Noun), intransitive(Verb)), Meaning) :-
Meaning =.. [Verb, Noun].
这当然必须更加强大,但这就是它的使用方式:
?- phrase(sentence(S), [john, paints]), meaning(S, Meaning).
S = s(proper_noun(john), intransitive(paints)),
Meaning = paints(john).
现在探索,玩!制作能够将您的一些母语(意大利语,对吧?)解析为“有意义”结构的东西。将几句土耳其语翻译成“意义”并从中产生意大利语。你会惊讶地发现它们很容易融合在一起。