Skip to content

Commit fd0e7b7

Browse files
committed
added support for AWS Comprehend
1 parent 7f403eb commit fd0e7b7

38 files changed

+987
-138
lines changed
Lines changed: 132 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
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

1218
class 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)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from osbot_utils.type_safe.Type_Safe import Type_Safe
2+
from osbot_utils.type_safe.primitives.core.Safe_UInt import Safe_UInt
3+
from osbot_aws.aws.comprehend.schemas.Schema__Comprehend__Part_Of_Speech import Schema__Comprehend__Part_Of_Speech
4+
from osbot_aws.aws.comprehend.schemas.safe_str.Safe_Str__AWS_Comprehend__Text import Safe_Str__Comprehend__Text
5+
6+
7+
class Schema__Comprehend__Syntax_Token(Type_Safe):
8+
text : Safe_Str__Comprehend__Text
9+
token_id : Safe_UInt
10+
begin_offset : Safe_UInt
11+
end_offset : Safe_UInt
12+
part_of_speech: Schema__Comprehend__Part_Of_Speech
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import List
2+
from osbot_utils.type_safe.Type_Safe import Type_Safe
3+
from osbot_utils.type_safe.primitives.core.Safe_Float import Safe_Float
4+
from osbot_aws.aws.comprehend.schemas.Schema__Comprehend__Language import Schema__Comprehend__Language
5+
6+
7+
class Schema__Comprehend__Detect_Dominant_Language(Type_Safe):
8+
languages : List[Schema__Comprehend__Language] # Sorted by confidence
9+
duration : Safe_Float
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import List
2+
from osbot_utils.type_safe.Type_Safe import Type_Safe
3+
from osbot_utils.type_safe.primitives.core.Safe_Float import Safe_Float
4+
from osbot_aws.aws.comprehend.schemas.Schema__Comprehend__Entity import Schema__Comprehend__Entity
5+
6+
7+
class Schema__Comprehend__Detect_Entities(Type_Safe):
8+
entities : List[Schema__Comprehend__Entity]
9+
duration : Safe_Float
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import List
2+
from osbot_utils.type_safe.Type_Safe import Type_Safe
3+
from osbot_utils.type_safe.primitives.core.Safe_Float import Safe_Float
4+
from osbot_aws.aws.comprehend.schemas.Schema__Comprehend__Key_Phrase import Schema__Comprehend__Key_Phrase
5+
6+
7+
class Schema__Comprehend__Detect_Key_Phrases(Type_Safe):
8+
key_phrases : List[Schema__Comprehend__Key_Phrase]
9+
duration : Safe_Float
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import List
2+
from osbot_utils.type_safe.Type_Safe import Type_Safe
3+
from osbot_utils.type_safe.primitives.core.Safe_Float import Safe_Float
4+
from osbot_aws.aws.comprehend.schemas.Schema__Comprehend__Pii_Entity import Schema__Comprehend__Pii_Entity
5+
6+
7+
class Schema__Comprehend__Detect_Pii_Entities(Type_Safe):
8+
entities : List[Schema__Comprehend__Pii_Entity]
9+
duration : Safe_Float
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
from osbot_utils.type_safe.Type_Safe import Type_Safe
2-
from osbot_aws.aws.comprehend.schemas.safe_float.Safe_Float__Comprehend__Sentiment import Safe_Float__Comprehend__Sentiment
1+
from osbot_utils.type_safe.Type_Safe import Type_Safe
2+
from osbot_utils.type_safe.primitives.domains.numerical.safe_float.Safe_Float__Probability_Score import Safe_Float__Probability_Score
33

44

55
class Schema__Comprehend__Detect_Sentiment__Score(Type_Safe):
6-
mixed : Safe_Float__Comprehend__Sentiment
7-
negative : Safe_Float__Comprehend__Sentiment
8-
neutral : Safe_Float__Comprehend__Sentiment
9-
positive : Safe_Float__Comprehend__Sentiment
6+
mixed : Safe_Float__Probability_Score
7+
negative : Safe_Float__Probability_Score
8+
neutral : Safe_Float__Probability_Score
9+
positive : Safe_Float__Probability_Score
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import List
2+
from osbot_utils.type_safe.Type_Safe import Type_Safe
3+
from osbot_utils.type_safe.primitives.core.Safe_Float import Safe_Float
4+
from osbot_aws.aws.comprehend.Schema__Comprehend__Syntax_Token import Schema__Comprehend__Syntax_Token
5+
6+
7+
class Schema__Comprehend__Detect_Syntax(Type_Safe):
8+
syntax_tokens : List[Schema__Comprehend__Syntax_Token]
9+
duration : Safe_Float
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from typing import List
2+
from osbot_utils.type_safe.Type_Safe import Type_Safe
3+
from osbot_utils.type_safe.primitives.core.Safe_Float import Safe_Float
4+
from osbot_aws.aws.comprehend.schemas.Schema__Comprehend__Toxic_Content_Label import Schema__Comprehend__Toxic_Content_Label
5+
6+
7+
class Schema__Comprehend__Detect_Toxic_Content(Type_Safe):
8+
labels : List[Schema__Comprehend__Toxic_Content_Label]
9+
duration : Safe_Float
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from osbot_utils.type_safe.Type_Safe import Type_Safe
2+
from osbot_utils.type_safe.primitives.core.Safe_UInt import Safe_UInt
3+
from osbot_aws.aws.comprehend.schemas.enums.Enum__Comprehend__Entity_Type import Enum__Comprehend__Entity_Type
4+
from osbot_utils.type_safe.primitives.domains.numerical.safe_float.Safe_Float__Probability_Score import Safe_Float__Probability_Score
5+
from osbot_aws.aws.comprehend.schemas.safe_str.Safe_Str__AWS_Comprehend__Text import Safe_Str__Comprehend__Text
6+
7+
8+
class Schema__Comprehend__Entity(Type_Safe):
9+
text : Safe_Str__Comprehend__Text
10+
type : Enum__Comprehend__Entity_Type
11+
score : Safe_Float__Probability_Score
12+
begin_offset : Safe_UInt
13+
end_offset : Safe_UInt

0 commit comments

Comments
 (0)