2015-03-09 8 views
0

В Bluemix я пытаюсь вызвать API-интерфейс извлечения знаний Watson из Python. Во-первых, я создаю приложение на Bluemix и подключаю к нему экстрактор отношений api. Затем из раскрывающегося меню API я получаю имя пользователя и пароль из экземпляров учетных данных. Который в нижеприведенном ниже я заменил bluemux-username и bluemix-password. Код Python я написал для этого заключается в следующем:Запрос POST для IBM Watson Извлечение связи возвращает ошибку

import requests 
import json 

url="https://gateway.watsonplatform.net/relationship-extraction-beta/api/v1/sire/0" 
username="bluemix_username" 
password="bluemix_passowrd" 
with open ("data.txt", "r") as myfile: 
    text=myfile.read().replace('\n', '') 

raw_data = { 
    'contentItems' : [{ 
     'contenttype' : 'text/plain', 
     'content': text 
    }] 
} 

input_data = json.dumps(raw_data) 


response = requests.post(url, auth=(username, password), headers = {'content-type': 'application/json'}, data=input_data) 
try: 
    response.raise_for_status() 
except requests.exceptions.HTTPError as e: 
    print("And you get an HTTPError: %s"% e.message) 

Однако, когда я запускаю это я получаю следующее сообщение об ошибке:

And you get an HTTPError: 400 Client Error: Bad Request 

* Примечание: Я использовал тот же метод для личности прозрений API, и это сработало.

Любые идеи?

Благодаря

+0

API-интерфейс Документов (http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/#!/relationship-extraction) скажем, что метод HTTP для извлечения отношений - GET и принимает один обязательный параметр 'txt'. – Kedar

+0

Спасибо за ваш ответ @kedar, я попробовал следующий ответ: = request.get (url, auth = (имя пользователя, пароль), headers = {'content-type': 'text/plain'}, data = text) ' и получил 'И вы получите HTTPError: 400 Client Error: Error' – laila

+0

Попробуйте' request.get (url + '? txt =' + text, auth = (имя пользователя, пароль)) 'вместо – Kedar

ответ

1

Вот обновленная копия кода, который должен работать:

import requests 
import json 

url="https://gateway.watsonplatform.net/relationship-extraction-beta/api/v1/sire/0" 
username="bluemix_username" 
password="bluemix_passowrd" 
with open ("data.txt", "r") as myfile: 
    text=myfile.read().replace('\n', '') 

input_data = { 
    'sid' : 'ie-en-news', 
    'txt' : text 
} 

response = requests.post(url, auth=(username, password), data=input_data) 
try: 
    response.raise_for_status() 
    print response.text 
except requests.exceptions.HTTPError as e: 
    print("And you get an HTTPError: %s"% e.message) 

В основном я изменил полезную нагрузку вы проводки, чтобы добавить некоторые недостающие значения.

Надеюсь, это поможет!

+0

есть, спасибо. – laila

0

Если вы не хотите использовать data.txt и использовать стандартный вход в терминале, вы можете сделать:

## -*- coding: utf-8 -*- 

import os 
import requests 
import fileinput 

class RelationshipExtractionService: 
    url = None 

    def __init__(self): 
     self.url = "https://gateway.watsonplatform.net/relationship-extraction-beta/api/v1/sire/0" 
     self.user = "<username>" 
     self.password = "<password>" 

    def extract(self, text): 
     data = { 
      'txt': text, 
      'sid': 'ie-en-news', # English News, for Spanish use: ie-es-news 
      'rt': 'xml', 
     } 

     r = requests.post(self.url, 
          auth=(self.user, self.password), 
          headers = { 
           'content-type': 'application/x-www-form-urlencoded'}, 
          data=data 
         ) 
     print("Request sent. Status code: %d, content-type: %s" % 
       (r.status_code, r.headers['content-type'])) 
     if r.status_code != 200: 
      print("Result %s" % r.text) 
      raise Exception("Error calling the service.") 
     return r.text 

if __name__ == '__main__': 
    service = RelationshipExtractionService() 
    for line in fileinput.input(): 
     print service.extract(line) 

Использование

Простой анализ текста:
echo "New York is awesome" | python main.py

Вы также можете подать файл:
cat article.txt | python main.py

От .txt к .xml:
cat article.txt | python main.py > article.xml