Python 2.7 动态上下文无关语法NLTK

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 ->

尝试使用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))        

似乎您无法动态更改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()
    对其进行解析。您可能需要处理一些转义问题(例如,终端符号中的引号/撇号)
  • 直接使用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))        
    
    这看起来有点冗长,但是构造这种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中的解析树,如我在第一篇文章中所示,并使用对象对其进行种子设定以自动生成句子。