gpt4 book ai didi

python - 如何使用 python 和 NLTK 从 Penn Treebank 获取一组语法规则?

转载 作者:太空狗 更新时间:2023-10-29 17:30:29 25 4
gpt4 key购买 nike

我对 NLTK 和 Python 还很陌生。我一直在使用示例中给出的玩具语法创建句子解析,但我想知道是否有可能使用从 Penn Treebank 的一部分学习的语法,而不是仅仅编写我自己的或使用玩具语法? (我在 Mac 上使用 Python 2.7)非常感谢

最佳答案

如果你想要一个精确捕获 NLTK 附带的 Penn Treebank 样本的语法,你可以这样做,假设你已经下载了 NLTK 的 Treebank 数据(见下面的评论):

import nltk
from nltk.corpus import treebank
from nltk.grammar import ContextFreeGrammar, Nonterminal

tbank_productions = set(production for sent in treebank.parsed_sents()
for production in sent.productions())
tbank_grammar = ContextFreeGrammar(Nonterminal('S'), list(tbank_productions))

但是,这可能不会给您一些有用的东西。由于 NLTK 仅支持使用指定所有终端的语法进行解析,因此您将只能解析包含 Treebank 示例中单词的句子。

此外,由于 Treebank 中许多短语的扁平结构,此语法对未包含在训练中的句子的泛化能力非常差。这就是为什么尝试解析 treebank 的 NLP 应用程序没有使用从 Treebank 学习 CFG 规则的方法。最接近的技术是 Ren Bods 面向数据的解析方法,但它要复杂得多。

最后,这将非常慢以至于毫无用处。因此,如果您想从单个句子中看到这种方法对语法的作用只是为了证明它有效,请尝试以下代码(在上面的导入之后):

mini_grammar = ContextFreeGrammar(Nonterminal('S'),
treebank.parsed_sents()[0].productions())
parser = nltk.parse.EarleyChartParser(mini_grammar)
print parser.parse(treebank.sents()[0])

关于python - 如何使用 python 和 NLTK 从 Penn Treebank 获取一组语法规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7056996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com