尝试使用NLTK CFG生成句子。想知道是否有可能在下面的程序中连接sql数据库来提供名词和动词。 在下面的示例中,门,窗口,打开,关闭都是硬编码的。如何动态地请求nltk从excel或数据库列中查找以在此特定上下文中提供名词和动词?
import nltk
from nltk.parse.generate import generate,demo_grammar
from nltk import CFG
grammar = CFG.fromstring("""
S -> VP NP
NP -> Det N
VP -> V
Det ->'the '
N -> 'door' | 'window'
V -> 'Open' | 'Close'
""")
print(grammar)
for sentence in generate(grammar, n=100):
print(' '.join(sentence))
答案 0 :(得分:1)
您似乎无法动态更改NLTK CFG - 一旦实例化,它就会保持不变。在构造CFG时,您需要立即定义所有词汇表。
据我所知,您有两种方法可以包含来自外部资源的综合词汇:
CFG.fromstring()
进行解析。您可能需要处理一些转义问题(例如,终端符号中的引号/撇号)。直接使用CFG构造函数,为其提供制作的列表,例如:
from nltk import CFG, Production, Nonterminal
prods = [Production(Nonterminal('S'), (Nonterminal('PN'), Nonterminal('V'))),
Production(Nonterminal('PN'), ('Sam',)),
Production(Nonterminal('PN'), ('Fred',)),
Production(Nonterminal('V'), ('sleeps',))]
g = CFG(Nonterminal('S'), prods)
这看起来有点冗长,但构建Python数据类型的嵌套结构可能更容易,更快,而不是为(更简洁的)语法字符串格式编写无错误的序列化器。