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
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)")
}
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.
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 ce
JSONEncoder ()` 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)")
}
}
}
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!