可以从IBM Watson的一个API调用中获得多个结果吗?

时间:2015-06-12 03:11:33

标签: python ibm-cloud ibm-watson personality-insights

我正在使用Python为IBM Watson的Personality Insights服务编写脚本。我将结果用作机器学习项目的培训数据。

由于服务非常有限(100个电话/月),是否可以通过一次API调用获得多个人格见解?

2 个答案:

答案 0 :(得分:3)

Jeff对API限制是正确的:您不限于每月100次api通话;这只是您每月获得的免费电话的数量。

但是回答你的问题:是的,可以计算多张肖像。如果您使用application/json作为内容类型,则会注意到每个内容元素都包含userid字段。您可以包含来自不同作者(userid)的内容,只是因为您不能以JSON格式获取输出,因为这个仅支持单个作者。您可以使用CSV API并获取多行,一行对应于输入中的每位作者。

以下是可能有用的示例代码:

导入请求,json

data = { "contentItems" : [
  { 
    "userid" : "user1",
    "id" : "uuid1.1",
    "contenttype" : "text/plain",
    "language" : "en",
    "created" : 1393264847000,
    "content": "some text"
  },
  { 
    "userid" : "user1",
    "id" : "uuid1.2",
    "contenttype" : "text/plain",
    "language" : "en",
    "created" : 1393263869000,
    "content": "even more"
  },
  {
    "userid" : "user2",
    "id" : "uuid2",
    "contenttype" : "text/plain",
    "language" : "en",
    "created" : 1394826985000,
    "content": "this is a different author"
  }
] }

response = requests.post(
       "https://gateway.watsonplatform.net/personality-insights"+
       "/api/v2/profile", # Or append: "?headers=True",
   auth=("API_USERID", "API_PASSWORD"),
   headers={"Content-Type": "application/json", "Accept": "text/csv"},
   data = json.dumps(data)
)

print("HTTP %d:\n%s" % (response.status_code, response.content))

关于此代码的两点说明:

  • 运行此确切代码将获得HTTP 400,因为它不符合最低文本要求:您需要用文本替换content字段 - 更多文字!
  • 多个内容项可以属于同一作者 - 请注意,上面的前两个属于user1,最后一个属于user2
  • 如果省略Accept: "text/csv"标题,则默认为JSON API并返回HTTP 400:"找到多个作者"。请记住为多位作者使用CSV API。

通过这种方式,您可以在单个API调用中批量处理某些作者。请记住,您需要保持在请求大小限制(目前为20Mb)之下,因此您需要更加小心。

答案 1 :(得分:1)

您不仅限于每月100次API调用,只需100多次就可以为API调用付费。