Class: Stealth::Nlp::Luis::Result
- Inherits:
-
Result
- Object
- Result
- Stealth::Nlp::Luis::Result
- Defined in:
- lib/stealth/nlp/luis/result.rb
Constant Summary collapse
- ENTITY_MAP =
{ 'money' => :currency, 'number' => :number, 'email' => :email, 'percentage' => :percentage, 'Calendar.Duration' => :duration, 'geographyV2' => :geo, 'age' => :age, 'phonenumber' => :phone, 'ordinalV2' => :ordinal, 'url' => :url, 'dimension' => :dimension, 'temperature' => :temp, 'keyPhrase' => :key_phrase, 'name' => :name, 'datetimeV2' => :datetime }
Instance Method Summary collapse
- #entities ⇒ Object
-
#initialize(result:) ⇒ Result
constructor
A new instance of Result.
- #intent ⇒ Object
- #intent_score ⇒ Object
-
#parsed_result ⇒ Object
Sample JSON result: { “query”: “I make between $5400 and $9600 per month”, “prediction”: { “topIntent”: “None”, “intents”: { “None”: { “score”: 0.5345857 } }, “entities”: { “money”: [ { “number”: 5400, “units”: “Dollar” }, { “number”: 9600, “units”: “Dollar” } ], “number”: [ 5400, 9600 ] }, “sentiment”: { “label”: “positive”, “score”: 0.7805586 } } }.
- #raw_entities ⇒ Object
- #sentiment ⇒ Object
- #sentiment_score ⇒ Object
Constructor Details
#initialize(result:) ⇒ Result
Returns a new instance of Result.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/stealth/nlp/luis/result.rb', line 17 def initialize(result:) @result = result if result.status.success? Stealth::Logger.l( topic: :nlp, message: 'NLP lookup successful' ) parsed_result else Stealth::Logger.l( topic: :nlp, message: "NLP lookup FAILED: (#{result.status.code}) #{result.body.to_s}" ) end end |
Instance Method Details
#entities ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/stealth/nlp/luis/result.rb', line 81 def entities return {} if raw_entities.blank? _entities = {} raw_entities.each do |type, values| if ENTITY_MAP[type] _entities[ENTITY_MAP[type]] = values else # A custom entity _entities[type.to_sym] = values end end _entities end |
#intent ⇒ Object
69 70 71 |
# File 'lib/stealth/nlp/luis/result.rb', line 69 def intent top_intent&.to_sym end |
#intent_score ⇒ Object
73 74 75 |
# File 'lib/stealth/nlp/luis/result.rb', line 73 def intent_score parsed_result&.dig('prediction', 'intents', top_intent, 'score') end |
#parsed_result ⇒ Object
Sample JSON result: {
"query": "I make between $5400 and $9600 per month",
"prediction": {
"topIntent": "None",
"intents": {
"None": {
"score": 0.5345857
}
},
"entities": {
"money": [
{
"number": 5400,
"units": "Dollar"
},
{
"number": 9600,
"units": "Dollar"
}
],
"number": [
5400,
9600
]
},
"sentiment": {
"label": "positive",
"score": 0.7805586
}
}
}
65 66 67 |
# File 'lib/stealth/nlp/luis/result.rb', line 65 def parsed_result @parsed_result ||= MultiJson.load(result.body.to_s) end |
#raw_entities ⇒ Object
77 78 79 |
# File 'lib/stealth/nlp/luis/result.rb', line 77 def raw_entities parsed_result&.dig('prediction', 'entities') end |
#sentiment ⇒ Object
101 102 103 |
# File 'lib/stealth/nlp/luis/result.rb', line 101 def sentiment parsed_result&.dig('prediction', 'sentiment', 'label')&.to_sym end |
#sentiment_score ⇒ Object
97 98 99 |
# File 'lib/stealth/nlp/luis/result.rb', line 97 def sentiment_score parsed_result&.dig('prediction', 'sentiment', 'score') end |