
Teilen Sie:
Adam ist ein Entwickler und Berater, der gerne Ultraläufe absolviert, bloggt und anderen dabei hilft, Technologien zu zähmen, um erstaunliche Dinge zu erreichen, und der ein unstillbares Verlangen hat, Mentoren zu sein und zu helfen.
Stimmungsanalyse mit IBM Watson Tone Analyzer in PHP
Lesedauer: 12 Minuten
In einer Welt, in der Daten und Texte oft in der ersten Reihe stehen, wird es immer wichtiger, die Stimmung der Kommunikation zu verstehen, die wir erhalten. Es ist auch wichtig zu verstehen, wie Worte, die wir verwenden, eine falsche Stimmung vermitteln können.
Häufig liest man eine SMS und "denkt", sie sei wütend, enttäuscht oder sarkastisch. Schwarzer und weißer Text macht es schwer zu "fühlen", was geteilt wird, besonders in politischen Arbeitsumgebungen oder wo leidenschaftliche oder meinungsstarke Ideen und Visionen geteilt werden können.
Die Stimmungsanalyse ist ein hervorragendes Instrument, um die Kluft zwischen dem, was wir sagen, und dem, was wir meinen, zu überbrücken. Und auch wenn sie nicht alles lösen kann, kann sie doch dazu beitragen, eine positivere Richtung einzuschlagen.
Werfen wir einen Blick darauf, wie die Stimmungsanalyse mit SMS-Textnachrichten von Vonage genutzt werden kann, indem der IBM Watson-Service mit einem einfachen PHP-Callback-Skript eingesetzt wird.
Projekt einrichten
In diesem Beispiel führen wir zunächst eine PHP-Anwendung lokal mit dem PHP eingebauten Webserver. Obwohl der integrierte Webserver nicht in einer Produktionsumgebung verwendet werden sollte, ist er für Beispielskripte wie dieses gut geeignet.
Dann werden wir ngrok um die lokale Anwendung im Internet als Callback-Endpunkt für den SMS-Dienst von Vonage verfügbar zu machen. Werfen Sie einen Blick auf diese Seite wenn Sie Hilfe bei der Einrichtung von ngrok benötigen, aber die Grundlagen sind: Erstellen Sie einen Account bei ngrok, laden Sie die ausführbare Datei herunter, starten Sie einen Tunnel per CLI und verwenden Sie die URLs, die in der CLI angegeben sind, nachdem sie ausgeführt wurde.
IBM Watson Account
Eine Voraussetzung ist, dass Sie einen Account und API-Zugangsdaten bei einem Dienst haben, der Sentimentanalysen anbietet. Zum Zeitpunkt dieses Beitrags sind nur wenige davon verfügbar, und Sie können diesen Beitrag um eine grundlegende Aufschlüsselung zu sehen. Für dieses Beispiel werden wir jedoch den IBM Watson Tone Analyzer Dienst.
Dies erfordert einen IBM Cloud Account, die Erstellung einer Ressource und die Einrichtung von Anmeldedaten, was alles kostenlos ist, bis Sie ein bestimmtes Nutzungsniveau erreichen.
IBM Wolke
Nachdem Sie einen Account bei IBM Cloud eingerichtet und sich angemeldet haben, wird Ihnen das Dashboard angezeigt. Von dort aus klicken Sie auf die Schaltfläche "Ressource erstellen".
Create resource at IBM Cloud
Scrollen Sie anschließend nach unten und klicken Sie auf das Feld Tone Analyzer.
Tone Analyzer service at IBM Cloud
Füllen Sie das Formular mit den erforderlichen Informationen aus und wählen Sie eine Region in Ihrer Nähe. Daraufhin werden ein API-Schlüssel und eine URL bereitgestellt. Notieren Sie sich diese, da sie später benötigt werden.
Anwendung Basis
An diesem Punkt müssen wir mit der Organisation der Anwendung beginnen. Wir gehen von einem leeren Verzeichnis aus und beginnen mit der Erstellung der Beispiel-Callback-Anwendung von dort aus. Außerdem gehen wir von einem lokalen System aus, auf dem PHP bereits eingerichtet ist und läuft und über die Befehlszeilenschnittstelle (CLI) verwendet werden kann.
Erstellen Sie in diesem leeren Verzeichnis eine neue PHP-Datei und nennen Sie sie index.php. Im Moment geben Sie einfach das Wort "test" in die Datei ein. Dies wird eine Ausgabe erzeugen und uns ermöglichen, im nächsten Schritt zu testen.
Eingebauter PHP-Webserver und ngrok
Zu Beginn starten wir den eingebauten PHP-Webserver und bringen ngrok zum Laufen. Dadurch wird sichergestellt, dass die Umgebung von Anfang an läuft und bereit ist.
Navigieren Sie mit dem Terminal des Systems zu dem Verzeichnis, in dem wir uns befinden. Geben Sie dort den Befehl zum Starten des integrierten PHP-Webservers wie folgt ein:
Wenn Sie jetzt "http://localhost:8080" eingeben, sollte als Antwort "test" erscheinen, wenn dies in der index.php vorher erstellt wurde.
Als nächstes bringen wir ngrok zum Laufen, um die Ergebnisse des Webservers über das Internet verfügbar zu machen. Navigieren Sie in einem Terminal zu dem Ort, an dem ngrok zuvor installiert wurde, und geben Sie den folgenden Befehl ein:
Im Gegenzug stellt uns ngrok einige wichtige Informationen zur Verfügung, wie auf dem folgenden Screenshot zu sehen ist.
ngrok information returned
Auf diese Weise erhalten wir die Informationen über den Dienst, einschließlich der Tunnel-URLs, mit denen wir unser lokal ausgeführtes Skript aufrufen können. Wir können die bereitgestellten Informationen in einen Webbrowser eingeben und sollten die gleichen Ergebnisse erhalten wie bei der obigen Abfrage über localhost.
Hinweis: Es wird empfohlen, https-URLs zu verwenden, um alle zwischen den Diensten ausgetauschten Anmeldeinformationen zu schützen.
Wir werden die ngrok-Instanz während dieses Beispiels laufen lassen. Wenn Sie bereit sind, es zu beenden, drücken Sie einfach "Strg+c" im Terminal und es wird ngrok geschlossen.
Vonage-Einrichtung
Mit den von ngrok bereitgestellten URLs können wir die von Vonage bereitgestellte SMS-Nummer aktualisieren.
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
Erweitern Sie im Vonage Dashboard den Menüpunkt Numbers, um "Ihre Nummern" freizulegen.
Vonage Dashboard
Klicken Sie dann auf die Schaltfläche Einstellungen, um die URL des eingehenden Webhooks für SMS zu bearbeiten.
Vonage Hooks
Komponist
Der Einfachheit halber werden wir Composer verwenden, um einige Pakete zu installieren und uns das Leben mit seinem Autoloader und der Abhängigkeitsverwaltung zu erleichtern.
Wir gehen davon aus, dass Composer bereits installiert ist global auf unserem System installiert ist, so dass wir ihn bei Bedarf problemlos nutzen können und es einfacher ist, ihn auf dem neuesten Stand zu halten.
Im Projektordner müssen wir Composer starten, damit wir einige Pakete/Abhängigkeiten einbinden können. Navigieren Sie also per CLI zum Projektverzeichnis und geben Sie den folgenden Befehl ein.
Die neuesten Versionen von Composer führen nun einen schrittweisen Prozess durch, um Ihnen bei der Einrichtung eines Projekts zu helfen. Folgen Sie den Aufforderungen und füllen Sie die Felder wie gewünscht aus. Bitte verwenden Sie die Pakete im folgenden Abschnitt, die erforderlich sein sollten.
Erforderliche Abhängigkeiten
Um den Assistenten aus dem vorigen Abschnitt zu vervollständigen oder manuell eine composer.json Datei zu erstellen, schließen Sie die folgenden Abhängigkeiten für dieses Beispiel ein:
vlucas/phpdotenv - speichert Anmeldeinformationen in der superglobalen Datei $_ENV
schlank/slim - leichtes Microframework, das den Umgang mit HTTP-Aufrufen und Rückrufen erleichtert
slim/psr7 - erleichtert die HTTP-Interoperabilität zwischen Bibliotheken
guzzlehttp/guzzle - für die Bearbeitung von HTTP-Aufrufen anstelle von cUrl
Composer-Installation
Nachdem alle Abhängigkeiten zu Composer hinzugefügt wurden, können wir sie nun mit dem folgenden Befehl in der CLI installieren.
Berechtigungsnachweise erstellen
Die Zugangsdaten für diese Beispielanwendung werden in einer ENV-Datei gespeichert und von phpdotenv geparst.
ENV-Einrichtung
Das Erstellen einer .env Datei ermöglicht es uns, Anmeldeinformationen zu speichern, die wir für die Verbindung mit dem externen Dienst benötigen. In diesem Fall wird es die IBM Watson API sein. Fügen Sie den folgenden Inhalt in die neu erstellte Datei namens .env im Stammverzeichnis des Projekts:
HINWEIS: Die URL kann sich ändern, stellen Sie also sicher, dass sie der von IBM Cloud bereitgestellten URL entspricht. Tauschen Sie die Werte mit denen aus, die Sie vom IBM Watson-Service erhalten haben.
PHPDotEnv Verwendung
In der index.php fügen wir Code hinzu, um den Composer Autoloader und das PHP-Paket phpdotenv zu nutzen, um den Inhalt der Datei .env Datei in die superglobale Datei $_ENV einzubinden.
<?php
require('vendor/autoload.php');
Dotenv\Dotenv::create(__DIR__)->load();
HINWEIS: Gemäß der Konvention lädt der obige Code die Datei .env Datei aus dem aktuellen Verzeichnis. Wenn ein anderes Verzeichnis gewünscht wird, ist eine zusätzliche Methode zum Öffnen der Datei erforderlich. (nicht gezeigt)
Guzzle für HTTP
Wir werden auch Guzzle einbinden, ein PHP-Paket für die Bearbeitung von HTTP-Anfragen anstelle von cURL, für alle Aufrufe des externen IBM Watson-Dienstes. Wir importieren es mit einer use Anweisung nach der obigen Anforderung von Composer importiert.
use GuzzleHttp\Client; Slim PHP verwenden
Um slim in unserem Beispiel-Callback-Skript einzurichten, importieren wir mit einer use Anweisung importieren, unmittelbar nach dem Composer autoload require. Dann rufen wir die create()-Funktion von Slim auf, um eine Slim-App zu erstellen, und rufen am Ende der Datei die Funktion app->run auf, um die Dinge in Gang zu setzen.
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Factory\AppFactory;
$app = AppFactory::create();
//... call to Dotenv
$app->run();
Einen HTTP-Aufruf abfangen
Der Wunsch ist es, die Slim-Funktionalität zu verwenden, um HTTP-Anfragen abzufangen und mit JSON zu antworten. Wir werden die PSR-konformen Request- und Response-Schnittstellen einbeziehen, um mit der HTTP-Kommunikation interoperabel zu bleiben, daher importieren wir sie mit use Anweisungen zusammen mit dem oben gezeigten Slim-Import.
Nach dem Einfügen der Umgebungsvariablen und der Erstellung der Slim-App fügen wir einen any() Methodenaufruf hinzu, um das HTTP-Endpunkt-Routing zu handhaben, wie folgt.
$app->any('/message[/]', function (Request $request, Response $response) {
// {{body of the app here}}
});
Beachten Sie, dass wir die Möglichkeit bieten, einen any HTTP-Aufrufe an dieses Skript. (GET, POST, PUT, DELETE, etc.) Ich mache das absichtlich und erlaube mir, bei Bedarf gültige HTTP-Statuscodes zurückzugeben. Das wird das erste sein, was wir in den Körper der anonymen Funktion oben einfügen.
Wenn eine andere Art von HTTP-Anfrage als eine POST-Anfrage eingeht, sollte das Skript mit einem Statuscode 405 antworten. Wir wollen nur POST-Anfragen.
if ($request->getMethod() != 'POST') {
return $response->withStatus(405);
}
Parsen der Anfrage JSON
Der Vonage-Dienst sendet eine JSON-Nutzlast in der POST-Anfrage. Wir werden das JSON in ein Objekt parsen, das wir in zukünftigen Aufrufen des IBM Watson Sentiment Service verwenden können.
$body = json_decode($request->getBody());
HTTP-Aufruf an Watson
Unter Verwendung des $body Objekts stellen wir eine Anfrage an IBM Watson, um die Stimmung der Nachricht zu analysieren. Wir tun dies mit einer neuen Guzzle-Client-Instanz, um die Anfrage zu bearbeiten.
Hinweis: An dieser Stelle kommt $_ENV, das aus der Datei
.envDatei erstellt wurde, ins Spiel kommt.
$client = new Client();
$result = $client->request(
'GET',
$_ENV['TONE_ANALYZER_URL'] . '?version=2017-09-21&text=' . urlencode($body->text),
['auth' => ['apikey', $_ENV['TONE_ANALYZER_IAM_APIKEY']]]
);
Rückgabe einer Antwort
Und schließlich verwenden wir den von IBM zurückgegebenen Content-Type oder legen ihn manuell fest. Anschließend geben wir die vom Dienst bereitgestellte Stimmungsanalyse als neues JSON-Objekt zurück.
$contentType = $result->getHeaderLine('Content-Type') ?: 'application/json';
$response = $response->withHeader('Content-Type', $contentType);
return $response->withBody($result->getBody());
Schlussfolgerung
Wie in diesem Beispiel gezeigt, ist es einfach, eine Stimmungsanalyse in Applications einzubauen, um die Kommunikationsabsicht zu klären. Das Verständnis der Stimmung dessen, was andere teilen, kann ein großer Faktor bei der Reduzierung von Politik und Stress in unserem täglichen Leben sein. Immer mehr Dienste beginnen, diese Funktionalität in ihre Anwendungen einzubauen, und ich hoffe, Sie finden dieses Beispiel für die Verwendung mit SMS nützlich.
Ein vollständiges Codebeispiel finden Sie unter https://github.com/nexmo-community/sms-ibm-sentiment-php.
