Google Cloud Natural Language liest unstrukturierten Text und sagt Ihnen, was darin steckt. Es misst die Gesamtstimmung eines Dokuments, extrahiert die erwähnten Personen, Orte und Organisationen als Entitäten und klassifiziert den Text in eine Inhalts-Taxonomie. Die sgcWebSockets Enterprise Edition liefert einen typisierten Natural-Language-gRPC-Client auf Basis von TsgcGRPCClient, sodass Sie den Dienst language.googleapis.com direkt aus Delphi und C++Builder erreichen können, ohne externe gRPC-Laufzeitumgebung.
Wie es funktioniert
Die Natural-Language-API wird als gRPC-Dienst bereitgestellt, und gRPC sind Protocol-Buffers-Nachrichten, die über HTTP/2 gerahmt werden. sgcWebSockets liefert bereits einen vollständigen HTTP/2-Stack, sodass der gRPC-Client auf einem TsgcHTTP2Client-Transport sitzt, der auf language.googleapis.com:443 über TLS verweist. TsgcGRPCClient übernimmt das Framing, den Content-Type und die Status-Trailer; die typisierte Unit sgcGRPC_Google_Language übernimmt die Request- und Response-Nachrichten.
Jeder Request umschließt ein Dokument: den zu analysierenden Text plus dessen Typ (Klartext oder HTML) und einen optionalen Sprachhinweis. Die typisierten Klassen serialisieren dieses Dokument in genau das Protocol-Buffers-Wire-Layout, das die API erwartet, und parsen die Antwort zurück in lesebereite Eigenschaften. Sie stellen niemals ein Protobuf von Hand zusammen oder jagen Feldnummern hinterher.
Die Authentifizierung verwendet ein Google-Cloud-Dienstkonto. Ein selbstsigniertes Dienstkonto-JWT wird gegen ein Bearer-Token ausgetauscht, das dann bei jedem Aufruf als gRPC-Metadaten gesendet wird. Da dieses Token audience-gebunden ist, wird das JWT gegen den Natural-Language-Endpunkt ausgestellt, damit es von language.googleapis.com akzeptiert wird.
Den Client einrichten
Erstellen Sie einen HTTP/2-Transport für den Natural-Language-Host, hängen Sie dann einen TsgcGRPCClient daran an und wählen Sie den binären Protobuf-Content-Type. Das aus dem Dienstkonto bezogene Bearer-Token wird den DefaultMetadata als standardmäßiger authorization-Header hinzugefügt, sodass es bei jedem Request mitgesendet wird.
uses
sgcHTTP2_Client, sgcGRPC_Client, sgcGRPC_Types, sgcGRPC_Google_Language;
var
HTTP2: TsgcHTTP2Client;
GRPC: TsgcGRPCClient;
begin
HTTP2 := TsgcHTTP2Client.Create(nil);
HTTP2.Host := 'language.googleapis.com';
HTTP2.Port := 443;
HTTP2.TLS := True;
GRPC := TsgcGRPCClient.Create(nil);
GRPC.Client := HTTP2;
GRPC.ChannelOptions.ContentType := grpcProto;
GRPC.ChannelOptions.Compression := grpcNoCompression;
// bearer token from the service-account JWT exchange
GRPC.DefaultMetadata.Add('authorization', 'Bearer ' + Token);
HTTP2.Active := True;
end;
Stimmung analysieren
Die Stimmungsanalyse meldet einen emotionalen Score von -1.0 (negativ) bis +1.0 (positiv) und eine Magnitude, die widerspiegelt, wie viel emotionalen Gehalt das Dokument trägt. Erstellen Sie einen TsgcGRPCLanguageAnalyzeSentimentRequest, setzen Sie den Dokumentinhalt, rufen Sie die Methode AnalyzeSentiment des LanguageService auf und laden Sie dann die Antwort-Bytes in eine typisierte Response.
var
oRequest: TsgcGRPCLanguageAnalyzeSentimentRequest;
oResponse: TsgcGRPCResponse;
oResult: TsgcGRPCLanguageAnalyzeSentimentResponse;
begin
oRequest := TsgcGRPCLanguageAnalyzeSentimentRequest.Create;
try
oRequest.Document.DocType := 1; // PLAIN_TEXT
oRequest.Document.Content := 'sgcWebSockets makes gRPC in Delphi easy.';
oResponse := GRPC.Call('google.cloud.language.v1.LanguageService',
'AnalyzeSentiment', oRequest.ToBytes);
if oResponse.StatusCode = grpcOK then
begin
oResult := TsgcGRPCLanguageAnalyzeSentimentResponse.Create;
try
oResult.LoadFromBytes(oResponse.Data);
ShowMessage('Score: ' + FloatToStr(oResult.DocumentSentiment.Score) +
' Magnitude: ' + FloatToStr(oResult.DocumentSentiment.Magnitude));
finally
oResult.Free;
end;
end;
finally
oRequest.Free;
end;
end;
Entitäten extrahieren
Die Entitätsanalyse gibt die wesentlichen Dinge zurück, über die ein Dokument spricht. Die Response ist eine Liste von Entitäten, jede mit einem Name, einem EntityType (Person, Ort, Organisation und so weiter) und einem Salience-Wert, der einstuft, wie zentral die Entität für den Text ist. Die typisierte Response gibt Ihnen eine indizierte Liste zum Durchlaufen.
var
oRequest: TsgcGRPCLanguageAnalyzeEntitiesRequest;
oResponse: TsgcGRPCResponse;
oResult: TsgcGRPCLanguageAnalyzeEntitiesResponse;
i: Integer;
begin
oRequest := TsgcGRPCLanguageAnalyzeEntitiesRequest.Create;
try
oRequest.Document.DocType := 1; // PLAIN_TEXT
oRequest.Document.Content := Memo1.Text;
oResponse := GRPC.Call('google.cloud.language.v1.LanguageService',
'AnalyzeEntities', oRequest.ToBytes);
oResult := TsgcGRPCLanguageAnalyzeEntitiesResponse.Create;
try
oResult.LoadFromBytes(oResponse.Data);
for i := 0 to oResult.EntityCount - 1 do
Memo2.Lines.Add(oResult.Entity(i).Name + ' (type ' +
IntToStr(oResult.Entity(i).EntityType) + ', salience ' +
FloatToStr(oResult.Entity(i).Salience) + ')');
finally
oResult.Free;
end;
finally
oRequest.Free;
end;
end;
Text klassifizieren
Die Inhaltsklassifizierung sortiert ein Dokument in Googles Kategorie-Taxonomie ein und gibt eine Liste von Kategorien zurück, jede mit einem Name wie /Computers & Electronics/Software und einem Confidence-Wert. Das Muster ist dasselbe: Erstellen Sie einen TsgcGRPCLanguageClassifyTextRequest, rufen Sie ClassifyText auf und lesen Sie dann die Kategorien aus TsgcGRPCLanguageClassifyTextResponse mit CategoryCount und Category(i). Die Klassifizierung benötigt eine angemessene Textmenge, um gut zu funktionieren, geben Sie ihr also mehr als einen einzelnen Satz.
Verfügbarkeit
Der Natural-Language-gRPC-Client ist Teil der sgcWebSockets Enterprise Edition und läuft unter Windows, macOS, Linux, iOS und Android, in Delphi und C++Builder. Ein vollständiges, sofort lauffähiges Beispiel befindet sich in Demos\21.GRPC\14.Natural_Language, und der zugrunde liegende Client ist auf der gRPC-Client-Produktseite dokumentiert.
Fragen oder Feedback? Nehmen Sie Kontakt auf. Sie erhalten eine Antwort von den Leuten, die den Code geschrieben haben.
