我使用watson-developer-cloud npm模块调用IBM Watson Question and Answer API。我调用该服务的代码如下:
question_and_answer_healthcare.ask({
text: 'What are the benefits of taking aspirin daily?'}, function (err, response) {
if (err)
console.log('error:', err);
else {
console.log(JSON.stringify(response, null, 2));
}
});
在打印的回复中,我得到一系列答案,仅列出所使用的证据,但不列出实际答案。这是一个示例答案元素:
{
"id": 0,
"text": "373C41A4A1E374B1BE189D07EF707062 - Taking Aspirin Every Day : Taking Aspirin Every Day : The Basics : What are the benefits of taking aspirin daily?",
"pipeline": "Descriptive,TAO",
"confidence": 0.96595,
"entityTypes": []
}
如何获得完整的答案文本?
答案 0 :(得分:4)
TL; DR 当您提交问题时,请在questionText
对象中发布question
。在该question
对象中,添加formattedAnswer
并将其设置为true
。
e.g。
{
"question" : {
"questionText" : "This is your question",
"formattedAnswer" : true,
...
使用此选项时,您可以检索返回答案的完整格式化HTML,如下所示:
response[0].question.answers.forEach(function(answer, index) {
console.log(answer.formattedText);
})
您需要从HTML中解析您想要向用户显示的必要信息。
(API doc ref:https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/apis/#!/question-and-answer/question)
<强>背景强>
Watson QA API返回其认为与您的问题匹配的文档部分的ID和标题。那是你看到的文字回来了。它的格式为<ID> - <TITLE>
。
此格式适用于机器对机器的使用,例如,如果您计划从某个地方查找答案。
但是如果你想要一个可以显示给用户的答案,那么formattedAnswer
标志会为你提供。它告诉API返回该部分文档的内容,而不仅仅是ID和标题。
API响应有效负载还包括支持证据,使Watson对其返回的答案有信心。您也可以在那里找到答案的文档部分 - 但我建议最好不要依赖它。如果你想要答案的内容,那么formattedAnswer
标志就是记录在案的,可靠的,将永远存在的方式。
在您的具体情况下,当您使用不允许您设置此包装的包装库时,我想这会留下返回支持证据而不是答案的解决方法,或构建QA的POST请求API自己。
答案 1 :(得分:2)
注意:如果您对医疗保健Watson QA beta语料库提出问题,则可采用以下技术。但是,有些情况下返回的证据和答案不一致。以下内容应被视为使用formattedText
选项的解决方法,不应将其视为一种万无一失的方法。
使用watson-developer-cloud软件包的0.9.20版时,您无法在HTTPS请求正文中设置任何可选输入。因此,您应该使用以下方法来获得答案:
问题的完整答案文本不在response[0].question.answers[]
数组中,而是位于证据列表中每个条目的response[0].question.evidencelist[X].text
属性中。您将在response[0].question.evidencelist[X].value
字段中找到相关的置信度。为了在您的场景中检索这些值,您将像下面的完整示例一样解析它:
var watson = require('watson-developer-cloud');
var question_and_answer = watson.question_and_answer({
version: 'v1',
dataset: 'healthcare',
username: 'YOUR USERNAME'
password: 'YOUR PASSWORD'
});
question_and_answer.ask({
text: 'What are the benefits of taking aspirin daily?'}, function (err, response) {
if (err)
console.log('error:', err);
else {
// Print the answer with the highest confidence
console.log(response[0].question.evidencelist[0].text);
//Print all returned answers
response[0].question.evidencelist.forEach(function(answer, index) {
console.log(index, '. ', answer.text);
})
}
});