
    h?h                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZ  e         ej*                  d
      Z ej*                  d      Z ej*                  d      Z ej*                  d      Z ej4                  eeee      Z e j8                  e      Z ee      Z e	e      Zg dZ d Z!dde"fdZ#ddee"   fdZ$y)    N)load_dotenv)ReviewSentimentAnalyzer)BatchReviewSentimentAnalyzer)Session)datetime)StoreTopic)sleep)ListDictAZURE_OPENAI_API_KEYAZURE_OPENAI_ENDPOINTAZURE_OPENAI_DEPLOYMENTAZURE_OPENAI_API_VERSION)api_keyapi_versionazure_endpointazure_deployment)client)zService ExperiencezCleanliness & HygienezAmbiance & AtmospherezPricing & ValuezOnline Ordering & DeliveryzComplaint ResolutionzCustomer LoyaltyzMenu PreferenceszWaiting TimezPortion SizezStaff FriendlinesszPayment ExperiencezSpecial Requests HandlingzReservation ExperiencezParking & AccessibilityzFood PresentationzSeasonal TrendszOffer & PromotionszFood QualityServingc                     |D ]F  }|j                         | j                         v s!| j                         |j                         v sD|c S  y)z_
    Matches detected topic to the closest predefined static topic, else returns 'Others'.
    Others)lower)detected_topicpredefined_topicstopics      :/var/www/html/hubwallet-dev/src/core/sentiment_analysis.pycategorize_topicr   .   sN     # ;;=N0022n6J6J6LPUP[P[P]6]L     textc           	         	 t         j                  |       }t        |j                  t              r|j                  ni }i }|j                         D ]  \  }}t        |t              }|||<    |j                  }|r*|D 	cg c]  }	t        |	j                               d     c}	ng }
|r*|D 	cg c]  }	t        |	j                               d     c}	ng }|r|d   dv r|d   nd}|j                  d|
||t        |j                  t              r|j                  dS i dS c c}	w c c}	w # t        $ r*}t        dt!        |              ddg di i dcY d	}~S d	}~ww xY w)
zR
    Analyzes text sentiment using static topic mapping. Ignores DB store_id.
    r   activepassiveneutral      ?	sentimentconfidence_scoreemotionarousalrelevant_topics_sentimentimportant_words_sentiment[Sentiment Analysis Error] unknowng        N)sentiment_analyzeranalyze_review
isinstancer,   dictitemsr   STATIC_TOPICSrelevant_emotions_with_arousallistkeysvaluesoverall_sentimentr-   	Exceptionprintstr)r    store_idresult
raw_topicscategorized_topicsr   r(   mapped_topicemotion_datademotionsr+   dominant_arousales                 r   analyze_sentimentrH   7   sv   "
#22489CFDdDdfj9kV55qs
 * 0 0 2 	9E9+E=AL/8|,	9
 <<@L|<!DN1%<RTAM=14
#A&=SU)0WQZCX5X71:^g  11 #');MWX^XxXxz~M)I)I
 	
 FH
 	
	 ==  	
+CF845" # )+)+
 	
	
sC   A>D+  #D!#D+ .#D&AD+ D+ !
D+ +	E4EEEreviewsc           
          	 t         j                  |       }g }|j                  D ]  }t        |j                  t
              r|j                  ni }i }|j                         D ]  \  }}t        |t              }	|||	<    |j                  }
|
r*|
D cg c]  }t        |j                               d     c}ng }|
r*|
D cg c]  }t        |j                               d     c}ng }|r|d   dv r|d   nd}|j                  d|||t        |j                  t
              r|j                  ni d}|j                  |        |S c c}w c c}w # t         $ r#}t#        dt%        |              g cY d}~S d}~ww xY w)z?
    Analyzes batch review sentiment. Ignores DB store_id.
    r   r"   r%   r&   r'   r.   N)batch_sentiment_analyzeranalyze_reviews
sentimentsr2   r,   r3   r4   r   r5   r6   r7   r8   r9   r:   r-   appendr;   r<   r=   )rI   r>   resultsrM   r?   r@   rA   r   r(   rB   rC   rD   rE   r+   rF   objrG   s                    r   analyze_batch_sentimentrQ   _   s   !*::7C
(( 	#F=GHhHhjn=o99uwJ!#$.$4$4$6 = y/}E3<"<0= "@@LDP<@aQVVXq)@VXHEQLAqtAHHJ'*AWYG-4G\9\wqzbk $55$'#+-?Q[\b\|\|  C  RDV-M-M  JLC c"-	#0  AA"  +CF845	s=   BE #E5E  #E#A#E 
E 	E=E82E=8E=)N)%
instructoropenaiosjsondotenvr   src.core.sentiment_analyzerr   !src.core.batch_sentiment_analyzerr   sqlalchemy.ormr   r   src.utils.modelsr   r	   timer
   typingr   r   getenvAPI_KEYENDPOINT
DEPLOYMENTAPI_VERSIONAzureOpenAIllmfrom_openair   r0   rK   r5   r   r=   rH   rQ    r   r   <module>rf      s      	   ? J "  )   
"))*
+299,-RYY01
bii23 f	 
 			$ -F; 7vF &
C &
P%T#Y %r   