Google Cloud Natural Language odczytuje nieustrukturyzowany tekst i informuje Cię, co się w nim znajduje. Mierzy ogólny sentyment dokumentu, wyodrębnia wspominane w nim osoby, miejsca i organizacje jako encje oraz klasyfikuje tekst do taksonomii treści. Edycja Enterprise sgcWebSockets dostarcza typowanego klienta gRPC Natural Language zbudowanego na TsgcGRPCClient, więc możesz dotrzeć do usługi language.googleapis.com bezpośrednio z Delphi i C++Builder bez żadnego zewnętrznego środowiska uruchomieniowego gRPC.
Jak to działa
API Natural Language jest udostępnione jako usługa gRPC, a gRPC to komunikaty Protocol Buffers opakowane w HTTP/2. sgcWebSockets dostarcza już kompletny stos HTTP/2, więc klient gRPC działa na transporcie TsgcHTTP2Client wskazującym na language.googleapis.com:443 przez TLS. TsgcGRPCClient obsługuje opakowywanie, typ zawartości i trailery statusu; typowany moduł sgcGRPC_Google_Language obsługuje komunikaty żądań i odpowiedzi.
Każde żądanie opakowuje dokument: tekst do analizy plus jego typ (zwykły tekst lub HTML) oraz opcjonalną podpowiedź dotyczącą języka. Typowane klasy serializują ten dokument do dokładnego układu Protocol Buffers, którego oczekuje API, i parsują odpowiedź z powrotem do gotowych do odczytu właściwości. Nigdy nie składasz ręcznie protobufa ani nie szukasz numerów pól.
Uwierzytelnianie korzysta z konta usługi Google Cloud. Samodzielnie podpisany JWT konta usługi jest wymieniany na token bearer, który jest następnie wysyłany jako metadane gRPC przy każdym wywołaniu. Ponieważ ten token jest powiązany z odbiorcą, JWT jest tworzony dla punktu końcowego Natural Language, aby został zaakceptowany przez language.googleapis.com.
Konfigurowanie klienta
Utwórz transport HTTP/2 dla hosta Natural Language, a następnie dołącz do niego TsgcGRPCClient i wybierz binarny typ zawartości protobuf. Token bearer uzyskany z konta usługi jest dodawany do DefaultMetadata jako standardowy nagłówek authorization, aby towarzyszył każdemu żądaniu.
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;
Analiza sentymentu
Analiza sentymentu raportuje emocjonalny wynik od -1.0 (negatywny) do +1.0 (pozytywny) oraz wielkość, która odzwierciedla, ile treści emocjonalnej niesie dokument. Zbuduj TsgcGRPCLanguageAnalyzeSentimentRequest, ustaw zawartość dokumentu, wywołaj metodę AnalyzeSentiment na LanguageService, a następnie wczytaj bajty odpowiedzi do typowanej odpowiedzi.
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;
Wyodrębnianie encji
Analiza encji zwraca istotne rzeczy, o których mówi dokument. Odpowiedź to lista encji, każda z Name, EntityType (osoba, lokalizacja, organizacja itd.) oraz oceną Salience, która klasyfikuje, jak centralna jest dana encja dla tekstu. Typowana odpowiedź daje Ci indeksowaną listę do przejścia.
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;
Klasyfikacja tekstu
Klasyfikacja treści sortuje dokument do taksonomii kategorii Google, zwracając listę kategorii, każda z Name takim jak /Computers & Electronics/Software oraz wartością Confidence. Wzorzec jest taki sam: zbuduj TsgcGRPCLanguageClassifyTextRequest, wywołaj ClassifyText, a następnie odczytaj kategorie z TsgcGRPCLanguageClassifyTextResponse za pomocą CategoryCount i Category(i). Klasyfikacja potrzebuje rozsądnej ilości tekstu, aby działać dobrze, więc podaj jej więcej niż jedno zdanie.
Dostępność
Klient gRPC Natural Language jest częścią edycji Enterprise sgcWebSockets i działa na Windows, macOS, Linux, iOS oraz Android, w Delphi i C++Builder. Kompletny, gotowy do uruchomienia przykład znajduje się w Demos\21.GRPC\14.Natural_Language, a bazowy klient jest udokumentowany na stronie produktu gRPC Client.
Pytania lub uwagi? Skontaktuj się z nami. Otrzymasz odpowiedź od osób, które napisały ten kod.
