【问题标题】:NLTK: Parsing sentences using a simple grammar and part of speech tagsNLTK:使用简单语法和词性标签解析句子
【发布时间】:2015-02-27 21:29:01
【问题描述】:

对于像“这是一个简单的句子”这样的句子,它已被标记为:

[('This', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('simple', 'JJ'), ('sentence', 'NN')]

并使用以下语法:

    my_grammar = nltk.CFG.fromstring("""
... S -> DP VP
... DP -> Det NP
... NP -> Adj N
... VP -> V DP
... Det -> 'DT'
... N -> 'NN'
... V -> 'VBZ'
... Adj -> 'JJ'
... """)

如何输出树形结构。我正在尝试使用词性标签代替已标记的单词,但仍然在树中显示单词本身以获得类似于:

    (S
     (DP This)
     (VP
      (V is)
      (DP (Det a)
       (NP
        (Adj simple) (N sentence))))

编辑:我已经尝试了答案here,但是当我开始使用命令时:

for tree in parser.parse(pos_tags):
...     print(tree)

什么都不返回

【问题讨论】:

    标签: python parsing nltk grammar


    【解决方案1】:

    我想说,如果您使用上述语法来解析给定的句子,那么解析器将不会返回任何内容,因为没有语法规则匹配初始的 ThisDT 短语。

    您可以添加规则:DP -> Det

    【讨论】:

    • 我将DP -> Det NP 行修改为DP -> Det NP | Det。如果我在 pos_tags 变量上运行解析器,例如:> pos_tags = [pos for (token,pos) in nltk.pos_tag(sentence)] 以获取 ['DT', 'VBZ', 'DT', 'JJ', 'NN'] 它现在将返回 (S (DP (Det DT)) (VP (V VBZ) (DP (Det DT) (NP (Adj JJ) (N NN))))),但是如果我在一个普通的 POS 标记句子上运行它,使用 nltk.pos_tag() 在一个单词标记的句子上它返回错误。这解决了我的语法错误。现在要弄清楚如何让它显示实际的标记词而不是标签本身。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2022-09-30
    • 2014-01-25
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多