【问题标题】:NLTK: filter sentences with specific structuresNLTK:过滤具有特定结构的句子
【发布时间】:2013-04-29 16:09:05
【问题描述】:

如何使用 NLTK 过滤具有特定结构的句子? 例如,我们有如下上下文无关文法的定义:

  1. S → NP VP
  2. S → Aux NP VP
  3. S → VP
  4. NP → Pronoun
  5. NP → Proper-Noun
  6. NP → Det Nominal
  7. Nominal → Noun
  8. Nominal → Nominal Noun
  9. Nominal → Nominal PP
  10.VP → Verb
  11.VP → Verb NP
  12.VP → VP PP
  13.PP → Prep NP

可以看出,定义了三种句子结构:

  1. S → NP VP
  2. S → Aux NP VP
  3. S → VP

给定以下句子,我想知道这句话是否符合以上三个句子结构中的任何一个。

我不太喜欢乡村音乐,但它具有美丽的潜力,结合了喜剧和悲伤。

我的问题是,我应该如何使用 NLTK?

【问题讨论】:

    标签: python nlp nltk


    【解决方案1】:

    http://www.nltk.org/book/ch05.html

    应该解释你需要的一切。基本上,您必须首先对句子进行标记(将其分解为单独的标记),然后用 nltk 将它们识别为的相应 PoS 标记它们。

    这会返回一个元组列表,然后有多种方法可以将这些元组与语法中的元组进行比较。

    防止将来出现错误链接的具体代码:

    >>> text = word_tokenize("And now for something completely different")
    >>> nltk.pos_tag(text)
    [('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'),
    ('completely', 'RB'), ('different', 'JJ')]
    

    【讨论】:

    • 在这个link 中,在示例 8.12 (code_sentential_complement.py) 中,它使用一个简单的过滤器来查找带有句子补语的动词。我们可以用类似的代码先把句子解析成句法树,然后过滤句法树吗?根据你回答的解决方法,我们得先找出句子中单词的词性标签,这似乎没有必要。
    • 我的意思是,它有点迂回,但 nltk 有 pos 标记。在 nltk 所做的 pos 标记中有一个隐含的句法树。通过找到 pos 标签,您实际上是在找到那棵树。涉及一些额外的工作,但 nltk 实际上并不是为处理上下文无关语法而设计的,它是为直接 nlp 而设计的,例如 pos 标记。
    • 我明白你的意思。谢谢你的帮助。看来我需要自动机来执行 POS 标签和 CFG 之间的匹配。
    • 我认为这是一个错误答案的例子(恕我直言),因为链接显示 404 错误,因此它不再有用了。
    猜你喜欢
    • 2017-08-25
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    相关资源
    最近更新 更多