[Swift5] Convertit le résultat de l'analyse obtenu par «IBM Watson Tone Analyzer» en JSON

Affichage des points

Ceci est une continuation de l'article que j'ai publié la dernière fois, donc si vous n'avez pas encore vu l'article précédent, veuillez d'abord y jeter un œil.

▼ ** [Swift5] Effectuer une analyse des émotions à l'aide de «IBM Watson Tone Analyzer» ** https://qiita.com/nkekisasa222/items/2933e46b22c17d3eedfb

Que faire cette fois et le code écrit

Convertit les informations suivantes acquises la dernière fois au format JSON.

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)]))

Le code suivant a été écrit cette fois.

ViewController.swift


//Créer une constante de code d'état et une branche conditionnelle
let statusCode = response?.statusCode
  switch statusCode == Optional(200)  {
    case true:
      print("Analyse réussie: \(statusCode)")
      //Créer des constantes pour les résultats d'analyse
      let analysisResult = result
                    
      //Préparer un encodeur à convertir en JSON
      let encoder = JSONEncoder()
                    
      //Formater JSON pour une meilleure lisibilité
      encoder.outputFormatting = .prettyPrinted
                    
      //Convertir les résultats d'analyse en JSON
      guard let jsonValue = try? encoder.encode(analysisResult) else {
        fatalError("Failed to encode to JSON.")
      }
                    
      //Confirmation des données JSON
      print("Résultat de l'analyse des émotions(JSON): \(String(bytes: jsonValue, encoding: .utf8)!)")
                    
  case false:
    //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("Échec de l'analyse: \(statusCode)")
}

Commentaire de code

Tout d'abord, créez une instance de statusCode avec la valeur respose qui est retournée pour la requête envoyée à ToneAnalyzer, et branchez avec instruction switch à la condition de code (200). Veuillez vous référer à l'image ci-dessous pour un aperçu du code d'état. image.png

Ensuite, je vais expliquer ce code.

ViewController.swift


//Résultats de l'analyse de substitution
let analysisResult = result

//Préparer un encodeur à convertir en JSON
let encoder = JSONEncoder()

//Formater JSON pour une meilleure lisibilité
encoder.outputFormatting = .prettyPrinted

//Convertir les résultats d'analyse en JSON
guard let jsonValue = try? encoder.encode(analysisResult) else {
  fatalError("Failed to encode to JSON.")

//Confirmation des données JSON
print("Résultat de l'analyse des émotions(JSON): \(String(bytes: jsonValue, encoding: .utf8)!)")
}

Tout d'abord, affectez le résultat de l'analyse à ʻanalysisResult, puis affectez JSONEncoder ()à l'encodeur. Utilisez ceJSONEncoder ()` pour convertir au format JSON.

Ensuite, formatez le JSON dans un format visuellement perceptible par les humains. Ensuite, convertissez en utilisant la méthode ʻencoder.encode (# résultat de l'analyse ici) `.

Enfin, écrivez print et compilez.

Analyse réussie: Optional(200)
Résultat de l'analyse des émotions(JSON): {
  "sentences_tone" : [
    {
      "sentence_id" : 0,
      "text" : "Team, I know that times are tough!",
      "tones" : [
        {
          "score" : 0.80182699999999996,
          "tone_id" : "analytical",
          "tone_name" : "Analytical"
        }
      ]
    },
    {
      "sentence_id" : 1,
      "text" : "Product sales have been disappointing for the past three quarters.",
      "tones" : [
        {
          "score" : 0.77124099999999995,
          "tone_id" : "sadness",
          "tone_name" : "Sadness"
        },
        {
          "score" : 0.68776800000000005,
          "tone_id" : "analytical",
          "tone_name" : "Analytical"
        }
      ]
    },
    {
      "sentence_id" : 2,
      "text" : "We have a competitive product, but we need to do a better job of selling it!",
      "tones" : [
        {
          "score" : 0.50676299999999996,
          "tone_id" : "analytical",
          "tone_name" : "Analytical"
        }
      ]
    }
  ],
  "document_tone" : {
    "tones" : [
      {
        "score" : 0.61650000000000005,
        "tone_id" : "sadness",
        "tone_name" : "Sadness"
      },
      {
        "score" : 0.82988799999999996,
        "tone_id" : "analytical",
        "tone_name" : "Analytical"
      }
    ]
  }
}

S'il est affiché comme ça dans la zone de débogage, la conversion est réussie!

Pour le moment, j'écrirai celui qui a été combiné avec le code précédent.

ViewController.swift


//ToneAnalyzer(Analyse des émotions)Méthode pour
  func toneAnalyzer() {
        
    //Instanciation de clé API Watson
    let authenticator = WatsonIAMAuthenticator(apiKey: "")
        
    //Définir la version et l'URL de l'API Watson
    let toneAnalyzer = ToneAnalyzer(version: "2017-09-21", authenticator: authenticator)
        toneAnalyzer.serviceURL = ""
        
    //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!
    """
        
    //Désactiver la validation SSL(Ce n'est pas nécessaire?)
    //toneAnalyzer.disableSSLVerification()
        
    //La gestion des erreurs
    toneAnalyzer.tone(toneContent: .text(sampleText)){
      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
          }
          //Créer une constante de code d'état et une branche conditionnelle
          let statusCode = response?.statusCode
            switch statusCode == Optional(200)  {
                case true:
                    print("Analyse réussie: \(statusCode)")
                    //Créer des constantes pour les résultats d'analyse
                    let analysisResult = result
                    
                    //Préparer un encodeur à convertir en JSON
                    let encoder = JSONEncoder()
                    
                    //Formater JSON pour une meilleure lisibilité
                    encoder.outputFormatting = .prettyPrinted
                    
                    //Convertir les résultats d'analyse en JSON
                    guard let jsonValue = try? encoder.encode(analysisResult) else {
                        fatalError("Failed to encode to JSON.")
                    }
                    
                    //Confirmation des données JSON
                    print("Résultat de l'analyse des émotions(JSON): \(String(bytes: jsonValue, encoding: .utf8)!)")
                    //Paramètres d'en-tête
                    print(response?.headers as Any)
                    
                case false:
                    //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("Échec de l'analyse: \(statusCode)")
            }
        }
    }

finalement

Après cela, je pense obtenir la valeur du JSON acquis. S'il y a place pour la correction dans le contenu du code, je vous serais reconnaissant si vous pouviez m'apprendre.

Merci d'avoir regardé jusqu'à la fin!

Recommended Posts

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