Python中列表的语法nltk

Python中列表的语法nltk,python,list,parsing,text,nltk,Python,List,Parsing,Text,Nltk,我必须用python为列表创建一个语法nltk。我有一篇课文的语法: grammar1 = nltk.CFG.fromstring(""" S -> NP VP VP -> V NP | V NP PP PP -> P NP V -> "saw" | "ate" | "walked" NP -> "John" | "Mary" | "Bob" | Det N | Det N PP Det -> "a" | "an

我必须用python为列表创建一个语法nltk。我有一篇课文的语法:

grammar1 = nltk.CFG.fromstring("""
    S -> NP VP
    VP -> V NP | V NP PP
    PP -> P NP
    V -> "saw" | "ate" | "walked"
    NP -> "John" | "Mary" | "Bob" | Det N | Det N PP
    Det -> "a" | "an" | "the" | "my"
    N -> "man" | "dog" | "cat" | "telescope" | "kitchen"
    P -> "in" | "on" | "by" | "with"
    """)

sent = "the cat ate a telescope in the kitchen".split()
rd_parser = nltk.RecursiveDescentParser(grammar1)

for tree in rd_parser.parse(sent):
    print(tree)

现在,如何对列表执行相同的操作?我需要用基本语法测试合法和非法列表。我没有找到任何关于nltk和列表的信息,我真的不明白如何才能做到这一点…

注意,下面的代码行已经创建了一个字符串列表

sent = "the cat ate a telescope in the kitchen".split()
您还使用以下行为语法创建了递归下降解析器。请注意,您只需要执行一次

rd_parser = nltk.RecursiveDescentParser(grammar1)
现在,如果您想测试不同的令牌列表,只需执行以下操作:

L = ["John", "walked", "the", "dog"]
result = rd_parser.parse(L)

您有一个可以应用于令牌列表的解析器。您有一组不同格式的测试材料。从您的列表中引用:空列表、带一个标记的列表、带多个标记的列表、带数字的列表、元组和词汇表

解析器可以处理字符串序列,在您的例子中,这意味着一个列表或元组,其元素是字符串,每个字符串是一个单词。解析器不能处理其他任何事情;如果您的代码必须处理其他类型,请编写python代码,在解析器看到它们之前检查它们的类型

您将对内置函数和首选函数感兴趣。例如:


你能更详细地解释一下问题是什么吗?这真的是OP需要的吗?可能不是。我同意更多的澄清会有帮助。是的,也许我不够清楚。我需要创建一个语法,以便分析包含合法和非法案例的列表。法律术语有:空列表、带一个标记的列表、带多个标记的列表、带数字的列表、元组和词汇表。我真的不明白怎么做。。。它适用于字符串列表,但不适用于所有其他情况。那么什么是非法情况?
if (isinstance(sent, (tuple, list)) and all(isinstance(w, str) for w in sent)):
    # A tuple or list of strings; try to parse it.
    trees = rd_parser.parse(sent)