微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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={})

享受你的一天! 约斯特

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?