什么是NLTK FCFG语法标准/规范?

时间:2016-03-12 21:10:12

标签: python nltk grammar context-free-grammar

NLTK (自然语言工具包)允许您使用nltk.FCFG.fromstring([grammar string here]).解析FCFG语法。其中FCFG语法格式规范*?我用Google搜索了它,但我能找到的只有this

*即。语法语言规范

3 个答案:

答案 0 :(得分:2)

来自演示:

>>> from nltk import CFG
>>> grammar = CFG.fromstring("""
... S -> NP VP
... PP -> P NP
... NP -> Det N | NP PP
... VP -> V NP | VP PP
... Det -> 'a' | 'the'
... N -> 'dog' | 'cat'
... V -> 'chased' | 'sat'
... P -> 'on' | 'in'
... """)

从字符串编写语法的语法应该如下:

  • 每条线都是由左侧(LHS)和右侧(RHS)组成的规则,其中
  • 只有一个非终端可以位于箭头->
  • 的LHS上
  • RHS可以由一个或多个非终端和/或终端的组合构成。
  • 终端字符串需要用引号括起来
  • RHS上的非终端符号用空格分隔。
  • 每个非终端结果(LHS)可以由一个或多个RHS组合组成,每个组合由点名符号|
  • 分隔。
  • CFG的惯例是对非终端使用大写字母,但没有必要。

另请参阅https://en.wikipedia.org/wiki/Terminal_and_nonterminal_symbolshttps://en.wikipedia.org/wiki/Context-free_grammar

答案 1 :(得分:1)

问题是要求使用FCFG(功能语法)而不是普通CFG。

我认为您可以在方括号中添加方括号,并在括号中包含要素名称,等号和值。该值可以是变量(以问号开头),终端符号(用于简单值)或新的要素结构。我在互联网(http://www.nltk.org/howto/featgram.html)上找到了此示例,该示例可以在我的笔记本电脑上使用。

from nltk import grammar, parse

g = """
% start DP
DP[AGR=?a] -> D[AGR=?a] N[AGR=?a]
D[AGR=[NUM='sg', PERS=3]] -> 'this' | 'that'
D[AGR=[NUM='pl', PERS=3]] -> 'these' | 'those'
D[AGR=[NUM='pl', PERS=1]] -> 'we'
D[AGR=[PERS=2]] -> 'you'
N[AGR=[NUM='sg', GND='m']] -> 'boy'
N[AGR=[NUM='pl', GND='m']] -> 'boys'
N[AGR=[NUM='sg', GND='f']] -> 'girl'
N[AGR=[NUM='pl', GND='f']] -> 'girls'
N[AGR=[NUM='sg']] -> 'student'
N[AGR=[NUM='pl']] -> 'students'
"""

grammar = grammar.FeatureGrammar.fromstring(g)
tokens = 'these girls'.split()
parser = parse.FeatureEarleyChartParser(grammar)
trees = parser.parse(tokens)
for tree in trees: 
    tree.draw()
    print(tree)

功能端子符号是否带引号似乎无关紧要。

答案 2 :(得分:0)

Wartena是对的:问题的确是FCFG:基于功能的上下文无关文法。选中此https://nltk.org/book/ch09.html 这是他的FCFG的一些亮点:

  • NUM将对应于单数/多数
  • GND是男性/女性/其他性别:法语或德语等语言将Gender赋予对象和动词
  • PERS是个人(第一人称我/我们,第二人称您,第三人称 他/她/它/他们)
  • 惊叹号代表一个变量(例如在Prolog中)
  • AGR =协议要素=要素集NUM,PERS,GND,TENSE =时态