2017-04-10 3 views

답변

1

당신은 약 Sentiment Analysis에 대해 질문하고 있습니다. 내 이해를 위해, 훈련없이 긍정적이거나 부정적인 감정을 해독 LUIS 모델을 훈련 수 없습니다 긍정적이고 부정적인 의도. Pavel이 Microsoft에서 제공하는 또 다른 서비스가 있음을 나타내는대로 Text Analytics API.

이 API는 여러 개의 서비스를 제공하지만이 경우 제공된 문자열을 가져 와서 감정을 측정하고 0-1 사이의 숫자로 측정 값 (id)을 반환합니다. 0에 가까운 숫자는 더 부정합니다 1에 가까운 것보다. 숫자가 클수록 문자열이 더 긍정적입니다. 텍스트 분석을 포함하려면, 내가 API 호출에 대한 Promise 사용했습니다 : 페이로드가 오브젝트의 배열을 취하는 "documents" 속성이 포함

let sentimentAnalysis = function (string) { 
    let payload = { 
     "documents": [{ 
      "id": "1", 
      "text": string ? string : 'No string? This is sad...' 
     }] 
    } 

    return new Promise(function(resolve, reject) { 
     request.post(
     'https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment/', 
      { 
       "headers": { 
        "Ocp-Apim-Subscription-Key": process.env.TEXT_ANALYTICS_KEY, 
        "Content-Type": "application/json", 
        "Accept": "application/json", 
       }, 
       "body": JSON.stringify(payload) 
      }, (err, res, body) => { 
       if (err) { 
        return reject(err); 
       } else { 
        return resolve(JSON.parse(res.body)); 
       } 
      } 
     ) 
    }) 
} 

하는 것으로. 전체 단락을 전달하거나 문장으로 분리 단락으로 좁힐 수 있습니다. 그러나, 나는 그 결정 (그리고 디자인)까지 당신에게 맡길 것이다 :

공식적인 진술은 그러나 문장을 문장으로 나누는 것이 정서 분석 (response to the comments by Lowellkitchen on 2016.12.9)을 개선 할 것이라고 말한다.

내 폭포의 내부에서 이걸 Promise이라고하고 그 결과를 사용하여 내 chatbot의 응답을 결정합니다. 지금

sentimentAnalysis(results.response).then(analyticsResponse => { 
    session.send(`You said "${results.response}"!`); 
    let score = Math.round(analyticsResponse["documents"][0]["score"] * 100)/100; 
    session.send(`The score of that utterance is ${score}`); 
    if(score > 0.7) { 
     session.endDialog("Wow that's positive!"); 
    } else if (score > 0.4) { 
     session.endDialog("Wow that's neutral-ish..."); 
    } else { 
     session.endDialog("Wow that is not positive."); 
    } 
}) 

GitHub