def text_api_doc(request): text = str(request.GET['text']) usecase = str(request.GET['usecase']) modelId = request.GET['modelId'] modelId = eval(modelId) clientId = str(request.GET['clientId']) params = str(request.GET['params']) modelMap_df = pd.read_csv(projectDir+"/config/modelMapping.csv") if modelId != None: usecaseMap = ''.join(modelMap_df.ix[modelMap_df['modelId'] == modelId ,'usecase'].tolist()) modelName = modelMap_df.ix[modelMap_df['modelId'] == modelId ,'modelName'].tolist() if text == '' : results = {'Predicted Category':None,'Prediction Score':None} return HttpResponse(json.dumps(results)) if usecase.lower() != usecaseMap.lower(): return HttpResponse("<h1 style='color: red'>Please provide the correct usecase for the modelId:%s<h1>" %modelId) if usecase.lower() not in ['sentiment','survey']: folderName = modelName folderName = baseDir+"/"+''.join(folderName)+"/out" try: skl = SklCat() transformedXTest = skl.run_text_vectorizeTransform([text], folderName = folderName, vectorizerFile = 'FeatureTransformer.p', pickler = None) y_pred,y_prob_max = skl.run_text_execute_api_doc(transformedXTest, folderName = folderName, modelFile = 'Classifier.p', pickler=None, modelType = 'classification') results = {'Predicted Category':list(y_pred),'Prediction Score':list(y_prob_max)} except Exception as e: return HttpResponse("<h1 style='color: red'>Error Occured:%s</h1>" %e) elif usecase.lower() == 'sentiment': sentimentPattern= modelName sentimentPattern = ''.join(sentimentPattern) try: emo = Sentiment() results = emo.run(text, modelType = sentimentPattern, args = [], kwargs = {}) except Exception as e: return HttpResponse("<h1 style='color: red'>Error Occured:%s</h1>" %e) elif usecase.lower() == 'survey': ruleBaseFile = projectDir+"/config/ruleBase_v3.csv" try: sa = SurveyAnalysis() results = sa.run(text,ruleBaseFile = ruleBaseFile) except Exception as e: return HttpResponse("<h1 style='color: red'>Error Occured:%s</h1>" %e) else: return HttpResponse("<h1 style='color: red'>Please provide the proper usecase..</h1>") return HttpResponse(json.dumps(results)) else: return HttpResponse("<h1>Please provide the modelId in URL</h1>")
def text_api(request): text = str(request.GET['text']) usecase = str(request.GET['usecase']) modelId = request.GET['modelId'] modelId = eval(modelId) clientId = str(request.GET['clientId']) params = str(request.GET['params']) modelMap_df = pd.read_csv(projectDir+"/config/modelMapping.csv") results = [] records = eval(text) if modelId != None: usecaseMap = ''.join(modelMap_df.ix[modelMap_df['modelId'] == modelId ,'usecase'].tolist()) modelName = modelMap_df.ix[modelMap_df['modelId'] == modelId ,'modelName'].tolist() if text == '' : results = {'Predicted Category':None,'Prediction Score':None} return HttpResponse(json.dumps(results)) if usecase.lower() != usecaseMap.lower(): return HttpResponse("<h1 style='color: red'>Please provide the correct usecase for the modelId:%s<h1>" %modelId) if usecase.lower() not in ['sentiment','survey','ltv']: df = pd.read_json(json.dumps(records)) # converting json string into dataframe folderName = modelName folderName = baseDir+"/"+''.join(folderName)+"/out" try: skl = SklCat() #df = df.ix[df['lineBy']==2,:] #filtering customer lines df['chat_intent'] = df['lineText'].apply(lambda x:skl.run_text_vectorizeTransform([str(x)], folderName = folderName, vectorizerFile = 'FeatureTransformer.p', pickler = None)).apply(lambda x: skl.run_text_execute_api_bulkDoc(x, folderName = folderName, modelFile = 'Classifier.p', pickler=None, modelType = 'classification')) dfResults = df.ix[:,['sessionId','chat_intent']] results = dfResults.to_json(orient='records') ''' for doc in records: text = doc['chat_text'] transformedXTest = skl.run_text_vectorizeTransform([text], folderName = folderName, vectorizerFile = 'FeatureTransformer.p', pickler = None) y_pred,y_prob_max = skl.run_text_execute(transformedXTest, folderName = folderName, modelFile = 'Classifier.p', pickler=None, modelType = 'classification') output = {'session_id':doc['session_id'],'chat_text':text ,'Predicted Category':list(y_pred),'Prediction Score':list(y_prob_max)} results.append(output) ''' return HttpResponse(json.dumps(results)) except Exception as e: return HttpResponse("<h1 style='color: red'>Error Occured:%s</h1>" %e) elif usecase.lower() == 'sentiment': sentimentPattern= modelName sentimentPattern = ''.join(sentimentPattern) records = eval(text) try: emo = Sentiment() results = [] jsonResults = {} for doc in records: jsonTemp = {} jsonTemp['sessionId'] = doc['sessionId'] df_chat_data = pd.read_json(json.dumps(doc['chat_data'])) df_chat_data['sentiment'] = df_chat_data['lineText'].apply(lambda row: emo.run(row,modelType = sentimentPattern,args = [],kwargs={})) df = df_chat_data.ix[:,['lineNum','sentiment']] jsonObj = df.to_json(orient ='records') each_line = json.loads(json.dumps(jsonObj)) jsonTemp['each_line'] = each_line chat_sentiment = {} chat_sentiment['overall'] = overallSentiment(df_chat_data['sentiment']) lastlines = 2 chat_sentiment['last_line_sentiment'] = df_chat_data['lineText'].tail(lastlines).apply(lambda row: emo.run(row,modelType = sentimentPattern,args = [],kwargs={})).to_json(orient='records') chat_sentiment['switches_to_postive'] = getPositivieSwitches(df_chat_data['sentiment'].tolist()) jsonTemp['chat_sentiment'] = chat_sentiment results.append(jsonTemp) ''' for doc in records: text = doc['lineText'] output = emo.run(text, modelType = sentimentPattern, args = [], kwargs = {}) output['sessionId']= doc['sessionId'] output['lineText'] = text results.append(output) ''' return HttpResponse(json.dumps(results ,indent=5)) except Exception as e: return HttpResponse("<h1 style='color: red'>Error Occured:%s</h1>" %e) elif usecase.lower() == 'survey': ruleBaseFile = projectDir+"/config/ruleBase_v3.csv" try: sa = SurveyAnalysis() results = sa.run(text,ruleBaseFile = ruleBaseFile) except Exception as e: return HttpResponse("<h1 style='color: red'>Error Occured:%s</h1>" %e) elif usecase.lower() == 'ltv': folderName = modelName folderName = baseDir+"/"+''.join(folderName)+"/out" skl = SklCat() results = [] jsonResults = {} try: for doc in records: jsonTemp = {} jsonTemp['sessionId'] = doc['sessionId'] df_chat_data = pd.read_json(json.dumps(doc['chat_data'])) if 'lineNum' not in df_chat_data.columns.tolist(): df_chat_data['lineNum'] = pd.Series(range(1, df_chat_data.shape[0]+1)) df_chat_data = df_chat_data.ix[df_chat_data['lineBy'] == 1,:] #filtering only agent lines #ltv = df_chat_data['lineText'].apply(lambda x:skl.run_text_vectorizeTransform([str(x)], folderName = folderName, vectorizerFile = 'FeatureTransformer.p', pickler = None)).apply(lambda x: skl.run_text_execute_api_bulkDoc(x, folderName = folderName, modelFile = 'Classifier.p', pickler=None, modelType = 'classification',usecase='ltv')) transformedXTest = skl.run_text_vectorizeTransform(df_chat_data['lineText'].tolist(), folderName = folderName, vectorizerFile = 'FeatureTransformer.p', pickler = None) dfProb = skl.run_text_execute_api_bulkDoc(transformedXTest, folderName = folderName, modelFile = 'Classifier.p', pickler=None, modelType = 'classification',usecase='ltv') #dfTest = df_chat_data.ix[df_chat_data['ltv'].apply(lambda x : len(x)!=0)] if len(dfProb) != 0: dfProb['lineNum'] = pd.Series(range(1, dfProb.shape[0]+1)) threshold = 0.2 dfMerged = pd.merge(df_chat_data, dfProb, how='left', left_on='lineNum', right_on='lineNum',suffixes = ('_x','_y')) dfMerged = dfMerged.ix[:,['lineNum','y_pred','y_prob_max']] dfMerged['flag'] = dfMerged.apply(lambda row: row['y_pred'] == 1 and row['y_prob_max'] > threshold,axis = 1) ltv_agg = 1 if dfMerged['flag'].any() else 0 jsonTemp['chat_ltv'] = {'category':ltv_agg} jsonObj = dfMerged.to_json(orient = 'records') each_line = json.loads(json.dumps(jsonObj)) jsonTemp['each_line'] = each_line results.append(jsonTemp) return HttpResponse(json.dumps(results)) except Exception as e: return HttpResponse("<h1 style='color: red'>Error Occured:%s</h1>" %e) else: return HttpResponse("<h1 style='color: red'>Please provide the proper usecase..</h1>") #return HttpResponse(json.dumps(results)) else: return HttpResponse("<h1>Please provide the modelId in URL</h1>")
def get_city_thresholds(self): for city in self.senitiment_cities: city_sentiment = Sentiment(city, self.to_tokenize, self.document_type) city_sentiment.run()