使用NLTK通过分块提取关系

时间:2015-05-16 00:16:25

标签: python nltk named-entity-recognition chunking

我正在试图弄清楚如何按照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.*>}
          """

假设我想为我的任务使用级联的chunker,我需要使用什么语法?另外,在使用chunker时,我是否可以指定特定的单词(例如&#34;定向&#34;或&#34;行为&#34;)?

1 个答案:

答案 0 :(得分:3)

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

  

a。)如何在NLTK中使用级联分块b。)是否可以将chunker视为无上下文语法,如果是,如何处理?

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

  

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

我无法真实地说出来,无论如何,正如我所说,你没有提供任何具体细节;但如果您正在处理真实文本,我的理解是,除非您拥有庞大的团队和大量时间,否则任何任务的手写规则集都是无用的。研究NLTK附带的概率工具。如果你有一个带注释的训练语料库,它会变得容易多了。

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

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

  2. 根据this,,您可以指定多个扩展规则,如下所示:

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

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