use of com.ibm.watson.developer_cloud.tone_analyzer.v3.model.ToneScore in project java-sdk by watson-developer-cloud.
the class ToneDetection method updateSocialTone.
/**
* updateSocialTone updates the user with the social tones interpreted based on the specified thresholds.
*
* @param user a json object representing user information (tone) to be used in conversing with the Assistant
* Service
* @param socialTone a json object containing the social tones in the payload returned by the Tone Analyzer
* @param maintainHistory the maintain history
*/
@SuppressWarnings("unchecked")
public static void updateSocialTone(Map<String, Object> user, List<ToneScore> socialTone, boolean maintainHistory) {
List<String> currentSocial = new ArrayList<String>();
Map<String, Object> currentSocialObject = new HashMap<String, Object>();
for (ToneScore tone : socialTone) {
if (tone.getScore() >= SOCIAL_HIGH_SCORE_THRESHOLD) {
currentSocial.add(tone.getToneName().toLowerCase() + "_high");
currentSocialObject.put("tone_name", tone.getToneName().toLowerCase());
currentSocialObject.put("score", tone.getScore());
currentSocialObject.put("interpretation", "likely high");
} else if (tone.getScore() <= SOCIAL_LOW_SCORE_THRESHOLD) {
currentSocial.add(tone.getToneName().toLowerCase() + "_low");
currentSocialObject.put("tone_name", tone.getToneName().toLowerCase());
currentSocialObject.put("score", tone.getScore());
currentSocialObject.put("interpretation", "likely low");
} else {
currentSocialObject.put("tone_name", tone.getToneName().toLowerCase());
currentSocialObject.put("score", tone.getScore());
currentSocialObject.put("interpretation", "likely medium");
}
}
// update user language tone
Map<String, Object> social = (Map<String, Object>) ((Map<String, Object>) user.get("tone")).get("social");
social.put("current", currentSocial);
// if history needs to be maintained
if (maintainHistory) {
List<Map<String, Object>> history = new ArrayList<Map<String, Object>>();
if (social.get("history") != null) {
history = (List<Map<String, Object>>) social.get("history");
}
history.add(currentSocialObject);
social.put("history", history);
}
}
use of com.ibm.watson.developer_cloud.tone_analyzer.v3.model.ToneScore in project java-sdk by watson-developer-cloud.
the class ToneDetection method updateEmotionTone.
/**
* updateEmotionTone updates the user emotion tone with the primary emotion - the emotion tone that has a score
* greater than or equal to the EMOTION_SCORE_THRESHOLD; otherwise primary emotion will be 'neutral'.
*
* @param user a json object representing user information (tone) to be used in conversing with the Assistant
* Service
* @param emotionTone a json object containing the emotion tones in the payload returned by the Tone Analyzer
*/
@SuppressWarnings("unchecked")
private static void updateEmotionTone(Map<String, Object> user, List<ToneScore> emotionTone, boolean maintainHistory) {
Double maxScore = 0.0;
String primaryEmotion = null;
Double primaryEmotionScore = null;
for (ToneScore tone : emotionTone) {
if (tone.getScore() > maxScore) {
maxScore = tone.getScore();
primaryEmotion = tone.getToneName().toLowerCase();
primaryEmotionScore = tone.getScore();
}
}
if (maxScore <= PRIMARY_EMOTION_SCORE_THRESHOLD) {
primaryEmotion = "neutral";
primaryEmotionScore = null;
}
// update user emotion tone
Map<String, Object> emotion = (Map<String, Object>) ((Map<String, Object>) (user.get("tone"))).get("emotion");
emotion.put("current", primaryEmotion);
if (maintainHistory) {
List<Map<String, Object>> history = new ArrayList<Map<String, Object>>();
if (emotion.get("history") != null) {
history = (List<Map<String, Object>>) emotion.get("history");
}
Map<String, Object> emotionHistoryObject = new HashMap<String, Object>();
emotionHistoryObject.put("tone_name", primaryEmotion);
emotionHistoryObject.put("score", primaryEmotionScore);
history.add(emotionHistoryObject);
emotion.put("history", history);
}
}
use of com.ibm.watson.developer_cloud.tone_analyzer.v3.model.ToneScore in project java-sdk by watson-developer-cloud.
the class ToneDetection method updateLanguageTone.
/**
* updateLanguageTone updates the user with the language tones interpreted based on the specified thresholds.
*
* @param user a json object representing user information (tone) to be used in conversing with the Assistant
* Service
* @param languageTone a json object containing the language tones in the payload returned by the Tone Analyzer
*/
@SuppressWarnings("unchecked")
private static void updateLanguageTone(Map<String, Object> user, List<ToneScore> languageTone, boolean maintainHistory) {
List<String> currentLanguage = new ArrayList<String>();
Map<String, Object> currentLanguageObject = new HashMap<String, Object>();
// Process each language tone and determine if it is high or low
for (ToneScore tone : languageTone) {
if (tone.getScore() >= LANGUAGE_HIGH_SCORE_THRESHOLD) {
currentLanguage.add(tone.getToneName().toLowerCase() + "_high");
currentLanguageObject.put("tone_name", tone.getToneName().toLowerCase());
currentLanguageObject.put("score", tone.getScore());
currentLanguageObject.put("interpretation", "likely high");
} else if (tone.getScore() <= LANGUAGE_NO_SCORE_THRESHOLD) {
currentLanguageObject.put("tone_name", tone.getToneName().toLowerCase());
currentLanguageObject.put("score", tone.getScore());
currentLanguageObject.put("interpretation", "no evidence");
} else {
currentLanguageObject.put("tone_name", tone.getToneName().toLowerCase());
currentLanguageObject.put("score", tone.getScore());
currentLanguageObject.put("interpretation", "likely medium");
}
}
// update user language tone
Map<String, Object> language = (Map<String, Object>) ((Map<String, Object>) user.get("tone")).get("language");
// the current language pulled from tone
language.put("current", currentLanguage);
// if history needs to be maintained
if (maintainHistory) {
List<Map<String, Object>> history = new ArrayList<Map<String, Object>>();
if (language.get("history") != null) {
history = (List<Map<String, Object>>) language.get("history");
}
history.add(currentLanguageObject);
language.put("history", history);
}
}
use of com.ibm.watson.developer_cloud.tone_analyzer.v3.model.ToneScore in project java-sdk by watson-developer-cloud.
the class ToneDetection method updateUserTone.
/**
* updateUserTone processes the Tone Analyzer payload to pull out the emotion, language and social tones, and identify
* the meaningful tones (i.e., those tones that meet the specified thresholds). The assistantPayload json object is
* updated to include these tones.
*
* @param context the context
* @param toneAnalyzerPayload json object returned by the Watson Tone Analyzer Service
* @param maintainHistory the maintain history
* @return the map
* @returns assistantPayload where the user object has been updated with tone information from the
* toneAnalyzerPayload
*/
public static Map<String, Object> updateUserTone(Map<String, Object> context, ToneAnalysis toneAnalyzerPayload, boolean maintainHistory) {
List<ToneScore> emotionTone = new ArrayList<ToneScore>();
List<ToneScore> languageTone = new ArrayList<ToneScore>();
List<ToneScore> socialTone = new ArrayList<ToneScore>();
// If the context doesn't already contain the user object, initialize it
if (!context.containsKey("user")) {
context.put("user", initUser());
}
// For convenience sake, define a variable for the user object to
@SuppressWarnings("unchecked") Map<String, Object> user = (Map<String, Object>) context.get("user");
if (toneAnalyzerPayload != null && toneAnalyzerPayload.getDocumentTone() != null) {
List<ToneCategory> tones = toneAnalyzerPayload.getDocumentTone().getToneCategories();
for (ToneCategory tone : tones) {
if (tone.getCategoryId().equals(EMOTION_TONE_LABEL)) {
emotionTone = tone.getTones();
}
if (tone.getCategoryId().equals(LANGUAGE_TONE_LABEL)) {
languageTone = tone.getTones();
}
if (tone.getCategoryId().equals(SOCIAL_TONE_LABEL)) {
socialTone = tone.getTones();
}
}
updateEmotionTone(user, emotionTone, maintainHistory);
updateLanguageTone(user, languageTone, maintainHistory);
updateSocialTone(user, socialTone, maintainHistory);
}
context.put("user", user);
return user;
}
Aggregations