Skip to main content

用于将句子(自然语言)解析为场景图(符号表示)的 python 工具包。

项目描述

场景图解析器

SceneGraphParser ( sng_parser) 是一个 python 工具包,用于基于依赖解析将句子(自然语言)解析为场景图(作为符号表示)。这个项目的灵感来自于斯坦福场景图解析器

与斯坦福版本不同的是,这个解析器是完全由 Python 编写的。它具有易于使用的用户界面和易于配置的设计。它将句子解析为图形,其中节点是名词(带有诸如行列式或形容词等修饰语),边是名词之间的关系。有关详细信息,请参阅示例部分。

亮点:该项目仍在开发中。所有 API 都可能发生任何变化。

注意:您可能会注意到,解析是由解析树上的一组人工编写的规则完成的。因此,我们需要每个人的帮助来收集当前程序的失败/角落案例。任何类型的报告或帮助都应该受到欢迎。

这个 repo 是为:
统一视觉语义嵌入:用结构化意义表示桥接视觉和语言
Hao Wu, Jiayuan Mao , Yufeng Zhang, Yuning Jiang , Lei Li , Weiwei SunWei-Ying Ma
在计算机视觉和模式会议上2019 年表彰 (CVPR) (口头报告)

如果您觉得舒服,请考虑引用我们的论文 :)。这个 repo 和原始的 Stanford Scene Graph Parser 之间的区别可以在#7中找到。

安装

可以使用 pip 安装该软件包。由于目前只支持spaCy作为Backend,所以安装后需要下载英文包。

pip install SceneGraphParser
python -m spacy download en  # to use the parser for English

例子

使用此工具的最简单方法是调用该parse函数。在设计上,sng_parser支持不同的后端。目前,我们只支持 spaCy 后端。

pip install spacy
>>> import sng_parser
>>> graph = sng_parser.parse('A woman is playing the piano in the room.')
>>> from pprint import pprint
>>> pprint(graph)
{'entities': [{'head': 'woman',
               'lemma_head': 'woman',
               'lemma_span': 'a woman',
               'modifiers': [{'dep': 'det', 'lemma_span': 'a', 'span': 'A'}],
               'span': 'A woman'},
              {'head': 'piano',
               'lemma_head': 'piano',
               'lemma_span': 'the piano',
               'modifiers': [{'dep': 'det',
                              'lemma_span': 'the',
                              'span': 'the'}],
               'span': 'the piano'},
              {'head': 'room',
               'lemma_head': 'room',
               'lemma_span': 'the room',
               'modifiers': [{'dep': 'det',
                              'lemma_span': 'the',
                              'span': 'the'}],
               'span': 'the room'}],
 'relations': [{'object': 1, 'relation': 'playing', 'subject': 0},
               {'object': 2, 'relation': 'in', 'subject': 0}]}
>>> sng_parser.tprint(graph)  # we provide a tabular visualization of the graph.
Entities:
+--------+-----------+-------------+
| Head   | Span      | Modifiers   |
|--------+-----------+-------------|
| woman  | a woman   | a           |
| piano  | the piano | the         |
| room   | the room  | the         |
+--------+-----------+-------------+
Relations:
+-----------+------------+----------+
| Subject   | Relation   | Object   |
|-----------+------------+----------|
| woman     | playing    | piano    |
| woman     | in         | room     |
+-----------+------------+----------+

或者,您可以配置自己的解析器:

>>> import sng_parser
>>> parser = sng_parser.Parser('spacy', model='en')  # the positional argument specifies the backend, and the keyward arguments are for the backend initialization.
>>> graph = parser.parse('A woman is playing the piano in the room.')

图表规格

我们使用纯pythonic dictandlist来表示一个图。尽管这种灵活性可能会带来一些不必要的问题,但我们更喜欢这种表示,因为:

  1. 目前,该工具仍在开发中,这些 API 可能会发生变化。
  2. 这使得该工具易于集成到任何基于 python 的项目中。您不需要关心酸洗/解酸结果。在代码中的任何地方使用它!

生成的场景图符合以下规范:

{
  'entities': [  # a list of entities
    {
      'span': "the full span of a noun phrase",
      'lemma_span': "the lemmatized version of the span",
      'head': "the head noun",
      'lemma_head': "the lemmatized version of the head noun",
      'modifiers': [
        {
          'dep': "the dependency type",
          'span': "the span of the modifier",
          'lemma_span': "the lemmatized version of the span"
        },
        # other modifiers...
      ]
    },
    # other entities...
  ],

  'relations': [  # a list of relations
    # the subject and object fields are sometimes called "head" and "tail" in relation extraction papers.
    {
      'subject': "the entity id of the subject",
      'object': "the entity id of the object",
      'relation': "the relation"
    }
    # other relations...
  ]
}

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

SceneGraphParser-0.1.0.tar.gz (18.3 kB 图哈希)

已上传 source

内置分布

SceneGraphParser-0.1.0-py3-none-any.whl (19.6 kB 图哈希)

已上传 py3