NLTK (自然语言工具包)允许您使用nltk.FCFG.fromstring([grammar string here]).
解析FCFG语法。其中FCFG语法格式规范*?我用Google搜索了它,但我能找到的只有this。
*即。语法语言规范
答案 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'
... """)
从字符串编写语法的语法应该如下:
->
|
另请参阅https://en.wikipedia.org/wiki/Terminal_and_nonterminal_symbols和https://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的一些亮点: