File size: 3,523 Bytes
48c823d
 
 
 
 
 
 
8acf519
48c823d
 
 
8acf519
48c823d
 
b7f929e
 
48c823d
 
 
 
 
 
b7f929e
 
48c823d
 
 
8acf519
fbc5903
 
8acf519
 
48c823d
 
b7f929e
 
48c823d
8acf519
cb15a69
48c823d
 
cb15a69
48c823d
8acf519
cb15a69
48c823d
 
 
 
 
 
 
 
 
 
 
 
 
 
765f432
 
 
 
 
da5f9ac
 
 
 
 
 
 
 
765f432
 
48c823d
64033b8
48c823d
64033b8
48c823d
8acf519
fbc5903
 
8acf519
 
cb15a69
64033b8
 
 
 
 
cb15a69
48c823d
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from mathtext_fastapi.logging import prepare_message_data_for_logging
from mathtext.sentiment import sentiment
from mathtext.text2int import text2int
import re


def build_nlu_response_object(type, data, confidence):
    """ Turns nlu results into an object to send back to Turn.io
    Inputs
    - type: str - the type of nlu run (integer or sentiment-analysis)
    - data: str - the student message
    - confidence: - the nlu confidence score (sentiment) or '' (integer)
    """
    return {'type': type, 'data': data, 'confidence': confidence}


def test_for_float_or_int(message_data, message_text):
    nlu_response = {}
    if type(message_text) == int or type(message_text) == float:
        nlu_response = build_nlu_response_object('integer', message_text, '')
        prepare_message_data_for_logging(message_data, nlu_response)
    return nlu_response


def test_for_number_sequence(message_text_arr, message_data, message_text):
    nlu_response = {}
    if all(ele.isdigit() for ele in message_text_arr):
        nlu_response = build_nlu_response_object(
            'integer',
            ','.join(message_text_arr),
            ''
        )
        prepare_message_data_for_logging(message_data, nlu_response)
    return nlu_response


def run_text2int_on_each_list_item(message_text_arr):
    """ Attempts to convert each list item to an integer

    Input
    - message_text_arr: list - a set of text extracted from the student message

    Output
    - student_response_arr: list - a set of integers (32202 for error code)
    """
    student_response_arr = []
    for student_response in message_text_arr:
        int_api_resp = text2int(student_response.lower())
        student_response_arr.append(int_api_resp)
    return student_response_arr


def run_sentiment_analysis(message_text):
    # TODO: Add intent labelling here
    # TODO: Add logic to determine whether intent labeling or sentiment analysis is more appropriate (probably default to intent labeling)
    return sentiment(message_text)


def evaluate_message_with_nlu(message_data):
    # Keeps system working with two different inputs - full and filtered @event object
    try:
        message_text = message_data['message_body']
    except KeyError:
        message_data = {
            'author_id': message_data['message']['_vnd']['v1']['chat']['owner'],
            'author_type': message_data['message']['_vnd']['v1']['author']['type'],
            'contact_uuid': message_data['message']['_vnd']['v1']['chat']['contact_uuid'],
            'message_body': message_data['message']['text']['body'],
            'message_direction': message_data['message']['_vnd']['v1']['direction'],
            'message_id': message_data['message']['id'],
            'message_inserted_at': message_data['message']['_vnd']['v1']['chat']['inserted_at'],
            'message_updated_at': message_data['message']['_vnd']['v1']['chat']['updated_at'],
        }
        message_text = message_data['message_body']

    number_api_resp = text2int(message_text.lower())

    if number_api_resp == 32202:
        sentiment_api_resp = sentiment(message_text)
        nlu_response = build_nlu_response_object(
            'sentiment',
            sentiment_api_resp[0]['label'],
            sentiment_api_resp[0]['score']
        )
    else:
        nlu_response = build_nlu_response_object(
            'integer',
            number_api_resp,
            ''
        )

    prepare_message_data_for_logging(message_data, nlu_response)
    return nlu_response