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».
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.
Sélectionnez ensuite la région comme Tokyo, sélectionnez la lumière du plan et cliquez sur Créer.
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!
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`.
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
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)
}
}
}
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 "!
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!