Google Cloud Natural Language lit le texte non structuré et vous dit ce qu'il contient. Il mesure le sentiment global d'un document, extrait les personnes, lieux et organisations qu'il mentionne en tant qu'entités, et classe le texte dans une taxonomie de contenu. L'édition Enterprise de sgcWebSockets fournit un client gRPC Natural Language typé au-dessus de TsgcGRPCClient, ce qui vous permet d'atteindre le service language.googleapis.com directement depuis Delphi et C++Builder sans aucun runtime gRPC externe.
Comment ça fonctionne
L'API Natural Language est exposée en tant que service gRPC, et gRPC, ce sont des messages Protocol Buffers encadrés sur HTTP/2. sgcWebSockets fournit déjà une pile HTTP/2 complète, donc le client gRPC repose sur un transport TsgcHTTP2Client pointé vers language.googleapis.com:443 via TLS. TsgcGRPCClient gère l'encadrement, le type de contenu et les trailers de statut ; l'unité typée sgcGRPC_Google_Language gère les messages de requête et de réponse.
Chaque requête enveloppe un document : le texte à analyser plus son type (texte brut ou HTML) et un indice de langue optionnel. Les classes typées sérialisent ce document dans la disposition exacte des Protocol Buffers que l'API attend, et analysent la réponse en propriétés prêtes à lire. Vous n'assemblez jamais un protobuf à la main ni ne chassez les numéros de champ.
L'authentification utilise un compte de service Google Cloud. Un JWT auto-signé de compte de service est échangé contre un jeton bearer, qui est ensuite envoyé en tant que métadonnées gRPC sur chaque appel. Comme ce jeton est lié à une audience, le JWT est généré pour l'endpoint Natural Language afin qu'il soit accepté par language.googleapis.com.
Configurer le client
Créez un transport HTTP/2 pour l'hôte Natural Language, puis attachez-y un TsgcGRPCClient et sélectionnez le type de contenu protobuf binaire. Le jeton bearer obtenu du compte de service est ajouté à DefaultMetadata en tant qu'en-tête authorization standard, afin qu'il voyage sur chaque requête.
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;
Analyser le sentiment
L'analyse de sentiment rapporte un score émotionnel de -1.0 (négatif) à +1.0 (positif) et une magnitude qui reflète la quantité de contenu émotionnel que porte le document. Construisez un TsgcGRPCLanguageAnalyzeSentimentRequest, définissez le contenu du document, appelez la méthode AnalyzeSentiment sur le LanguageService, puis chargez les octets de réponse dans une réponse typée.
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;
Extraire les entités
L'analyse d'entités renvoie les éléments saillants dont parle un document. La réponse est une liste d'entités, chacune avec un Name, un EntityType (personne, lieu, organisation, etc.) et un score de Salience qui classe à quel point l'entité est centrale au texte. La réponse typée vous donne une liste indexée à parcourir.
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;
Classer le texte
La classification de contenu range un document dans la taxonomie de catégories de Google, renvoyant une liste de catégories chacune avec un Name tel que /Computers & Electronics/Software et une valeur de Confidence. Le schéma est le même : construisez un TsgcGRPCLanguageClassifyTextRequest, appelez ClassifyText, puis lisez les catégories depuis TsgcGRPCLanguageClassifyTextResponse avec CategoryCount et Category(i). La classification a besoin d'une quantité de texte raisonnable pour bien fonctionner, donc fournissez-lui plus qu'une seule phrase.
Disponibilité
Le client gRPC Natural Language fait partie de l'édition Enterprise de sgcWebSockets et fonctionne sous Windows, macOS, Linux, iOS et Android, sur Delphi et C++Builder. Un exemple complet et prêt à l'emploi se trouve dans Demos\21.GRPC\14.Natural_Language, et le client sous-jacent est documenté sur la page produit du client gRPC.
Des questions ou des commentaires ? Contactez-nous. Vous recevrez une réponse des personnes qui ont écrit le code.
