Reputation: 83
import json
from watson_developer_cloud import NaturalLanguageUnderstandingV1
import watson_developer_cloud.natural_language_understanding.features.v1 \
as Features
natural_language_understanding = NaturalLanguageUnderstandingV1(
username="username",
password="password",
version="2017-02-27")
response = natural_language_understanding.analyze(
text="IBM is an American multinational technology company headquartered \
in Armonk, New York, United States, with operations in over 170 \
countries.",
features=[
Features.Entities(
emotion=True,
sentiment=True,
limit=2
),
Features.Keywords(
emotion=True,
sentiment=True,
limit=2
)
]
)
print(json.dumps(response, indent=2))
I am new to IBM watson API .....i was trying this sample code provided by them by I was getting this error
TypeError: Object of type 'Entities' is not JSON serializable
Upvotes: 1
Views: 2716
Reputation: 31
I fixed this issues by dumping response.result
instead of just response
.
The API guide wrongly says to use: print(json.dumps(response, indent=2))
When reviewing the docstring in the source code I found the DetailedResponse
type contains 'result, headers and HTTP status code'.
I think the example in the API documentation needs to be updated so it doesn't mislead people.
Upvotes: 3
Reputation: 5330
All depends on what you insert in your text parameter. Do you use the same text?
I used the example from the API reference with the same phrase for this answer... but, JSON knows only how to handle Unicode strings, not byte sequences. Either transform into Unicode (json.dumps(response.decode("utf-8"), indent=2))
, or if is one integer array (json.dumps(list(response)))
. You also can try print(json.dumps(list(response.values())))
.
So, this is one step-by-step for using the NLU service with Python.
IBM Cloud (New name for IBM Bluemix)
In your PC, after installed Python, try to run the command in the CMD/Terminal:
pip install --upgrade watson-developer-cloud
Using the same code provided from the API reference:
import json
from watson_developer_cloud import NaturalLanguageUnderstandingV1
import watson_developer_cloud.natural_language_understanding.features.v1 \
as Features
natural_language_understanding = NaturalLanguageUnderstandingV1(
username="username from the NLU -> Service Credentials",
password="passoword from the NLU -> Service Credentials",
version="2017-02-27")
response = natural_language_understanding.analyze(
text="IBM is an American multinational technology company headquartered \
in Armonk, New York, United States, with operations in over 170 \
countries.",
features=[
Features.Entities(
emotion=True,
sentiment=True,
limit=2
),
Features.Keywords(
emotion=True,
sentiment=True,
limit=2
)
]
)
print(json.dumps(response, indent=2))
And the return when I run the command python NLUAnalyze.py
in CMD is:
{
"usage": {
"text_units": 1,
"text_characters": 148,
"features": 2
},
"language": "en",
"keywords": [
{
"text": "American multinational technology",
"sentiment": {
"score": 0.0,
"label": "neutral"
},
"relevance": 0.993518,
"emotion": {
"sadness": 0.085259,
"joy": 0.026169,
"fear": 0.02454,
"disgust": 0.088711,
"anger": 0.033078
}
},
{
"text": "New York",
"sentiment": {
"score": 0.0,
"label": "neutral"
},
"relevance": 0.613816,
"emotion": {
"sadness": 0.166741,
"joy": 0.228903,
"fear": 0.057987,
"disgust": 0.050965,
"anger": 0.054653
}
}
],
"entities": [
{
"type": "Company",
"text": "IBM",
"sentiment": {
"score": 0.0,
"label": "neutral"
},
"relevance": 0.33,
"emotion": {
"sadness": 0.085259,
"joy": 0.026169,
"fear": 0.02454,
"disgust": 0.088711,
"anger": 0.033078
},
"disambiguation": {
"subtype": [
"SoftwareLicense",
"OperatingSystemDeveloper",
"ProcessorManufacturer",
"SoftwareDeveloper",
"CompanyFounder",
"ProgrammingLanguageDesigner",
"ProgrammingLanguageDeveloper"
],
"name": "IBM",
"dbpedia_resource": "http://dbpedia.org/resource/IBM"
},
"count": 1
}
]
}
Upvotes: 1
Reputation: 83
Got the solution from the IBM developer works here is the link
just replace
features=[
Features.Entities(
emotion=True,
sentiment=True,
limit=2
),
Features.Keywords(
emotion=True,
sentiment=True,
limit=2
)
]
with :
features=Features(entities=EntitiesOptions(
emotion=True, sentiment=True,limit=2),
keywords=KeywordsOptions(
emotion=True, sentiment=True,limit=2
))
this is due to the changes done in v 1 python sdk Here is the link showing the changes made in v 1 python sdk
Upvotes: 1