[Swift5] Effectuer une analyse des émotions à l'aide de «IBM Watson Tone Analyzer»

Affichage des points

Je veux implémenter la «fonction d'analyse d'émotion» en utilisant «IBM Watson Tone Analyzer» en tant que fonction de développement d'applications personnelles, j'ai donc essayé de l'implémenter en me référant au document officiel. Le résultat cette fois est d'obtenir la «clé API dans la phase initiale» et «pour effectuer réellement l'analyse et afficher le résultat de l'analyse».

Obtenir la clé API

Tout d'abord, créez un compte pour Watson IBM Cloud. Veuillez accéder à la page officielle à partir de l'url ci-dessous et créer un compte à partir de Inscription en haut à droite. https://cloud.ibm.com/developer/watson/services Une fois l'enregistrement terminé, sélectionnez le service Watson Tone Analyze comme indiqué dans l'image ci-dessous. image.png Sélectionnez ensuite la région comme Tokyo, sélectionnez la lumière du plan et cliquez sur Créer. image.png Ensuite, vous serez redirigé vers la page dédiée, alors sélectionnez Get Credentials et obtenez ʻAPI Key et ʻURL.

À ce stade, nous vous recommandons d'écrire la ʻAPI key et ʻURL dans votre projet et de les commenter!

Importer l'analyseur de tonalité

Maintenant que nous avons la clé API, nous aimerions commencer à implémenter le code à partir d'ici. D'abord, utilisez Cocoapods pour importer le Tone Analyzer. Si vous n'avez pas encore installé de pods, veuillez vous référer à l'url ci-dessous. https://qiita.com/ShinokiRyosei/items/3090290cb72434852460

Maintenant, installons le pod.

Podfile.


target 'nom de l'application' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  #Pods pour le nom de l'application

pod 'IBMWatsonToneAnalyzerV3', '~> 3.6.0' #Décrivez ici

end

Importez ensuite le framework dans le contrôleur que vous souhaitez utiliser.

Veuillez noter que le préfixe IBM Watson et le suffixe de version sont exclus. Dans ʻIBM Watson ToneAnalyzer V3, supprimez ʻIBM Watson et V3 et écrivez ʻimport Tone Analyzer`.

Authentification API

Une fois le framework importé, l'étape suivante est la phase d'authentification. La méthode standard consiste à utiliser «IBM Cloud Identity and Access Management (IAM)» pour définir la clé API, la version et l'URL de l'API.

ViewController.swift


import UIKit
import ToneAnalyzer

class ViewController: UIViewController {
    
    //Définir la clé API Watson
    let authenticator = WatsonIAMAuthenticator(apiKey: "Joindre la clé API obtenue ici")

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //Définir la version et l'URL de l'API Watson
        let toneAnalyzer = ToneAnalyzer(version: "2017-09-21", authenticator: authenticator)
            toneAnalyzer.serviceURL = "Joindre l'URL obtenue ici"
    }
}

Notez que le serviceURL changera en fonction de l'emplacement que vous avez défini lors de la création de l'API. Comme il est répertorié ci-dessous, veuillez le remplacer par toneAnalyzer.serviceURL en fonction de l'emplacement défini.

URL du service par emplacement

Dallas: https://api.us-south.tone-analyzer.watson.cloud.ibm.com
Washington DC: https://api.us-east.tone-analyzer.watson.cloud.ibm.com
Francfort: https://api.eu-de.tone-analyzer.watson.cloud.ibm.com
Londres: https://api.eu-gb.tone-analyzer.watson.cloud.ibm.com
Séoul: https://api.kr-seo.tone-analyzer.watson.cloud.ibm.com
Sydney: https://api.au-syd.tone-analyzer.watson.cloud.ibm.com
    Tokyo: https://api.jp-tok.tone-analyzer.watson.cloud.ibm.com

Traitement des erreurs et traitement des données

Ensuite, décrivez le traitement des erreurs et le traitement des données. Et avant cela, déclarez l'exemple de texte à utiliser pour l'analyse.

ViewController.swift


import UIKit
import ToneAnalyzer

class ViewController: UIViewController {
    
    //Définir la clé API Watson
    let authenticator = WatsonIAMAuthenticator(apiKey: "Joindre la clé API obtenue ici")

    //Exemple de texte pour analyse
    let sampleText = """
    Team, I know that times are tough! Product \
    sales have been disappointing for the past three \
    quarters. We have a competitive product, but we \
    need to do a better job of selling it!
    """

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //Définir la version et l'URL de l'API Watson
        let toneAnalyzer = ToneAnalyzer(version: "2017-09-21", authenticator: authenticator)
            toneAnalyzer.serviceURL = "Joindre l'URL obtenue ici"
    }
}

Analysons maintenant en utilisant le sampleText défini. Le branchement conditionnel est effectué avec l'instruction switch et le contenu affiché par le code d'état est modifié. La plage 200 du code d'état indique le succès, la plage 400 indique un échec et la plage 500 indique une erreur système interne.

ViewController.swift


import UIKit
import ToneAnalyzer

class ViewController: UIViewController {
    
    //Définir la clé API Watson
    let authenticator = WatsonIAMAuthenticator(apiKey: "q6GL14WCXtIbNgwYazVmBDNGlyd3jmxglni-pmk96g0z")
    
    //Exemple de texte pour analyse
    let sampleText = """
    Team, I know that times are tough! Product \
    sales have been disappointing for the past three \
    quarters. We have a competitive product, but we \
    need to do a better job of selling it!
    """

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //Définir la version et l'URL de l'API Watson
        let toneAnalyzer = ToneAnalyzer(version: "2017-09-21", authenticator: authenticator)
            toneAnalyzer.serviceURL = "https://api.jp-tok.tone-analyzer.watson.cloud.ibm.com"
        
        //La gestion des erreurs
        toneAnalyzer.tone(toneContent: .text(sampleText)){ #Définissez sampleText ici
          response, error in
          if let error = error {
            switch error {
            case let .http(statusCode, message, metadata):
              switch statusCode {
              case .some(404):
                // Handle Not Found (404) exceptz1zion
                print("Not found")
              case .some(413):
                // Handle Request Too Large (413) exception
                print("Payload too large")
              default:
                if let statusCode = statusCode {
                  print("Error - code: \(statusCode), \(message ?? "")")
                }
              }
            default:
              print(error.localizedDescription)
            }
            return
          }
          //Traitement de l'information
          guard let result = response?.result else {
            print(error?.localizedDescription ?? "unknown error")
            return
          }
          print(result)
          //Afficher le code d'état(La plage 200 est réussie, la plage 400 est un échec, la plage 500 est une erreur système interne)
          print(response?.statusCode as Any)
          //Paramètres d'en-tête
          print(response?.headers as Any)
        }
    }
}

Courir

Si vous pouvez le décrire jusqu'à présent, créez-le et vérifiez si vous pouvez réellement extraire les informations d'analyse. Si le résultat de l'analyse est affiché dans la zone de débogage comme indiqué ci-dessous, il réussit.

ToneAnalysis(documentTone: ToneAnalyzer.DocumentAnalysis(tones: Optional([ToneAnalyzer.ToneScore(score: 0.6165, toneID: "sadness", toneName: "Sadness"), ToneAnalyzer.ToneScore(score: 0.829888, toneID: "analytical", toneName: "Analytical")]), toneCategories: nil, warning: nil), sentencesTone: Optional([ToneAnalyzer.SentenceAnalysis(sentenceID: 0, text: "Team, I know that times are tough!", tones: Optional([ToneAnalyzer.ToneScore(score: 0.801827, toneID: "analytical", toneName: "Analytical")]), toneCategories: nil, inputFrom: nil, inputTo: nil), ToneAnalyzer.SentenceAnalysis(sentenceID: 1, text: "Product sales have been disappointing for the past three quarters.", tones: Optional([ToneAnalyzer.ToneScore(score: 0.771241, toneID: "sadness", toneName: "Sadness"), ToneAnalyzer.ToneScore(score: 0.687768, toneID: "analytical", toneName: "Analytical")]), toneCategories: nil, inputFrom: nil, inputTo: nil), ToneAnalyzer.SentenceAnalysis(sentenceID: 2, text: "We have a competitive product, but we need to do a better job of selling it!", tones: Optional([ToneAnalyzer.ToneScore(score: 0.506763, toneID: "analytical", toneName: "Analytical")]), toneCategories: nil, inputFrom: nil, inputTo: nil)]))
Optional(200)
Optional(["x-service-build-number": "2020-10-12T05:02:12", "x-dp-watson-tran-id": "e7f11a38-2089-4860-8414-7f1e3878f449", "Content-Security-Policy": "default-src \'none\'", "x-xss-protection": "1; mode=block", "x-service-api-version": "null; 2017-09-21", "x-global-transaction-id": "e7f11a38-2089-4860-8414-7f1e3878f449", "Date": "Wed, 14 Oct 2020 01:20:56 GMT", "Server": "watson-gateway", "x-powered-by": "Servlet/3.1", "X-EdgeConnect-Origin-MEX-Latency": "212", "Content-Language": "en-US", "x-request-id": "e7f11a38-2089-4860-8414-7f1e3878f449", "Access-Control-Allow-Origin": "*", "Content-Length": "726", "Cache-Control": "no-store", "Content-Type": "application/json", "Pragma": "no-cache", "Connection": "keep-alive", "Strict-Transport-Security": "max-age=31536000; includeSubDomains;", "X-EdgeConnect-MidMile-RTT": "7", "x-content-type-options": "nosniff"])

Le contenu de l'impression décrit dans ViewController.swift est affiché fermement. Le code d'état est également affiché sous la forme «(200)», ce qui signifie une réussite.

ViewController.swift


print(result)
//Afficher le code d'état(La plage 200 est réussie, la plage 400 est un échec, la plage 500 est une erreur système interne)
print(response?.statusCode as Any)
//Paramètres d'en-tête
print(response?.headers as Any)

Avec cela, nous ne l'avons pas encore implémenté dans l'application, mais nous l'avons implémenté en termes d '"obtention de la clé API" au stade initial "et" d'analyse et d'affichage du résultat de l'analyse "!

finalement

Nous continuerons à travailler sur le développement d'applications personnelles tout en produisant des résultats, nous apprécierions donc que vous puissiez vous y référer. Merci d'avoir regardé jusqu'à la fin!

Recommended Posts

[Swift5] Effectuer une analyse des émotions à l'aide de «IBM Watson Tone Analyzer»
[Swift5] Convertit le résultat de l'analyse obtenu par «IBM Watson Tone Analyzer» en JSON