跳转到主要内容

Python接口到DBpedia Spotlight REST API

项目描述

是一个围绕DBpedia Spotlight的REST接口的Python包装器。

此包针对DBpedia Spotlight版本0.7进行测试。只要没有进行重大的API重写,这个包装器也可能与未来的版本兼容。如果您遇到较新版本的DBpedia Spotlight的bug,请在此处的github上创建一个问题。

请注意,我们正在尝试跟踪DBpedia Spotlight的发布版本号,这样您可以轻松地看到哪个PySpotlight版本与哪个Spotlight发布进行了测试。例如,所有PySpotlight 0.6.x发布都与Spotlight 0.6.x兼容等。虽然我们旨在与较旧的Spotlight发布向后兼容,但这不能保证。如果您正在使用较旧的Spotlight版本,可能还需要使用较旧的PySpotlight版本。

安装

最新稳定版本可在Python包索引(PyPI)上找到。

因此,安装就像这样简单

pip install pyspotlight

可以通过指定版本安装旧版本

pip install pyspotlight~=0.6.1

从源/github安装的要求

本模块已在Python 2.7和Python 3.5上进行了测试。

只要您使用< span class="docutils literal">setup.py进行安装(python setup.py install),就没有问题,因为Python会为您处理依赖项。

如果您决定不使用< span class="docutils literal">setup.py,则需要< span class="docutils literal">requests库。

所有这些包都可以在Python包索引中找到,并且可以通过easy_install推荐的方法,即pip轻松安装。

使用< span class="docutils literal">pip特别容易,因为您只需这样做

pip install -r requirements.txt

它将安装该文件中列出的所有包依赖项。

用法

用法简单易懂,就像API一样简单

>>> import spotlight
>>> annotations = spotlight.annotate('http://localhost/rest/annotate',
...                                  'Your test text',
...                                  confidence=0.4, support=20)

这将返回给定文本中找到的所有资源的列表。假设我们为以下文本做了这样的事情

President Obama on Monday will call for a new minimum tax rate for individuals making more than $1 million a year to ensure that they pay at least the same percentage of their earnings as other taxpayers, according to administration officials.

我们可能会得到这个

>>> spotlight.annotate('http://localhost/rest/annotate', sample_txt)
[
  {
    'URI': 'http://dbpedia.org/resource/Presidency_of_Barack_Obama',
    'offset': 0,
    'percentageOfSecondRank': -1.0,
    'similarityScore': 0.10031112283468246,
    'support': 134,
    'surfaceForm': 'President Obama',
    'types': 'DBpedia:OfficeHolder,DBpedia:Person,Schema:Person,Freebase:/book/book_subject,Freebase:/book,Freebase:/book/periodical_subject,Freebase:/media_common/quotation_subject,Freebase:/media_common'
  },
  …(truncated remaining elements)…
]

Spotlight API支持的所有附加过滤参数都可以传递给字典中的< span class="docutils literal">filters参数。

例如

>>> only_person_filter = {
...     'policy': "whitelist",
...     'types': "DBpedia:Person",
...     'coreferenceResolution': False
... }

>>> spotlight.annotate(
...     "http://localhost/rest/annotate",
...     "Any collaboration between Shakira and Metallica seems highly unlikely.",
...     filters=only_person_filter
... )

[{
    'URI': 'http://dbpedia.org/resource/Shakira',
    'offset': 26,
    'percentageOfSecondRank': 1.511934771738109e-09,
    'similarityScore': 0.9999999984880361,
    'support': 2587,
    'surfaceForm': 'Shakira',
    'types': 'Schema:MusicGroup,DBpedia:Agent,Schema:Person,DBpedia:Person,DBpedia:Artist,DBpedia:MusicalArtist'
}]

相同的参数也适用于< span class="docutils literal">spotlight.candidates函数,它返回所有匹配候选实体的列表,而不仅仅是顶级候选实体。

请注意,Spotlight API可能支持尚未在pyspotlight中实现的其他接口。请随意贡献 :-)!

运行DBpedia Spotlight

如果您只想尝试Spotlight,可以在demo.dbpedia-spotlight.org找到一个交互式演示。要向演示服务器提交pyspotlight请求,您可以使用sites.xml中找到的端点。

对于任何重要的Spotlight使用,强烈建议运行自己的服务器。请遵循安装说明

异常

以下异常可能会发生

  • ValueError

    • JSON响应无法解码时。

  • SpotlightException

    • JSON响应不包含任何所需字段或格式不正确时。

    • 您忘记在API URL中明确指定协议(http/https)。

    通常,异常的消息会告诉您< em>确切是什么出了问题。如果不是这样,我们可能遗漏了一些错误处理。因此,如果您遇到意外的异常,请直接在github上提交问题。

  • requests.exceptions.HTTPError

    当响应http状态码< em>不是 200时抛出。这可能会发生,如果您在Spotlight集群前面有一个像nginx这样的负载均衡器,并且没有可用的服务器,因此nginx会抛出< span class="docutils literal">502 Bad Gateway。

