IBM 的 Natural Language Understanding 中的元数据对象发生了什么变化?

问题描述

我曾经使用 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={})

享受你的一天! 约斯特

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...