You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prolog的DFG语法中提取短语的宾语部分?

如何从Prolog DFG接受的短语中提取宾语部分?

首先,先确认你已经定义的DFG语法(整理成标准Prolog代码格式):

start --> subject, verb, object.
subject --> ([i]; [you]).
verb --> ([like]; [need]).
object --> article, noun.
article --> ([my];[your]).
noun --> ([car] ; [bike]).

要实现objectPart/2谓词,核心思路是先验证句子符合DFG规则,再分离出主语、动词之后的宾语部分。这里有两种直观的实现方式:

方式一:简洁匹配法

直接通过phrase/3一次性匹配主语+动词,剩下的部分就是宾语:

objectPart(Sentence, Object) :-
    % 先确保输入句子是DFG合法的完整短语
    phrase(start, Sentence, []),
    % 匹配主语和动词,剩余的未匹配序列自动绑定为宾语
    phrase((subject, verb, Object), Sentence, []).

工作原理

  • phrase(start, Sentence, []):验证输入的Sentence完全符合start规则,确保是DFG能接受的合法短语。
  • phrase((subject, verb, Object), Sentence, []):把句子拆分为“主语+动词+宾语”结构,Object会被直接绑定到宾语对应的列表上。

测试你给出的示例:

?- objectPart([i, like, my, car], X).
X = [my, car].

再测试另一个合法句子:

?- objectPart([you, need, your, bike], X).
X = [your, bike].

方式二:显式关联object规则

如果你想更明确地复用已定义的object规则(确保提取的部分严格符合宾语语法),可以这样实现:

objectPart(Sentence, Object) :-
    % 验证句子合法
    phrase(start, Sentence),
    % 先匹配主语和动词,得到剩余的待匹配部分Rest
    phrase((subject, verb), Sentence, Rest),
    % 验证Rest完全符合object的语法规则
    phrase(object, Rest, []),
    % 将合法的宾语部分赋值给Object
    Object = Rest.

这种方式的优势是,后续如果修改object的语法规则(比如新增更多冠词或名词选项),这个谓词不需要额外调整就能自动适配。

两种方式都能满足你的需求,你可以根据自己的编码习惯选择。

内容的提问来源于stack exchange,提问作者Jsevillamol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:09:16