I begynnelsen av 2011 var et naturlig språkkunnskap datasystem kalt IBM Watson i stand til å slå alle menneskelige deltakere i et quiz-lignende spillprogram kalt Jeopardy! Det var en historisk begivenhet, og det var kanskje poenget da allmennheten begynte å innse at kunstig intelligens ikke lenger var noe av science fiction.
Deretter kjørte Watson på en supercomputer og kunne ikke gjøre mer enn å svare på trivia-spørsmål. I dag er det imidlertid blitt forvandlet til et langt mer allsidig system, og mange av dens evner er tilgjengelige over skyen.
I denne serien av opplæringsprogrammer viser jeg deg hvordan du bruker ulike tjenester som tilbys av IBM Watson Developer Cloud i Android-apper. I denne innledende veiledningen lærer du hvordan du arbeider med IBM Bluemix, Watson Java SDK og Watson-toneanalysatortjenesten for å lage en enkel Android-app som kan identifisere følelsene som finnes i et hvilket som helst tekststykke.
For å kunne følge med, må du:
Watsons tjenester kan bare nås via IBM Bluemix Cloud Platform. Det betyr at du bare kan bruke dem i søknaden din etter at du har aktivert dem i Bluemix-konsollen og fått de nødvendige legitimasjonene.
Start med å logge inn på konsollen og navigere til Tjenester> Watson.
Deretter trykker du på Opprett Watson service knappen for å se alle Watson-tjenestene som er tilgjengelige for deg.
For nå, fordi vi bare er interessert i å analysere følelsesmessige tonen i skriftlig tekst, velger du Tone Analyzer service.
På neste skjerm endrer du navnet på tjenesten til noe meningsfylt og trykker på Skape knapp.
Toneanalysatortjenesten vil nå bli aktivert for kontoen din, og et sett med påloggingsinformasjon vil bli generert. For å se hva disse legitimasjonene er, åpne Tjenestegodkjenninger kategorien og velg Se påloggingsinformasjon handling.
Lagre innholdet i JSON-dokumentet til en fil på datamaskinen. Jeg foreslår at du navngir filen credentials.json.
Watson Java SDK gjør det veldig enkelt for deg å kommunisere med hvilken som helst Watson-tjeneste. For å kunne bruke det i prosjektet, legg det til som en kompilere
avhengighet i app
modulens build.gradle fil.
kompilere 'com.ibm.watson.developer_cloud: java-sdk: 3.7.2'
For denne opplæringen trenger du to flere biblioteker: Commons IO, for å forenkle fil IO operasjoner, og Android Design Support, for å kunne bruke noen Material Design widgets. Legg til dem også som kompilere
avhengig.
kompilere 'commons-io: commons-io: 2,5' compile 'com.android.support:design:23.4.0'
Du vil også trenge INTERNETT
Tillatelse til å kommunisere med IBMs servere, så legg til følgende linje til AndroidManifest.xml fil:
Til slutt trykker du på Synkroniser nå knappen for å fullføre prosjektkonfigurasjonen.
For å kommunisere med Watsons toneanalysetjeneste må du bruke ToneAnalyzer
klasse. Konstruktøren forventer en datastreng som argument, som den vil bruke til å automatisk bestemme versjonen av toneanalysatortjenesten som skal brukes.
siste ToneAnalyzer toneAnalyzer = ny ToneAnalyzer ("2017-07-01");
Merk at datoen alltid skal være en statisk streng. Dette hjelper til med at appen din ikke slutter å fungere når en ny versjon av tjenesten introduserer bryte endringer.
De ToneAnalyzer
forekomst må konfigureres for å bruke legitimasjonene dine, så flytt credentials.json fil, den du opprettet tidligere i denne opplæringen, til prosjektet ditt res / rå mappe.
Deretter må du trekke ut verdiene til brukernavn
og passord
nøkler fra JSON-filen. Følgende kode viser hvordan du gjør det raskt ved hjelp av IOUtils
og JSONObject
klasser:
JSONObject credentials = nytt JSONObject (IOUtils.toString (getResources (). OpenRawResource (R.raw.credentials), "UTF-8")); // Konverter filen til et JSON objekt // Trekk ut de to verdiene String brukernavn = credentials.getString ("brukernavn"); String passord = credentials.getString ("passord");
Du kan nå fullføre konfigurasjonen av ToneAnalyzer
eksempel ved å ringe setUsernameAndPassword ()
metode.
toneAnalyzer.setUsernameAndPassword (brukernavn, passord);
Vår app trenger et grensesnitt som lar brukeren skrive inn noen få setninger og trykk på en knapp for å starte toneanalysen. Med andre ord må du nå lage et enkelt layout som inneholder en EditText
widget og a Knapp
widget.
Du kan eventuelt også kaste inn en TextInputLayout
beholder for å sikre at EditText
Widget er i samsvar med retningslinjene for Material Design.
Følgelig legg til følgende kode i aktivitetsens layout XML-fil:
Toneanalysen må starte så snart brukeren trykker på knappen. Derfor må du legge til en hendelseshåndterer på klikk på Knapp
widget ved hjelp av dens setOnClickListener ()
metode. Før du gjør det, må du ikke glemme å få en referanse til widgeten ved hjelp av findViewById ()
metode.
Knapp analyseButton = (Button) findViewById (R.id.analyze_button); analyzeButton.setOnClickListener (new View.OnClickListener () @Override public void onClick (View view) // Mer kode her);
Inne i hendelseshåndtereren på klikk er det første du må gjøre, å avgjøre hva brukeren har skrevet inn i EditText
widget ved hjelp av dens GetText ()
metode.
EditText userInput = (EditText) findViewById (R.id.user_input); siste String textToAnalyze = userInput.getText (). toString ();
Som alle Watson-tjenester tilbyr toneanalysatortjenesten mange forskjellige funksjoner. For eksempel kan den identifisere følelser, språkstil og sosiale tendenser i sin inngang. Det kan også fungere med JSON-dokumenter, vanlig tekst og HTML. For å bruke den effektivt må du derfor spesifikt spesifisere funksjonene du trenger ved å bruke en ToneOptions
objekt, som lett kan opprettes ved hjelp av ToneOptions.Builder
klasse.
For nå bruker vi bare tjenesten for å liste alle følelsene som er til stede i en ren tekststreng. Slik lager du en ToneOptions
objekt å si det slik:
ToneOptions options = new ToneOptions.Builder () .addTone (Tone.EMOTION) .html (false) .build ();
Du kan nå skrive en toneanalyseforespørsel ved å ringe getTone ()
metode, som forventer en streng som inneholder teksten som skal analyseres og a ToneOptions
objekt som sine eneste argumenter. For å faktisk utføre forespørselen asynkront må du også ringe Enqueue ()
metode, som tar a ServiceCallback
eksempel som argument.
toneAnalyzer.getTone (textToAnalyze, alternativer) .enqueue (ny ServiceCallback() @Override public void onResponse (ToneAnalysis respons) // Mer kode her @Override public void onFailure (Unntak e) e.printStackTrace (); );
Inne i onResponse ()
metode av ServiceCallback
klasse, har du tilgang til a ToneAnalysis
gjenstand. Ved å ringe det getDocumentTone ()
Metode, du kan bestemme den samlede tonen i teksten du har sendt til tjenesten.
Returneringsverdien til getDocumentTone ()
metoden er en ElementTone
objekt som inneholder en liste over tonekategorier. Fordi vi uttrykkelig uttalte tidligere at vi bare er interessert i kategoriene følelser, vil listen bare inneholde ett element. Følgelig, her er hvordan du trekker ut poengene for alle følelsene tjenesten oppdages:
Listescore = response.getDocumentTone () .getTones () .get (0) .getTones ();
Som du kanskje regner med, a ToneScore
objekt representerer en følelse. Den har en Dobbelt
inneholder den faktiske poengsummen og a string
forteller deg navnet på følelsene. Hvis poengsummen er større enn 0,5, betyr det at det er en god sjanse for at følelsen blir uttrykt i teksten.
La oss nå velge bare de følelsene som har en score større enn 0,5, og bruk dem til å lage en melding som kan vises til brukeren ved hjelp av en Skål
.
String detectedTones = ""; for (ToneScore score: score) if (score.getScore ()> 0.5f) detectedTones + = score.getName () + ""; siste String toastMessage = "Følgende følelser ble oppdaget: \ n \ n" + detectedTones.toUpperCase ();
Fordi det onResponse ()
Metoden går på forskjellig tråd, du må sørge for at du oppretter og viser Skål
bare etter å ha ringt runOnUiThread ()
metode.
runOnUiThread (new Runnable () @Override public void run () Toast.makeText (getBaseContext (), toastMessage, Toast.LENGTH_LONG) .show (););
Appen er nå klar. Hvis du kjører det, skriver du inn noen få setninger, og starter analysen, vil du kunne se Watson nøyaktig identifisere følelsene som er tilstede i teksten.
I denne opplæringen har du opprettet en Android-app som kan bruke IBM Watsons toneanalysetjeneste til å utføre den komplekse oppgaven med å gjette følelsene uttrykt i et stykke tekst. Du lærte også grunnleggende om å bruke Watson Java SDK og IBM Bluemix-konsollen.
For å lære mer om tjenesten, kan du se den offisielle dokumentasjonen.
I mellomtiden kan du sjekke ut noen av våre andre innlegg på bruk av maskinlæring for Android-appene dine her på Envato Tuts+!