非终结符是否有带参数的BNF定义?

4

在使用Prolog DCG解析输入时,配有语法BNF的说明会很方便。

例如:

BNF

<Sentence> ::= <Noun_phrase> <Verb_phrase>
<Noun_phrase> ::= <Determiner> <Noun>
<Verb_phrase> ::= <Verb> <Phrase>
<Determiner> ::= a
<Determiner> ::= the
<Noun> ::= cat
<Noun> ::= mouse
<Verb> ::= scares
<Verb> ::= hates

作为Prolog DCG
sentence --> noun_phrase, verb_phrase.
verb_phrase --> verb, noun_phrase.
noun_phrase --> determiner, noun.
determiner --> [a].
determiner --> [the].
noun --> [cat].
noun --> [mouse].
verb --> [scares].
verb --> [hates].

然而,Prolog DCG 也可以有参数,例如在这个例子中,Number 可以是 singular 或者 plural
sentence(Number) --> noun_phrase(Number), verb_phrase(Number).
verb_phrase(Number) --> verb(Number), noun_phrase(Number).
noun_phrase(Number) --> determiner(Number), noun(Number).
determiner(singular) --> [a].
determiner(singular) --> [the].
determiner(plural) --> [the].
noun(singular) --> [cat].
noun(plural) --> [cats].
noun(singular) --> [mouse].
noun(plural) --> [mice].
verb(singular) --> [scares].
verb(plural) --> [scare].
verb(singular) --> [hates].
verb(plural) --> [hate].

是否有一种标准或被接受的BNF扩展,其中包括用于非终结符的参数?

如果是这样,我需要一个链接。

我怀疑ATN(增强转换网络)与此相关,并且可能是唯一的标准答案,但我希望有一些线性文本形式而不是某种形式的顶点/边图。


感兴趣的内容:[介绍性自然语言处理课程,包括 FSA、RTN 等,附有 Prolog 代码] (http://www.ccunix.ccu.edu.tw/~lngwujs/Courses/CL/NLP_prolog_Blackburn.pdf) - Guy Coder
1个回答

2
我认为你要找的是特征结构的概念;你在示例中展示的参数共享是更一般的特征结构统一方法的一个特殊情况。
我不知道针对BNF的特征结构扩展,但有一些被广泛接受的符号可以添加到其他语法形式中。Python自然语言处理库NLTK的文档在此处提供了一个示例,展示了他们使用的符号。以下是他们的一些规则,大致对应于你的示例中的前几个产生式。
S -> NP[CASE=nom, AGR=?a] VP[AGR=?a]
VP[AGR=?a] -> TV[OBJCASE=?c, AGR=?a] NP[CASE=?c]
NP[CASE=?c, AGR=?a] -> Det[CASE=?c, AGR=?a] N[CASE=?c, AGR=?a]

"?x"是他们用于逻辑变量的符号。NLTK手册中的整个章节都包含了特征结构的一般描述,并包括一些文献参考。"

我觉得很有趣的是,我越是寻找标准的方法来做这件事,就越来越相信Prolog DCG可能是用线性文本表示这些概念的更好方式。我确实认为边/顶点图更好,但在仅以文本方式记录,如源代码时,图表就行不通了,因此需要另一种方式。你的回答正在帮助我学习。 - Guy Coder
感兴趣的内容:自然语言处理简介 - 第16讲:特征结构和统一教学大纲,作者为Julia Hockenmaier。 - Guy Coder
有趣的是:特征结构统一语法 - 与DCG相比,FSUG非常紧凑和抽象,而与CFG相比,差异更加明显。 - Guy Coder
感兴趣的内容:特征结构和一致性 - 具有文本表示和一致性跟踪的良好示例。搜索“一致性跟踪:”。 - Guy Coder
目前我将继续使用Prolog DCG。在研究详情时,我学到了一些东西。 :) - Guy Coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接