Вызов annotate_text из IBM Watson Concept Insights с Python

Я написал набор функций Python для взаимодействия с API Bluemix / Watson Concept Insights. Я могу сгенерировать токен и использовать его для получения результата от сервера, но результат воняет: он далеко не так хорош, как тот, который я получаю, когда подключаю ту же информацию к их утилите тестирования Swagger.

Я подозреваю, что что-то не так с тем, как я отправляю свой запрос, но я не знаю, что именно. Код следует. Во-первых, из event_insight_lib.py:

def importCredentials(filename='credentials.json'):
    if filename in [f for f in os.listdir('.') if os.path.isfile(f)]:
        data = json.load(open(filename))['concept_insights'][0]['credentials']
        return data

def generateToken(filename='credentials.json'):
    credentials = importCredentials(filename)
    r = requests.get("https://gateway.watsonplatform.net/authorization/api/v1/token\?url=https://stream.watsonplatform.net/concept-insights/api", auth=(credentials['username'], credentials['password']))
    if r.status_code == requests.codes.ok:
        return r.text

def annotateText(text, token, content_type = 'text/plain'):
    base_url='https://watson-api-explorer.mybluemix.net/concept-insights/api/v2/graphs/wikipedia/en-20120601/annotate_text'
    headers = {'X-Watson-Authorization-Token': token, 'Content-Type': content_type}
    r = requests.post(base_url, headers=headers, data={'body': text})
    return r.text

Эти методы выполняются event_insight.py:

token = event_insight_lib.generateToken()
ret = event_insight_lib.annotateText("""long string being concept-analyzed...""", token)
    print(ret)

Полная демонстрация разницы в выходных здесь. Полная кодовая база здесь. Я не очень опытен с библиотекой Requests: есть ли тонкая ошибка где-нибудь на конце Pythonic?

Соответствующая часть документации IBM находится здесь.

1 ответ

Решение

Как сказал @engineerc, вы отправляете dict() как data, Цитируя ваш комментарий data=text.encode(encoding='UTF-8', errors='ignore') это решение вашей проблемы.


С другой стороны, пожалуйста , не используйте https://watson-api-explorer.mybluemix.net, это прокси-приложение, которое мы используем для размещения документации Swagger.
URL сервиса: https://gateway.watsonplatform.net/concept-insights/api

Также у нас есть Python-SDK, который поддерживает ConceptInsights и annotate_text вызов.

Это пип модуль, так что вы будете делать:

pip install watson-developer-cloud

призвание annotate_text это так просто, как:

import json
from watson_developer_cloud import ConceptInsightsV2 as ConceptInsights


concept_insights = ConceptInsights(
    username='YOUR SERVICE USERNAME',
    password='YOUR SERVICE PASSWORD')

annotations = concept_insights.annotate_text('IBM Watson won the Jeopardy television show hosted by Alex Trebek')
print(json.dumps(annotations, indent=2))
Другие вопросы по тегам