TypeError: Object of type 'Entities' is not JSON serializable IBM Cloud natural language understanding
TypeError: Object of type 'Entities' is not JSON serializable IBM Cloud natural language understanding
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))
我是 IBM watson 的新手 API .....我在尝试他们提供的示例代码时遇到了这个错误
TypeError: Object of type 'Entities' is not JSON serializable
一切都取决于您在文本参数中插入的内容。你们使用相同的文字吗?
我在这个答案中使用了 API 参考文献中的示例和相同的短语...但是,JSON 只知道如何处理 Unicode 字符串,而不是字节序列。要么转换成 Unicode (json.dumps(response.decode("utf-8"), indent=2))
,要么是一个整数数组 (json.dumps(list(response)))
。您也可以尝试 print(json.dumps(list(response.values())))
.
因此,这是将 NLU 服务与 Python 一起使用的分步说明。
IBM Cloud(IBM Bluemix 的新名称)
- 创建一个account(现在,您可以在没有信用卡的情况下创建并使用 Watson 和其他服务的 LITE 计划!)
- 目录 -> Watson -> 自然语言理解服务 -> 创建 -> 服务凭证
在你的电脑上,安装Python后,尝试运行CMD/Terminal中的命令:
pip install --upgrade watson-developer-cloud
使用 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))
而我在CMD中运行命令python NLUAnalyze.py
时的return是:
{
"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
}
]
}
- 使用 Python 查看官方 API Reference。
- 请参阅官方文档以了解如何使用 Natural Language Understanding。
从 IBM developer works 获得解决方案
here is the link
只是替换
features=[
Features.Entities(
emotion=True,
sentiment=True,
limit=2
),
Features.Keywords(
emotion=True,
sentiment=True,
limit=2
)
]
与 :
features=Features(entities=EntitiesOptions(
emotion=True, sentiment=True,limit=2),
keywords=KeywordsOptions(
emotion=True, sentiment=True,limit=2
))
这是由于 v 1 python sdk 中所做的更改所致
Here is the link showing the changes made in v 1 python sdk
我通过转储 response.result
而不是 response
.
解决了这个问题
API guide误说使用:print(json.dumps(response, indent=2))
查看 docstring in the source code 时,我发现 DetailedResponse
类型包含 'result, headers and HTTP status code'。
我认为 API 文档中的示例需要更新,以免误导人们。
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))
我是 IBM watson 的新手 API .....我在尝试他们提供的示例代码时遇到了这个错误
TypeError: Object of type 'Entities' is not JSON serializable
一切都取决于您在文本参数中插入的内容。你们使用相同的文字吗?
我在这个答案中使用了 API 参考文献中的示例和相同的短语...但是,JSON 只知道如何处理 Unicode 字符串,而不是字节序列。要么转换成 Unicode (json.dumps(response.decode("utf-8"), indent=2))
,要么是一个整数数组 (json.dumps(list(response)))
。您也可以尝试 print(json.dumps(list(response.values())))
.
因此,这是将 NLU 服务与 Python 一起使用的分步说明。
IBM Cloud(IBM Bluemix 的新名称)
- 创建一个account(现在,您可以在没有信用卡的情况下创建并使用 Watson 和其他服务的 LITE 计划!)
- 目录 -> Watson -> 自然语言理解服务 -> 创建 -> 服务凭证
在你的电脑上,安装Python后,尝试运行CMD/Terminal中的命令:
pip install --upgrade watson-developer-cloud
使用 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))
而我在CMD中运行命令python NLUAnalyze.py
时的return是:
{
"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
}
]
}
- 使用 Python 查看官方 API Reference。
- 请参阅官方文档以了解如何使用 Natural Language Understanding。
从 IBM developer works 获得解决方案 here is the link
只是替换
features=[
Features.Entities(
emotion=True,
sentiment=True,
limit=2
),
Features.Keywords(
emotion=True,
sentiment=True,
limit=2
)
]
与 :
features=Features(entities=EntitiesOptions(
emotion=True, sentiment=True,limit=2),
keywords=KeywordsOptions(
emotion=True, sentiment=True,limit=2
))
这是由于 v 1 python sdk 中所做的更改所致 Here is the link showing the changes made in v 1 python sdk
我通过转储 response.result
而不是 response
.
API guide误说使用:print(json.dumps(response, indent=2))
查看 docstring in the source code 时,我发现 DetailedResponse
类型包含 'result, headers and HTTP status code'。
我认为 API 文档中的示例需要更新,以免误导人们。