1

我没有看到使用可用 api 文档的解决方案。

它在 Web 控制台上也不可用。

是否可以使用Watson Discovery Service获取文件 url

4

2 回答 2

3

如果您需要存储原始源/文件 URL,可以将其作为字段包含在 Discovery 服务的文档中,然后您可以在需要时查询该字段。

于 2017-01-30T16:35:15.973 回答
1

我也为这个请求苦苦挣扎,但最终使用 Python 绑定到 Watson Discovery 中让它工作。在线文档和API参考很差;这是我用来让它工作的东西:

(假设您有一个 Watson Discovery 服务并创建了一个集合):

# Programmatic upload and retrieval of documents and metadata with Watson Discovery

from watson_developer_cloud import DiscoveryV1
import os
import json

discovery = DiscoveryV1(
    version='2017-11-07',
    iam_apikey='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    url='https://gateway-syd.watsonplatform.net/discovery/api'
)

environments = discovery.list_environments().get_result()
print(json.dumps(environments, indent=2))

这将为您提供环境 ID。现在附加到您的代码:

collections = discovery.list_collections('{environment-id}').get_result()
print(json.dumps(collections, indent=2))

这将向您显示用于以编程方式将文档上传到的集合 ID。您应该有一个要上传的文档(在我的例子中是一个 MS Word 文档),以及来自您自己的源文档系统的随附 URL。我将使用一个琐碎的虚构示例。

注意:文档没有告诉您将 , 'rb' 附加到 open 语句的末尾,但在上传 Word 文档时是必需的,如下面的示例所示。原始文本/HTML 文档可以在没有 'rb' 参数的情况下上传。

url = {"source_url":"http://mysite/dis030.docx"}
with open(os.path.join(os.getcwd(), '{path to your document folder with trailing / }', 'dis030.docx'), 'rb') as fileinfo:
    add_doc = discovery.add_document('{environment-id}', '{collections-id}', metadata=json.dumps(url), file=fileinfo).get_result()
    print(json.dumps(add_doc, indent=2))
    print(add_doc["document_id"])

请注意将元数据设置为 JSON 字典,然后使用参数中的 json.dumps 对其进行编码。到目前为止,我只想存储原始源 URL,但您可以根据自己的用例需要使用其他参数对其进行扩展。

这个对 Discovery 的调用会为您提供文档 ID。

您现在可以使用 Discovery 查询之类的方式查询集合并提取元数据:

my_query = discovery.query('{environment-id}', '{collection-id}', natural_language_query="chlorine safety")
print(json.dumps(my_query.result["results"][0]["metadata"], indent=2))

注意 - 我只是从返回的整体结果中提取存储的元数据 - 如果你只是有: print(my_query) 你会得到 Discovery 的完整响应......但是......还有很多事情要做仅识别您自己的自定义元数据。

于 2018-10-18T02:03:26.313 回答