Début 2011, un système informatique comprenant un langage naturel, IBM Watson, a pu vaincre tous les concurrents humains dans un jeu télévisé appelé Jeopardy! C’était un événement historique et c’était peut-être le moment où le grand public a commencé à se rendre compte que l’intelligence artificielle n’était plus une matière de science-fiction.
À l'époque, Watson utilisait un superordinateur et ne pouvait que répondre à des questions anodines. Aujourd'hui, cependant, il est devenu un système beaucoup plus polyvalent et une grande partie de ses fonctionnalités sont disponibles sur le cloud..
Dans cette série de didacticiels, je vais vous montrer comment utiliser divers services offerts par IBM Watson Developer Cloud dans les applications Android. Dans ce didacticiel d’introduction, vous apprendrez à utiliser IBM Bluemix, le kit de développement du kit de développement Java Watson et le service d’analyseur de sons Watson pour créer une application Android simple capable d’identifier les émotions présentes dans n’importe quel texte..
Pour pouvoir suivre, vous aurez besoin de:
Les services de Watson ne sont accessibles que via la plate-forme cloud IBM Bluemix. Cela signifie que vous pouvez les utiliser dans votre application uniquement après les avoir activés dans la console Bluemix et acquis les informations d'identification requises..
Commencez par vous connecter à la console et accédez à Services> Watson.
Ensuite, appuyez sur le Créer un service Watson bouton pour voir tous les services Watson disponibles.
Pour l’instant, comme nous n’intéressons que l’analyse du ton émotionnel dans un texte écrit, sélectionnez la Analyseur de tonalité un service.
Sur l’écran suivant, changez le nom du service en quelque chose de significatif et appuyez sur le bouton Créer bouton.
Le service d’analyseur de tonalité sera désormais activé pour votre compte et un ensemble d’identifiants de connexion sera généré. Pour voir quelles sont ces informations d'identification, ouvrez le Identifiants de service onglet et sélectionnez le Voir les informations d'identification action.
Enregistrez le contenu du document JSON dans un fichier sur votre ordinateur. Je vous suggère de nommer le fichier credentials.json.
Le kit de développement de logiciels Java Watson rend très facile la communication avec n’importe quel service Watson. Pour pouvoir l’utiliser dans votre projet, ajoutez-le en tant que compiler
dépendance dans le app
modules build.gradle fichier.
compiler 'com.ibm.watson.developer_cloud: java-sdk: 3.7.2'
Pour ce didacticiel, vous aurez besoin de deux bibliothèques supplémentaires: Commons IO, pour simplifier les opérations d'IO de fichiers, et Android Design Support, pour pouvoir utiliser quelques widgets Material Design. Ajoutez-les aussi comme compiler
les dépendances.
compiler 'commons-io: commons-io: 2.5' compiler 'com.android.support:design:23.4.0'
Vous aurez aussi besoin du L'INTERNET
autorisation de communiquer avec les serveurs IBM, ajoutez donc la ligne suivante à la AndroidManifest.xml fichier:
Enfin, appuyez sur le Synchroniser maintenant bouton pour terminer la configuration du projet.
Pour communiquer avec le service Analyseur de tonalité de Watson, vous devez utiliser le ToneAnalyzer
classe. Son constructeur attend une chaîne de date comme argument, qu'il utilisera pour déterminer automatiquement la version du service d'analyseur de tonalité à utiliser..
final ToneAnalyzer toneAnalyzer = nouveau ToneAnalyzer ("2017-07-01");
Notez que la date doit toujours être une chaîne statique. Cela vous aide à vous assurer que votre application ne cesse pas de fonctionner lorsqu'une nouvelle version du service introduit des modifications radicales..
le ToneAnalyzer
instance doit être configurée pour utiliser vos informations d'identification, alors déplacez le credentials.json fichier, celui que vous avez créé précédemment dans ce didacticiel, de votre projet res / raw dossier.
Ensuite, vous devez extraire les valeurs du Nom d'utilisateur
et mot de passe
clés du fichier JSON. Le code suivant vous montre comment procéder rapidement en utilisant le IOUtils
et JSONObject
Des classes:
JSONObject credentials = new JSONObject (IOUtils.toString (getResources (). OpenRawResource (R.raw.credentials), "UTF-8")); // Convertit le fichier en objet JSON // Extrait les deux valeurs String username = credentials.getString ("username"); String password = credentials.getString ("mot de passe");
Vous pouvez maintenant terminer la configuration du ToneAnalyzer
par exemple en appelant le setUsernameAndPassword ()
méthode.
toneAnalyzer.setUsernameAndPassword (nom d'utilisateur, mot de passe);
Notre application a besoin d'une interface qui permette à l'utilisateur de saisir quelques phrases et d'appuyer sur un bouton pour commencer l'analyse du ton. En d’autres termes, vous devez maintenant créer une mise en page simple contenant un Éditer le texte
widget et un Bouton
widget.
Vous pouvez aussi, facultativement, jeter un TextInputLayout
conteneur pour vous assurer que le Éditer le texte
widget conforme aux directives de Material Design.
En conséquence, ajoutez le code suivant au fichier XML de présentation de votre activité:
L'analyse de la tonalité doit commencer dès que l'utilisateur appuie sur le bouton. Par conséquent, vous devez ajouter un gestionnaire d’événements sur clic au Bouton
widget en utilisant son setOnClickListener ()
méthode. Avant de le faire, toutefois, n'oubliez pas de faire référence au widget à l'aide de la commande findViewById ()
méthode.
Bouton analyseButton = (Bouton) findViewById (R.id.analyze_button); analyseButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (Afficher la vue) // Plus de code ici);
Dans le gestionnaire d’événements sur clic, la première chose à faire est de déterminer ce que l’utilisateur a saisi dans le Éditer le texte
widget en utilisant son getText ()
méthode.
EditText userInput = (EditText) findViewById (R.id.user_input); final String textToAnalyze = userInput.getText (). toString ();
Comme tous les services Watson, le service Analyseur de tonalité offre de nombreuses fonctionnalités différentes. Par exemple, il peut identifier les émotions, le style de langue et les tendances sociales dans son entrée. Il peut également fonctionner avec des documents JSON, du texte brut et HTML. Par conséquent, pour l'utiliser efficacement, vous devez spécifier explicitement les fonctionnalités dont vous avez besoin à l'aide d'un ToneOptions
objet, qui peut être facilement créé en utilisant le ToneOptions.Builder
classe.
Pour le moment, nous utiliserons ce service uniquement pour répertorier toutes les émotions présentes dans une chaîne de texte en clair. Voici comment vous créez un ToneOptions
objet en disant:
Options ToneOptions = new ToneOptions.Builder () .addTone (Tone.EMOTION) .html (false) .build ();
Vous pouvez maintenant composer une demande d'analyse de tonalité en appelant le getTone ()
méthode, qui attend une chaîne contenant le texte à analyser et une ToneOptions
objet comme seul argument. Pour exécuter la demande de manière asynchrone, vous devez également appeler le enqueue ()
méthode, qui prend un ServiceCallback
exemple comme son argument.
toneAnalyzer.getTone (textToAnalyze, options) .enqueue (nouveau ServiceCallback() @Override public void onResponse (réponse de ToneAnalysis) // Plus de code ici @Override public void onFailure (Exception e) e.printStackTrace (); );
À l'intérieur de onResponse ()
méthode du ServiceCallback
classe, vous avez accès à un ToneAnalysis
objet. En appelant getDocumentTone ()
méthode, vous pouvez déterminer le ton général du texte que vous avez transmis au service.
La valeur de retour de la getDocumentTone ()
la méthode est un ElementTone
objet contenant une liste de catégories de tons. Comme nous avons explicitement indiqué précédemment que nous ne nous intéressions qu'à la catégorie des émotions, la liste ne contiendra qu'un seul élément. En conséquence, voici comment vous extrayez les scores de toutes les émotions détectées par le service:
listescores = response.getDocumentTone () .getTones () .get (0) .getTones ();
Comme on pouvait s'y attendre, un ToneScore
objet représente une seule émotion. Il a un Double
contenant le score réel et un Chaîne
vous dire le nom de l'émotion. Si le score est supérieur à 0,5, cela signifie qu'il y a de bonnes chances que l'émotion soit exprimée dans le texte..
Choisissons maintenant uniquement les émotions dont les scores sont supérieurs à 0,5 et utilisons-les pour créer un message pouvant être affiché à l'utilisateur à l'aide d'un Pain grillé
.
Chaîne détectéeTones = ""; pour (score ToneScore: scores) if (score.getScore ()> 0.5f) tonneaux détectés + = score.getName () + ""; final String toastMessage = "Les émotions suivantes ont été détectées: \ n \ n" + installedTones.toUpperCase ();
Parce que le onResponse ()
Si la méthode fonctionne sur un autre thread, vous devez vous assurer de créer et d'afficher le Pain grillé
seulement après avoir appelé le runOnUiThread ()
méthode.
runOnUiThread (new Runnable () @Override public void run () Toast.makeText (getBaseContext (), toastMessage, Toast.LENGTH_LONG) .show (););
L'application est maintenant prête. Si vous l'exécutez, tapez quelques phrases et lancez l'analyse, vous pourrez voir Watson identifier avec précision les émotions présentes dans votre texte..
Dans ce didacticiel, vous avez créé une application Android pouvant utiliser le service d'analyse de tonalité d'IBM Watson pour effectuer la tâche complexe consistant à deviner les émotions exprimées dans un texte. Vous avez également appris les bases de l'utilisation du kit de développement Java Watson et de la console IBM Bluemix..
Pour en savoir plus sur le service, vous pouvez vous référer à sa documentation officielle.
En attendant, vous pouvez consulter certains de nos autres articles sur l'utilisation de l'apprentissage automatique pour vos applications Android ici sur Envato Tuts+!