1- from osbot_utils .helpers .duration .decorators .capture_duration import capture_duration
2- from osbot_utils .type_safe .type_safe_core .decorators .type_safe import type_safe
3- from osbot_aws .apis .Session import Session
4- from osbot_aws .aws .comprehend .schemas .Schema__Comprehend__Detect_Sentiment import Schema__Comprehend__Detect_Sentiment
5- from osbot_aws .aws .comprehend .schemas .enums .Enum__Comprehend__Language_Code import Enum__Comprehend__Language_Code
6- from osbot_aws .aws .comprehend .schemas .safe_str .Safe_Str__AWS_Comprehend__Text import Safe_Str__Comprehend__Text
7- from osbot_aws .aws .session .Session__Kwargs import Session__Kwargs
8- from osbot_utils .decorators .methods .cache_on_self import cache_on_self
9- from osbot_utils .type_safe .Type_Safe import Type_Safe
1+ from osbot_utils .helpers .duration .decorators .capture_duration import capture_duration
2+ from osbot_utils .type_safe .type_safe_core .decorators .type_safe import type_safe
3+ from osbot_aws .apis .Session import Session
4+ from osbot_aws .aws .comprehend .schemas .Schema__Comprehend__Detect_Sentiment import Schema__Comprehend__Detect_Sentiment
5+ from osbot_aws .aws .comprehend .schemas .Schema__Comprehend__Detect_Key_Phrases import Schema__Comprehend__Detect_Key_Phrases
6+ from osbot_aws .aws .comprehend .schemas .Schema__Comprehend__Detect_Entities import Schema__Comprehend__Detect_Entities
7+ from osbot_aws .aws .comprehend .schemas .Schema__Comprehend__Detect_Dominant_Language import Schema__Comprehend__Detect_Dominant_Language
8+ from osbot_aws .aws .comprehend .schemas .Schema__Comprehend__Detect_Pii_Entities import Schema__Comprehend__Detect_Pii_Entities
9+ from osbot_aws .aws .comprehend .schemas .Schema__Comprehend__Detect_Syntax import Schema__Comprehend__Detect_Syntax
10+ from osbot_aws .aws .comprehend .schemas .Schema__Comprehend__Detect_Toxic_Content import Schema__Comprehend__Detect_Toxic_Content
11+ from osbot_aws .aws .comprehend .schemas .enums .Enum__Comprehend__Language_Code import Enum__Comprehend__Language_Code
12+ from osbot_aws .aws .comprehend .schemas .safe_str .Safe_Str__AWS_Comprehend__Text import Safe_Str__Comprehend__Text
13+ from osbot_aws .aws .session .Session__Kwargs import Session__Kwargs
14+ from osbot_utils .decorators .methods .cache_on_self import cache_on_self
15+ from osbot_utils .type_safe .Type_Safe import Type_Safe
1016
1117
1218class Comprehend (Type_Safe ):
@@ -23,12 +29,13 @@ def session(self):
2329 return Session ()
2430
2531 @type_safe
26- def detect_sentiment (self , text : Safe_Str__Comprehend__Text ,
32+ def detect_sentiment (self , text : Safe_Str__Comprehend__Text ,
2733 language_code : Enum__Comprehend__Language_Code = Enum__Comprehend__Language_Code .ENGLISH ,
2834 ) -> Schema__Comprehend__Detect_Sentiment :
2935 with capture_duration () as duration :
3036 result = self .client ().detect_sentiment (Text = text ,
31- LanguageCode = language_code )
37+ LanguageCode = language_code .value )
38+
3239 sentiment = result .get ('Sentiment' )
3340 sentiment_score = result .get ('SentimentScore' )
3441
@@ -38,4 +45,117 @@ def detect_sentiment(self, text : Safe_Str__Comprehend__Text
3845 neutral = sentiment_score .get ('Neutral' ),
3946 negative = sentiment_score .get ('Negative' ),
4047 positive = sentiment_score .get ('Positive' )))
41- return detect_sentiment
48+ return detect_sentiment
49+
50+ @type_safe
51+ def detect_key_phrases (self , text : Safe_Str__Comprehend__Text ,
52+ language_code : Enum__Comprehend__Language_Code = Enum__Comprehend__Language_Code .ENGLISH ,
53+ ) -> Schema__Comprehend__Detect_Key_Phrases :
54+ with capture_duration () as duration :
55+ result = self .client ().detect_key_phrases (Text = text ,
56+ LanguageCode = language_code )
57+
58+ key_phrases_list = []
59+ for phrase in result .get ('KeyPhrases' , []):
60+ key_phrases_list .append (dict (text = phrase .get ('Text' ),
61+ score = phrase .get ('Score' ),
62+ begin_offset = phrase .get ('BeginOffset' ),
63+ end_offset = phrase .get ('EndOffset' )))
64+
65+ return Schema__Comprehend__Detect_Key_Phrases (
66+ key_phrases = key_phrases_list ,
67+ duration = duration .seconds
68+ )
69+
70+ @type_safe
71+ def detect_entities (self , text : Safe_Str__Comprehend__Text ,
72+ language_code : Enum__Comprehend__Language_Code = Enum__Comprehend__Language_Code .ENGLISH ,
73+ ) -> Schema__Comprehend__Detect_Entities :
74+ with capture_duration () as duration :
75+ result = self .client ().detect_entities (Text = text ,
76+ LanguageCode = language_code )
77+
78+ entities_list = []
79+ for entity in result .get ('Entities' , []):
80+ entities_list .append (dict (text = entity .get ('Text' ),
81+ type = entity .get ('Type' ),
82+ score = entity .get ('Score' ),
83+ begin_offset = entity .get ('BeginOffset' ),
84+ end_offset = entity .get ('EndOffset' )))
85+
86+ return Schema__Comprehend__Detect_Entities (entities = entities_list ,
87+ duration = duration .seconds )
88+
89+ @type_safe
90+ def detect_dominant_language (self , text : Safe_Str__Comprehend__Text
91+ ) -> Schema__Comprehend__Detect_Dominant_Language :
92+ with capture_duration () as duration :
93+ result = self .client ().detect_dominant_language (Text = text )
94+
95+ languages_list = []
96+ for language in result .get ('Languages' , []):
97+ languages_list .append (dict (language_code = language .get ('LanguageCode' ),
98+ score = language .get ('Score' )))
99+
100+ return Schema__Comprehend__Detect_Dominant_Language (languages = languages_list ,
101+ duration = duration .seconds )
102+
103+ @type_safe
104+ def detect_pii_entities (self , text : Safe_Str__Comprehend__Text ,
105+ language_code : Enum__Comprehend__Language_Code = Enum__Comprehend__Language_Code .ENGLISH ,
106+ ) -> Schema__Comprehend__Detect_Pii_Entities :
107+ with capture_duration () as duration :
108+ result = self .client ().detect_pii_entities (Text = text ,
109+ LanguageCode = language_code )
110+
111+ entities_list = []
112+ for entity in result .get ('Entities' , []):
113+ entities_list .append (dict (type = entity .get ('Type' ),
114+ score = entity .get ('Score' ),
115+ begin_offset = entity .get ('BeginOffset' ),
116+ end_offset = entity .get ('EndOffset' )))
117+
118+ return Schema__Comprehend__Detect_Pii_Entities (entities = entities_list ,
119+ duration = duration .seconds )
120+
121+ @type_safe
122+ def detect_syntax (self , text : Safe_Str__Comprehend__Text ,
123+ language_code : Enum__Comprehend__Language_Code = Enum__Comprehend__Language_Code .ENGLISH ,
124+ ) -> Schema__Comprehend__Detect_Syntax :
125+ with capture_duration () as duration :
126+ result = self .client ().detect_syntax (Text = text ,
127+ LanguageCode = language_code )
128+
129+ tokens_list = []
130+ for token in result .get ('SyntaxTokens' , []):
131+ pos = token .get ('PartOfSpeech' , {})
132+ tokens_list .append (dict (text = token .get ('Text' ),
133+ token_id = token .get ('TokenId' ),
134+ begin_offset = token .get ('BeginOffset' ),
135+ end_offset = token .get ('EndOffset' ),
136+ part_of_speech = dict (tag = pos .get ('Tag' ),
137+ score = pos .get ('Score' ))))
138+
139+ return Schema__Comprehend__Detect_Syntax (syntax_tokens = tokens_list ,
140+ duration = duration .seconds )
141+
142+ @type_safe
143+ def detect_toxic_content (self , text : Safe_Str__Comprehend__Text ,
144+ language_code : Enum__Comprehend__Language_Code = Enum__Comprehend__Language_Code .ENGLISH ,
145+ ) -> Schema__Comprehend__Detect_Toxic_Content :
146+ with capture_duration () as duration :
147+ result = self .client ().detect_toxic_content (TextSegments = [{'Text' : text }],
148+ LanguageCode = language_code )
149+
150+
151+ result_blocks = result .get ('ResultList' , [])
152+ labels_list = []
153+
154+ if result_blocks :
155+ first_result = result_blocks [0 ]
156+ for label in first_result .get ('Labels' , []):
157+ labels_list .append (dict (name = label .get ('Name' ),
158+ score = label .get ('Score' )))
159+
160+ return Schema__Comprehend__Detect_Toxic_Content (labels = labels_list ,
161+ duration = duration .seconds )
0 commit comments