-
Notifications
You must be signed in to change notification settings - Fork 1
/
curadoria.py
94 lines (77 loc) · 4.08 KB
/
curadoria.py
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
import sys, getopt
import pandas as pd
import json
from datetime import datetime
def readFileJson(fileName):
# Como obter o json dos logs: https://botflo.com/how-to-download-dialogflow-es-conversation-logs/
f = open(fileName, encoding='utf-8')
data = json.load(f)
return data
def processJson(data):
# Criar um dataframe vazio para receber todas as iterações
df = pd.DataFrame(columns = ['sessionId', 'startTime', 'endTime', 'duration', 'userQuery', 'response', 'intent', 'responseTime'])
# recolha da informação do JSON
startTime="" #inicio do diálogo (um diálogo pode ter várias iterações entre o user e o bot)
endTime="" #fim do diálogo
duration="" #duração (endTime - startTime) em segundos
userQuery="" #entrada, pode ser a welcome ou dada pelo user
response="" #resposta do bot
intent="" #intent usada para a resposta
responseTime = "" #altura em que foi dada a resposta
sessionId = "" #único dentro de um diálogo
for dialogos in data['sessionConversations']:
startTime=datetime.strptime(dialogos['startTime'][0:19], '%Y-%m-%dT%H:%M:%S')
endTime=datetime.strptime(dialogos['endTime'][0:19], '%Y-%m-%dT%H:%M:%S')
duration_segundos = (endTime-startTime).seconds
for interacoes in dialogos['interactions']:
userQuery = interacoes['v2Response']['queryResult']['queryText'].replace(chr(13), '').replace(chr(10), '').replace(';', '').replace('"', '')
try:
response = interacoes['v2Response']['queryResult']['fulfillmentText'].replace(chr(13), '').replace(chr(10), '').replace(';', '').replace('"', '')
except:
for text, payload in interacoes['v2Response']['queryResult']['fulfillmentMessages'][0].items():
try:
response = str(payload['richContent']).replace(chr(13), '').replace(chr(10), '').replace(';', '').replace('"', '') #.replace(chr(13), '').replace(chr(10), '').replace(';', '') #interacoes['v2Response']['queryResult']['fulfillmentMessages'].replace(chr(13), '').replace(chr(10), '').replace(';', '')
except:
response = str(payload['text'][0]).replace(chr(13), '').replace(chr(10), '').replace(';', '').replace('"', '')
break
intent = interacoes['v2Response']['queryResult']['intent']['displayName'].replace(chr(10), '').replace(';', '').replace('"', '')
responseTime = datetime.strptime(interacoes['responseTime'][0:19], '%Y-%m-%dT%H:%M:%S')
sessionId = interacoes['conversationResponseJson']
sessionId = sessionId[sessionId.find("sessionId")+13:sessionId.find("timestamp")-6]
df = df.append({'sessionId': sessionId,
'startTime': startTime,
'endTime': endTime,
'duration': duration_segundos,
'userQuery': userQuery,
'response': response,
'intent': intent,
'responseTime': responseTime}, ignore_index = True)
return df
def saveFileCSV(df, fileName):
#gravar para CSV o resultado (pode ter que alterar a path)
df.to_csv(fileName, index=False, encoding='utf_8_sig') #utf-8
def main(argv):
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print ('curadoria.py -i <inputfile> -o <outputfile>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print ('curadoria.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print ('Input file:', inputfile)
print ('Output file:', outputfile)
data = readFileJson(inputfile)
df = processJson(data)
saveFileCSV(df, outputfile)
print('Processo terminado')
if __name__ == "__main__":
main(sys.argv[1:])
#python curadoria.py -i logs_nilse.json -o logs_nilse.csv