提示

我们强烈建议尝试调整< em>置信度和< em>支持度值。此外,通过查看它们的< em>相似度得分(即上下文得分)来过滤更多注释可能更可取。

如果您想更改默认值,请随意使用itertools.partial创建一个带有简化签名的包装器

>>> from spotlight import annotate
>>> from functools import partial
>>> api = partial(annotate, 'http://localhost/rest/annotate',
...               confidence=0.4, support=20,
...               spotter='SpotXmlParser')
>>> api('This is your test text. This function uses a non-default
...      confidence, support, and spotter. Furthermore all calls go
...      directly to localhost/rest/annotate.')

正如您所看到的,这大大减少了函数的复杂性。Pyspotlight提供基于函数的接口,而不是基于类,以避免不必要的间接层。

测试

如果您想运行测试,您需要从 PyPI 安装 nose2 (~0.6)。然后,您可以从命令行在这个或 spotlight/ 目录下简单地运行 nose2

所有开发和常规依赖项都可以通过单个命令安装

pip install -r requirements-dev.txt

错误

如果您发现错误,请创建一个问题,并附加您发送的原始响应。请参考 ubergrape/pyspotlight#3 了解如何提交良好的错误报告的示例。

变更日志

v0.7.2 (2017-12-02)

  • 更新了 README 指示和链接。[Alex Olieman]

  • 确保 candidates 返回字符串形式的表面形式。[Alex Olieman]

  • 确保表面形式始终是字符串(合并 PR #1)。[ShomyLiu & Alex Olieman]

v0.7.1 (2016-07-25)

  • annotatecandidates 中的共享请求逻辑移动到一个辅助函数。[Alex Olieman]

  • 更新了设置/包文件。[Alex Olieman]

  • 更新了 README。[Luis Nell & Alex Olieman]

v0.7.0 (2016-07-18)

API 变更

  • 为与 0.7 兼容,将默认 spotter 改为 'Default'。[Alex Olieman]

  • 将过滤参数移动到 filters 参数中。[Alex Olieman]

    • 已移除 annotatecandidates 中的 policy 参数。

    • 添加了一个类型参数,它允许在服务器端过滤资源。它还很好地补充了策略参数。

新增

  • Python 3 兼容。[Alex Olieman]

  • 将测试移动到 nose2。[Alex Olieman]

修正

  • 更新了 requests 包的所需版本。[Alex Olieman]

  • 移除可变默认参数。[Luis Nell]

v0.6.5.2 (2013-08-27)

  • 添加了清单,以便在 PyPI 上包含 README。[Luis Nell]

v0.6.5.1 (2013-08-12)

  • 更新 README 以反映 PyPI 发布。[Luis Nell]

  • 升级到 requests 1.2.3。[Luis Nell]

  • BSD 许可证。[Luis Nell]

  • 针对在 surfaceForm 中解析为列表的脚注的解决方案。[Luis Nell]

  • candidates 中不要假设 surfaceForm 总是列表。[Luis Nell]

v0.6.5 (2012-10-07)

API 变更

  • 必须显式在 URL 中提供协议。[Luis Nell]

新增

  • 添加了测试相关的内容。[Luis Nell]

  • 为 pip 添加 requirements.txt。[Luis Nell]

  • 使用 requests 内置的 json 解码。[Luis Nell]

修正

  • 一些 README 更新。[Luis Nell]

  • 为 py2.6 添加 ordereddict 依赖。[Luis Nell]

  • 测试:适应 requests 原始处理。[Luis Nell]

  • 从现在开始使用 requests 0.14.1。[Luis Nell]

  • 修复了拼写错误,错误的链接。[Pablo Mendes]

    • 小错误:我们拼作 DBpedia,而不是 DBPedia :)

    • 修复:链接指向 OpenCalais,它是 DBpedia Spotlight 的商业闭源替代品

v0.5.3 (2012-08-01)

  • 更新 README 以反映异常更改。[Luis Nell]

  • 在 response.status_code != 200 时引发 requests.exceptions.HTTPError。[Luis Nell]

  • 优先使用 simplejson 而不是 json。[Luis Nell]

  • 添加对新异常处理的测试。[Luis Nell]

  • 添加异常处理。[Luis Nell]

v0.5.2 (2012-04-06)

  • 修复了 setup.py 的问题。v0.5.2。[Luis Nell]

v0.5.1 (2012-03-21)

  • 修复 setup.py - 推出 0.5.1。[Luis Nell]

v0.5.0 (2012-03-20)

  • 初始化。[Luis Nell]

项目详情


下载文件

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

源代码分发

pyspotlight-0.7.2.tar.gz (12.0 kB 查看哈希值)

上传时间 源代码

构建分发

pyspotlight-0.7.2-py2.py3-none-any.whl (15.1 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持