问题描述
我曾经使用 IBM 的自然语言理解 API 来分析 URL。我在 Python 3.8 上使用 Python 的 IBM Watson SDK 5.1。
我成功地使用下面的代码[所有适当的选项都已导入]来提取元数据,以及实体、概念等:
def NLU_analysis(url):
try:
response = natural_language_understanding.analyze(
url=url,return_analyzed_text=True,clean=True,language=True,features=Features(keywords=KeywordsOptions(limit=10),entities=EntitiesOptions(limit=10),concepts=ConceptsOptions(limit=5),Metadata=MetadataOptions(),categories=CategoriesOptions(limit=5))).get_result()
return response
except:
pass
上面的代码用于返回元数据。现在,在 Python SDK 5.1.0 中,IBM 最近更改了检索 URL 元数据的方式。 “MetadataOptions”功能已被“FeatureMetadataResults”取代。如果我使用上面的代码并将 MetadataOptions 替换为 FeatureMetadataResults,如下所示:
def NLU_analysis(url):
try:
response = natural_language_understanding.analyze(
url=url,Metadata=FeaturesResultsMetadata(),categories=CategoriesOptions(limit=5))).get_result()
return response
except:
pass
现在,如果我运行修改后的代码,我会收到以下错误消息: “类型错误:FeaturesResultsMetadata 类型的对象不是 JSON 可序列化的”
如果我阅读 IBM 的文档,我会有些困惑(链接到 API documentation。这是 IBM 的代码示例:
import json
from ibm_watson import NaturalLanguageUnderstandingV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
from ibm_watson.natural_language_understanding_v1
import Features,MetadataOptions
authenticator = IAMAuthenticator('{apikey}')
natural_language_understanding = NaturalLanguageUnderstandingV1(
version='2020-08-01',authenticator=authenticator
)
natural_language_understanding.set_service_url('{url}')
response = natural_language_understanding.analyze(
url='www.ibm.com',features=Features(Metadata=MetadataOptions())).get_result()
有谁知道是否仍然可以使用 IBM Watson 的自然语言理解 API 来检索 URL 的元数据?
祝您有美好的一天!
解决方法
IBM 的 API 文档中的示例似乎不正确。
以下代码已粘贴为纯文本,以便删除 IBM 示例代码中的过时元素。
import json
from ibm_watson import NaturalLanguageUnderstandingV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
from ibm_watson.natural_language_understanding_v1
导入功能,MetadataOptions
authenticator = IAMAuthenticator('{apikey}')
natural_language_understanding = NaturalLanguageUnderstandingV1(
version='2020-08-01',authenticator=authenticator
)
natural_language_understanding.set_service_url('{url}')
response = natural_language_understanding.analyze(
url='www.ibm.com',
features=Features(metadata=MetadataOptions() {} )).get_result()
print(json.dumps(response,indent=2))
因此对于请求元数据对象,只需提供一个空字典(metadata={})
享受你的一天! 约斯特