【问题标题】:Relation extraction via chunking using NLTK使用 NLTK 通过分块提取关系
【发布时间】:2015-07-28 00:39:28
【问题描述】:

我正在尝试弄清楚如何按照Chapter 7 of the NLTK book 使用 NLTK 的级联分块器。不幸的是,我在执行重要的分块测量时遇到了一些问题。

让我们从这句话开始:

"adventure movies between 2000 and 2015 featuring performances by daniel craig"

当我使用以下语法时,我能够找到所有相关的 NP:

grammar = "NP: {<DT>?<JJ>*<NN.*>+}"

但是,我不确定如何使用 NLTK 构建嵌套结构。这本书给出了以下格式,但显然缺少一些东西(例如,一个人实际上如何指定多个规则?):

grammar = r"""
  NP: {<DT|JJ|NN.*>+}          # Chunk sequences of DT, JJ, NN
  PP: {<IN><NP>}               # Chunk prepositions followed by NP
  VP: {<VB.*><NP|PP|CLAUSE>+$} # Chunk verbs and their arguments
  CLAUSE: {<NP><VP>}           # Chunk NP, VP
  """

就我而言,我想做如下的事情:

grammar = r"""
          MEDIA: {<DT>?<JJ>*<NN.*>+}
          RELATION: {<V.*>}{<DT>?<JJ>*<NN.*>+}
          ENTITY: {<NN.*>}
          """

假设我想为我的任务使用级联分块器,我需要使用什么语法?另外,我是否可以在使用分块器时指定特定的词(例如“directed”或“acted”)?

【问题讨论】:

    标签: python nltk named-entity-recognition chunking


    【解决方案1】:

    我无法对关系提取部分发表评论,尤其是因为您没有详细说明您想要做什么以及您拥有什么样的数据。所以这是一个相当部分的答案。

    a.) 级联分块在 NLTK 中如何工作 b.) 是否可以将分块器视为上下文无关语法,如果可以,如何处理?

    据我了解,NLTK 书中的"Building nested structure with cascaded chunkers" 部分,您可以将它与上下文无关语法一起使用,但您必须反复应用它才能获得递归结构。块是扁平的,但您可以在块之上添加块。

    c.) 如何使用分块来执行关系提取?

    我真的不能说这个,无论如何,正如我所说,你没有给出任何细节;但如果您处理的是真实文本,我的理解是,any 任务的手写规则集是没有用的,除非您有一个庞大的团队和大量时间。查看 NLTK 附带的概率工具。如果你有一个带注释的训练语料库,那就容易多了。

    无论如何,还有一些关于 RegexpParser 的知识。

    1. 您会在http://www.nltk.org/howto/chunk.html 上找到更多使用示例。 (不幸的是,这不是一个真正的操作指南,而是一个测试套件。)

    2. 根据this,,你可以像这样指定多个扩展规则:

      patterns = """NP: {<DT|PP\$>?<JJ>*<NN>}
          {<NNP>+}
          {<NN>+}
      """
      

      我应该补充一点,语法可以有多个具有相同左侧的规则。这应该为相关规则的分组等增加一些灵活性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多