Python 2.7 动态上下文无关语法NLTK
尝试使用NLTK CFG生成句子。想知道是否可以将sql数据库连接到下面程序中的名词和动词。 在下面的示例中,车门、车窗、打开和关闭都是硬编码的。如何动态地要求nltk在这个特定的上下文中从例如excel或数据库列中查找名词和动词Python 2.7 动态上下文无关语法NLTK,python-2.7,nltk,Python 2.7,Nltk,尝试使用NLTK CFG生成句子。想知道是否可以将sql数据库连接到下面程序中的名词和动词。 在下面的示例中,车门、车窗、打开和关闭都是硬编码的。如何动态地要求nltk在这个特定的上下文中从例如excel或数据库列中查找名词和动词 import nltk from nltk.parse.generate import generate,demo_grammar from nltk import CFG grammar = CFG.fromstring(""" S ->
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))
似乎您无法动态更改NLTK CFG–一旦它被实例化,它就会保持不变。构建CFG时,需要立即定义所有词汇表
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))
就我所见,您有两种选择来包括来自外部资源的综合词汇表:
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))
CFG.fromstring()
对其进行解析。您可能需要处理一些转义问题(例如,终端符号中的引号/撇号)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))
这看起来有点冗长,但是构造这种Python数据类型的嵌套结构可能比为(更简洁的)语法字符串格式编写一个无错误的序列化器更容易、更快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))
感谢lenZ了解了Standford解析器,可以从Standford解析器生成CFG吗?例如,如果句子“openthegate”被解析为“(ROOT(S)(VP(vbopen)(NP(DT)(NN gate‘‘)’))”,那么除了手动将其编码为cfg.formstring以获得这种解析格式之外,还有什么简单的方法。我对Stan(d)ford解析器了解不多。也许可以导出其包含的语法,但如果它是一个统计解析器,这将不会很有趣。你想干什么?在某些情况下,从现有解析器的输出中训练新的解析器是明智的,但CFG很可能不适合这种情况。我的目的是使用解析器解析句子并研究解析树。复制ntlk中的解析树,如我在第一篇文章中所示,并使用对象对其进行种子设定以自动生成句子。