mirror of https://github.com/gsi-upm/senpy
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
6.9 KiB
Python
192 lines
6.9 KiB
Python
from senpy import PostProcessing, easy_test
|
|
|
|
|
|
class MaxEmotion(PostProcessing):
|
|
'''Plugin to extract the emotion with highest value from an EmotionSet'''
|
|
author = '@dsuarezsouto'
|
|
version = '0.1'
|
|
|
|
def process_entry(self, entry, activity):
|
|
if len(entry.emotions) < 1:
|
|
yield entry
|
|
return
|
|
|
|
set_emotions = entry.emotions[0]['onyx:hasEmotion']
|
|
|
|
# If there is only one emotion, do not modify it
|
|
if len(set_emotions) < 2:
|
|
yield entry
|
|
return
|
|
|
|
max_emotion = set_emotions[0]
|
|
|
|
# Extract max emotion from the set emotions (emotion with highest intensity)
|
|
for tmp_emotion in set_emotions:
|
|
if tmp_emotion['onyx:hasEmotionIntensity'] > max_emotion[
|
|
'onyx:hasEmotionIntensity']:
|
|
max_emotion = tmp_emotion
|
|
|
|
if max_emotion['onyx:hasEmotionIntensity'] == 0:
|
|
max_emotion['onyx:hasEmotionCategory'] = "neutral"
|
|
max_emotion['onyx:hasEmotionIntensity'] = 1.0
|
|
|
|
entry.emotions[0]['onyx:hasEmotion'] = [max_emotion]
|
|
|
|
entry.emotions[0]['prov:wasGeneratedBy'] = activity.id
|
|
yield entry
|
|
|
|
def check(self, request, plugins):
|
|
return 'maxemotion' in request.parameters and self not in plugins
|
|
|
|
# Test Cases:
|
|
# 1 Normal Situation.
|
|
# 2 Case to return a Neutral Emotion.
|
|
test_cases = [
|
|
{
|
|
"name": "If there are several emotions within an emotion set, reduce it to one.",
|
|
"entry": {
|
|
"@type":
|
|
"entry",
|
|
"onyx:hasEmotionSet": [
|
|
{
|
|
"@id":
|
|
"Emotions0",
|
|
"@type":
|
|
"emotionSet",
|
|
"onyx:hasEmotion": [
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory": "anger",
|
|
"onyx:hasEmotionIntensity": 0
|
|
},
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory": "joy",
|
|
"onyx:hasEmotionIntensity": 0.3333333333333333
|
|
},
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory": "negative-fear",
|
|
"onyx:hasEmotionIntensity": 0
|
|
},
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory": "sadness",
|
|
"onyx:hasEmotionIntensity": 0
|
|
},
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory": "disgust",
|
|
"onyx:hasEmotionIntensity": 0
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"nif:isString":
|
|
"Test"
|
|
},
|
|
'expected': {
|
|
"@type":
|
|
"entry",
|
|
"onyx:hasEmotionSet": [
|
|
{
|
|
"@id":
|
|
"Emotions0",
|
|
"@type":
|
|
"emotionSet",
|
|
"onyx:hasEmotion": [
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory": "joy",
|
|
"onyx:hasEmotionIntensity": 0.3333333333333333
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"nif:isString":
|
|
"Test"
|
|
}
|
|
},
|
|
{
|
|
"name":
|
|
"If the maximum emotion has an intensity of 0, return a neutral emotion.",
|
|
"entry": {
|
|
"@type":
|
|
"entry",
|
|
"onyx:hasEmotionSet": [{
|
|
"@id":
|
|
"Emotions0",
|
|
"@type":
|
|
"emotionSet",
|
|
"onyx:hasEmotion": [
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory": "anger",
|
|
"onyx:hasEmotionIntensity": 0
|
|
},
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory": "joy",
|
|
"onyx:hasEmotionIntensity": 0
|
|
},
|
|
{
|
|
"@id":
|
|
"_:Emotion_1538121033.74",
|
|
"@type":
|
|
"emotion",
|
|
"onyx:hasEmotionCategory":
|
|
"negative-fear",
|
|
"onyx:hasEmotionIntensity":
|
|
0
|
|
},
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory":
|
|
"sadness",
|
|
"onyx:hasEmotionIntensity": 0
|
|
},
|
|
{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory":
|
|
"disgust",
|
|
"onyx:hasEmotionIntensity": 0
|
|
}]
|
|
}],
|
|
"nif:isString":
|
|
"Test"
|
|
},
|
|
'expected': {
|
|
"@type":
|
|
"entry",
|
|
"onyx:hasEmotionSet": [{
|
|
"@id":
|
|
"Emotions0",
|
|
"@type":
|
|
"emotionSet",
|
|
"onyx:hasEmotion": [{
|
|
"@id": "_:Emotion_1538121033.74",
|
|
"@type": "emotion",
|
|
"onyx:hasEmotionCategory": "neutral",
|
|
"onyx:hasEmotionIntensity": 1
|
|
}]
|
|
}],
|
|
"nif:isString":
|
|
"Test"
|
|
}
|
|
}
|
|
]
|
|
|
|
|
|
if __name__ == '__main__':
|
|
easy_test()
|