コード例 #1
0
ファイル: views.py プロジェクト: latchireddyambati/api
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>")
コード例 #2
0
ファイル: views.py プロジェクト: latchireddyambati/api
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>")
コード例 #3
0
 def get_city_thresholds(self):
     for city in self.senitiment_cities:
         city_sentiment = Sentiment(city, self.to_tokenize, self.document_type)
         city_sentiment.run()