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)
将 annotate 和 candidates 中的共享请求逻辑移动到一个辅助函数。[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]
已移除 annotate 和 candidates 中的 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]
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。