什么是 NLTK FCFG 语法 standard/specification?
What is the NLTK FCFG grammar standard/specification?
NLTK(自然语言工具包)让您可以使用 nltk.FCFG.fromstring([grammar string here]).
解析 FCFG 语法 FCFG 语法格式规范在哪里*?我用谷歌搜索死了,但我能找到的只有 this。
*即语法语言规范
来自演示:
>>> 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) 组成的规则,其中
- 箭头的左轴只能有一个非终结符
->
- RHS 可以由一个或多个非终端and/or终端组合而成。
- 终端字符串需要用引号括起来
- RHS 上的非终端符号要用空格分隔。
- 每个非终端结果(LHS)可以由一个或多个RHS组合组成,每个组合由pip符号分隔
|
- CFG 的惯例是对非终端使用大写字母,但这不是必需的。
另请参阅 https://en.wikipedia.org/wiki/Terminal_and_nonterminal_symbols and https://en.wikipedia.org/wiki/Context-free_grammar
问题是要求 FCFG(特征语法)而不是普通 CFG。
我认为您可以只在非终结符上添加方括号,并在括号中包含一个特征名称、一个等号和一个值。该值可以是变量(以问号开头)、终结符号(对于简单值)或新的特征结构。我在 Internet (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)
好像特征终端符号有无引号无所谓
Wartena 是对的:问题确实是 FCFG:基于特征的 Context-Free 语法。检查这个 https://nltk.org/book/ch09.html
这是他的 FCFG 的一些亮点:
- NUM 对应于 singular/plurial
- GND 是性别 male/female/other:法语或德语等语言将性别赋予对象和动词
- PERS是人称(第一人称I/we,第二人称你,第三人称
he/she/it/they)
- 感叹号代表一个变量(就像在 Prolog 中一样)
- AGR = agreement features = 特征集合 NUM, PERS, GND, TENSE=Tense
NLTK(自然语言工具包)让您可以使用 nltk.FCFG.fromstring([grammar string here]).
解析 FCFG 语法 FCFG 语法格式规范在哪里*?我用谷歌搜索死了,但我能找到的只有 this。
*即语法语言规范
来自演示:
>>> 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) 组成的规则,其中
- 箭头的左轴只能有一个非终结符
->
- RHS 可以由一个或多个非终端and/or终端组合而成。
- 终端字符串需要用引号括起来
- RHS 上的非终端符号要用空格分隔。
- 每个非终端结果(LHS)可以由一个或多个RHS组合组成,每个组合由pip符号分隔
|
- CFG 的惯例是对非终端使用大写字母,但这不是必需的。
另请参阅 https://en.wikipedia.org/wiki/Terminal_and_nonterminal_symbols and https://en.wikipedia.org/wiki/Context-free_grammar
问题是要求 FCFG(特征语法)而不是普通 CFG。
我认为您可以只在非终结符上添加方括号,并在括号中包含一个特征名称、一个等号和一个值。该值可以是变量(以问号开头)、终结符号(对于简单值)或新的特征结构。我在 Internet (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)
好像特征终端符号有无引号无所谓
Wartena 是对的:问题确实是 FCFG:基于特征的 Context-Free 语法。检查这个 https://nltk.org/book/ch09.html 这是他的 FCFG 的一些亮点:
- NUM 对应于 singular/plurial
- GND 是性别 male/female/other:法语或德语等语言将性别赋予对象和动词
- PERS是人称(第一人称I/we,第二人称你,第三人称 he/she/it/they)
- 感叹号代表一个变量(就像在 Prolog 中一样)
- AGR = agreement features = 特征集合 NUM, PERS, GND, TENSE=Tense