Можно ли получить несколько результатов за один вызов API в IBM Watson?

Я использую Python для программирования сценария для службы IBM Watson's Personality Insights. Я использую результаты в качестве обучающих данных для проекта машинного обучения.

Поскольку услуга настолько ограничена (100 звонков в месяц), возможно ли получить информацию о нескольких личностях всего за один вызов API?


person Phil D    schedule 12.06.2015    source источник


Ответы (2)


Джефф прав насчет ограничения API: вы не ограничены 100 вызовами API в месяц; это всего лишь количество бесплатных звонков, которые вы получаете в месяц.

Однако и отвечая на ваш вопрос: Да, можно вычислить несколько портретов. Если вы используете application/json в качестве Content-Type, вы заметите, что включаете поле userid для каждого элемента содержимого. Вы можете включать контент от разных авторов (userid's), но вы не можете получить вывод в формате 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. Имейте в виду, что вам нужно оставаться ниже ограничения размера запроса (в настоящее время 20 МБ), поэтому вам просто нужно быть немного более осторожным.

person herchu    schedule 12.06.2015
comment
Это именно то, что я искал, спасибо! Я реализовал предложение, и оно работает как задумано. Жаль, что вы можете анализировать только нескольких авторов с опцией ответа csv. Быстрый вопрос, как получить заголовки с помощью csv? Я попытался поместить заголовки: true в раздел заголовков, но это не сработало. - person Phil D; 16.06.2015
comment
Аргумент "?headers=true" - это параметр запроса, поэтому вам нужно добавить его в URL-адрес, а не в заголовки HTTP: что-то вроде /api/v2/profile?headers=true - person herchu; 16.06.2015
comment
Ааа, понятно. Огромное спасибо! - person Phil D; 17.06.2015
comment
Я думаю, что это перестало быть возможным с V3: cloud.ibm.com/docs/services/personality-insights/ - person xverges; 19.12.2018

Вы не ограничены 100 вызовами API в месяц, чуть больше 100 вы должны платить за вызовы API.

person Jeff Sloyer    schedule 12.06.2015