python - 使用 NLTK 通过分块进行关系提取

标签 python nltk named-entity-recognition chunking

我正在尝试根据 Chapter 7 of the NLTK book 了解如何使用 NLTK 的级联分 block 器.不幸的是,我在执行重要的分 block 措施时遇到了一些问题。

让我们从这个短语开始:

"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.*>}
          """

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

最佳答案

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

a.) How does cascading chunking work in NLTK b.) Is it possible to treat the chunker like a context-free grammar, and if so, how?

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

c.) How can I use chunking to perform relation extraction?

我真的不能这么说,而且正如我所说,你没有给出任何细节;但如果您处理的是真实文本,我的理解是为任何 任务手写的规则集都是无用的,除非您拥有庞大的团队和大量时间。查看 NLTK 附带的概率工具。如果您有带注释的训练语料库,事情就会简单得多。

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

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

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

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

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

关于python - 使用 NLTK 通过分块进行关系提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30270502/

相关文章:

Python Selenium Geckodriver 连接被拒绝

python - 如何为 python NLTK 构建翻译语料库?

python - 用于民族的 Python 中的智能词干提取/词形还原

python - 使用 Python 将句子列表写入 csv 中的单个列

用于命名实体识别的 TensorFlow RNN

python - MITIE 模型

python - 将 Pandas 数据框中的字符串转换为列表的最佳方法是什么?

python - 如何使用 Python 在挂载之间 move 文件?

python - 将列表的所有元素相乘(另一个列表索引超出范围的问题)

spacy - 在spaCy中,为什么 '\n'经常被英文NER标记为GPE?