Hızlı başlangıç: Metin Analizi istemci kitaplığını kullanmaQuickstart: Use the Text Analytics client library

Metin Analizi istemci kitaplığı 'nı kullanmaya başlamak için bu makaleyi kullanın.Use this article to get started with the Text Analytics client library. Paketi yüklemek için bu adımları izleyin ve araştırma metni için örnek kodu deneyin.Follow these steps to install the package and try out the example code for mining text.

Şunları yapmak için Metin Analizi istemci kitaplığını kullanın:Use the Text Analytics client library to perform:

  • Yaklaşım analiziSentiment analysis
  • Dil algılamaLanguage detection
  • Varlık tanımaEntity recognition
  • Anahtar ifade ayıklamaKey phrase extraction

Önemli

  • Metin Analizi API'si en son kararlı sürümü 3.0 .The latest stable version of the Text Analytics API is 3.0.
    • Yalnızca kullandığınız sürüme ait yönergeleri izlediğinizden emin olun.Be sure to only follow the instructions for the version you are using.
  • Bu makaledeki kod, basitlik nedenlerle zaman uyumlu Yöntemler ve güvenli olmayan kimlik bilgileri depolaması kullanır.The code in this article uses synchronous methods and un-secured credentials storage for simplicity reasons. Üretim senaryolarında, performans ve ölçeklenebilirlik için toplu zaman uyumsuz yöntemleri kullanmanızı öneririz.For production scenarios, we recommend using the batched asynchronous methods for performance and scalability. Aşağıdaki başvuru belgelerine bakın.See the reference documentation below.

ÖnkoşullarPrerequisites

  • Azure aboneliği- ücretsiz olarak bir tane oluşturunAzure subscription - Create one for free
  • Visual STUDIO IDEThe Visual Studio IDE
  • Azure aboneliğiniz olduktan sonra, anahtarınızı ve uç noktanızı almak için Azure Portal bir metin analizi kaynağı oluşturun metin analizi bir kaynak oluşturun.Once you have your Azure subscription, create a Text Analytics resource in the Azure portal to get your key and endpoint. Dağıtıldıktan sonra Kaynağa Git ' etıklayın.After it deploys, click Go to resource.
    • Uygulamanızı Metin Analizi API'si bağlamak için oluşturduğunuz kaynaktaki anahtar ve uç nokta gerekir.You will need the key and endpoint from the resource you create to connect your application to the Text Analytics API. Anahtarınızı ve uç noktanızı daha sonra hızlı başlangıçta aşağıdaki koda yapıştırabilirsiniz.You'll paste your key and endpoint into the code below later in the quickstart.
    • F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.You can use the free pricing tier (F0) to try the service, and upgrade later to a paid tier for production.

AyarlanıyorSetting up

Yeni bir .NET Core uygulaması oluşturmaCreate a new .NET Core application

Visual Studio IDE 'yi kullanarak yeni bir .NET Core konsol uygulaması oluşturun.Using the Visual Studio IDE, create a new .NET Core console app. Bu, tek bir C# kaynak dosyası içeren bir "Merhaba Dünya" projesi oluşturur: program.cs.This will create a "Hello World" project with a single C# source file: program.cs.

Çözüm Gezgini çözüme sağ tıklayıp NuGet Paketlerini Yönet' i seçerek istemci kitaplığını yüklemelisiniz.Install the client library by right-clicking on the solution in the Solution Explorer and selecting Manage NuGet Packages. Açılan paket yöneticisinde, bul ve ara ' yı seçin Azure.AI.TextAnalytics .In the package manager that opens select Browse and search for Azure.AI.TextAnalytics. Dahil etme prerelase kutusunu işaretleyin, sürüm ' ü seçin 5.1.0-beta.1 ve Installardından ' i seçin.Check the include prerelase box, select version 5.1.0-beta.1, and then Install. Paket Yöneticisi konsolunuda kullanabilirsiniz.You can also use the Package Manager Console.

Program.cs dosyasını açın ve aşağıdaki using yönergeleri ekleyin:Open the program.cs file and add the following using directives:

using Azure;
using System;
using System.Globalization;
using Azure.AI.TextAnalytics;

Uygulamanın Program sınıfında, kaynağınızın anahtarı ve uç noktası için değişkenler oluşturun.In the application's Program class, create variables for your resource's key and endpoint.

Önemli

Azure portalına gidin.Go to the Azure portal. Önkoşullar bölümünde oluşturduğunuz metin analizi kaynak başarıyla dağıtılırsa, sonraki adımlaraltında Kaynağa Git düğmesine tıklayın.If the Text Analytics resource you created in the Prerequisites section deployed successfully, click the Go to Resource button under Next Steps. Anahtar ve uç noktanızı kaynağın anahtar ve uç nokta sayfasında, kaynak yönetimialtında bulabilirsiniz.You can find your key and endpoint in the resource's key and endpoint page, under resource management.

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin.Remember to remove the key from your code when you're done, and never post it publicly. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün.For production, consider using a secure way of storing and accessing your credentials. Örneğin, Azure Anahtar Kasası.For example, Azure key vault.

private static readonly AzureKeyCredential credentials = new AzureKeyCredential("<replace-with-your-text-analytics-key-here>");
private static readonly Uri endpoint = new Uri("<replace-with-your-text-analytics-endpoint-here>");

Uygulamanın Main yöntemini değiştirin.Replace the application's Main method. Burada, daha sonra çağrılan yöntemleri tanımlayacaksınız.You will define the methods called here later.

static void Main(string[] args)
{
    var client = new TextAnalyticsClient(endpoint, credentials);
    // You will implement these methods later in the quickstart.
    SentimentAnalysisExample(client);
    SentimentAnalysisWithOpinionMiningExample(client);
    LanguageDetectionExample(client);
    EntityRecognitionExample(client);
    EntityLinkingExample(client);
    RecognizePIIExample(client);
    KeyPhraseExtractionExample(client);

    Console.Write("Press any key to exit.");
    Console.ReadKey();
}

Nesne modeliObject model

Metin Analizi istemcisi, TextAnalyticsClient anahtarınızı kullanarak Azure 'da kimlik doğrulayan bir nesnedir ve metni tek dizeler veya toplu işlem olarak kabul etmek için işlevler sağlar.The Text Analytics client is a TextAnalyticsClient object that authenticates to Azure using your key, and provides functions to accept text as single strings or as a batch. API 'ye eşzamanlı olarak veya zaman uyumsuz olarak metin gönderebilirsiniz.You can send text to the API synchronously, or asynchronously. Yanıt nesnesi, göndereceğiniz her belge için analiz bilgilerini içerecektir.The response object will contain the analysis information for each document you send.

Hizmetin sürümünü kullanıyorsanız 3.x , TextAnalyticsClientOptions istemciyi çeşitli varsayılan ayarlarla başlatmak için isteğe bağlı bir örnek kullanabilirsiniz (örneğin, varsayılan dil veya ülke/bölge ipucu).If you're using version 3.x of the service, you can use an optional TextAnalyticsClientOptions instance to initialize the client with various default settings (for example default language or country/region hint). Ayrıca Azure Active Directory belirteci kullanarak kimlik doğrulaması yapabilirsiniz.You can also authenticate using an Azure Active Directory token.

Kod örnekleriCode examples

İstemcinin kimliğini doğrulamaAuthenticate the client

Daha önce gelen ana yönteminizin bitiş noktanız ve kimlik bilgilerinizle yeni bir istemci nesnesi oluşturduğundan emin olun.Make sure your main method from earlier creates a new client object with your endpoint and credentials.

var client = new TextAnalyticsClient(endpoint, credentials);

Yaklaşım analiziSentiment analysis

SentimentAnalysisExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun ve AnalyzeSentiment() işlevini çağırın.Create a new function called SentimentAnalysisExample() that takes the client that you created earlier, and call its AnalyzeSentiment() function. Döndürülen Response<DocumentSentiment> nesne, tüm giriş belgesi için yaklaşım etiketini ve Puanını, başarılı olursa her tümce için de bir yaklaşım analizini içerir.The returned Response<DocumentSentiment> object will contain the sentiment label and score of the entire input document, as well as a sentiment analysis for each sentence if successful. Bir hata oluşursa, bir oluşturur RequestFailedException .If there was an error, it will throw a RequestFailedException.

static void SentimentAnalysisExample(TextAnalyticsClient client)
{
    string inputText = "I had the best day of my life. I wish you were there with me.";
    DocumentSentiment documentSentiment = client.AnalyzeSentiment(inputText);
    Console.WriteLine($"Document sentiment: {documentSentiment.Sentiment}\n");

    foreach (var sentence in documentSentiment.Sentences)
    {
        Console.WriteLine($"\tText: \"{sentence.Text}\"");
        Console.WriteLine($"\tSentence sentiment: {sentence.Sentiment}");
        Console.WriteLine($"\tPositive score: {sentence.ConfidenceScores.Positive:0.00}");
        Console.WriteLine($"\tNegative score: {sentence.ConfidenceScores.Negative:0.00}");
        Console.WriteLine($"\tNeutral score: {sentence.ConfidenceScores.Neutral:0.00}\n");
    }
}

ÇıkışOutput

Document sentiment: Positive

        Text: "I had the best day of my life."
        Sentence sentiment: Positive
        Positive score: 1.00
        Negative score: 0.00
        Neutral score: 0.00

        Text: "I wish you were there with me."
        Sentence sentiment: Neutral
        Positive score: 0.21
        Negative score: 0.02
        Neutral score: 0.77

SentimentAnalysisWithOpinionMiningExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun ve AnalyzeSentimentBatch() işlevini AdditionalSentimentAnalyses.OpinionMining seçeneğiyle çağırın.Create a new function called SentimentAnalysisWithOpinionMiningExample() that takes the client that you created earlier, and call its AnalyzeSentimentBatch() function with AdditionalSentimentAnalyses.OpinionMining option. Döndürülen AnalyzeSentimentResultCollection nesne, öğesinin temsil ettiği koleksiyonunu içerir AnalyzeSentimentResult Response<DocumentSentiment> .The returned AnalyzeSentimentResultCollection object will contain the collection of AnalyzeSentimentResult in which represents Response<DocumentSentiment>. Ve arasındaki fark SentimentAnalysis() , SentimentAnalysisWithOpinionMiningExample() MinedOpinion Çözümlenmiş bir en boy ve ilgili görüşlere sahip olan her bir tümcede yer alacak.The difference between SentimentAnalysis() and SentimentAnalysisWithOpinionMiningExample() is that the latter will contain MinedOpinion in each sentence, which shows an analyzed aspect and the related opinion(s). Bir hata oluşursa, bir oluşturur RequestFailedException .If there was an error, it will throw a RequestFailedException.

static void SentimentAnalysisWithOpinionMiningExample(TextAnalyticsClient client)
{
    var documents = new List<string>
    {
        "The food and service were unacceptable, but the concierge were nice.",
        "The rooms were beautiful. The AC was good and quiet.",
        "The breakfast was good, but the toilet was smelly.",
        "Loved this hotel - good breakfast - nice shuttle service - clean rooms.",
        "I had a great unobstructed view of the Microsoft campus.",
        "Nice rooms but bathrooms were old and the toilet was dirty when we arrived.",
        "We changed rooms as the toilet smelled."
    };

    AnalyzeSentimentResultCollection reviews = client.AnalyzeSentimentBatch(documents, options: new AnalyzeSentimentOptions()
    {
        AdditionalSentimentAnalyses = AdditionalSentimentAnalyses.OpinionMining
    });

    foreach (AnalyzeSentimentResult review in reviews)
    {
        Console.WriteLine($"Document sentiment: {review.DocumentSentiment.Sentiment}\n");
        foreach (SentenceSentiment sentence in review.DocumentSentiment.Sentences)
        {
            Console.WriteLine($"\tText: \"{sentence.Text}\"");
            Console.WriteLine($"\tSentence sentiment: {sentence.Sentiment}");
            Console.WriteLine($"\tPositive score: {sentence.ConfidenceScores.Positive:0.00}");
            Console.WriteLine($"\tNegative score: {sentence.ConfidenceScores.Negative:0.00}");
            Console.WriteLine($"\tNeutral score: {sentence.ConfidenceScores.Neutral:0.00}\n");

            foreach (MinedOpinion minedOpinion in sentence.MinedOpinions)
            {
                Console.WriteLine($"\tAspect: {minedOpinion.Aspect.Text}, Value: {minedOpinion.Aspect.Sentiment}");
                foreach (OpinionSentiment opinion in minedOpinion.Opinions)
                {
                    Console.WriteLine($"\t\tRelated Opinion: {opinion.Text}, Value: {opinion.Sentiment}");
                }
            }
        }
        Console.WriteLine($"\n");
    }
}

ÇıkışOutput

Document sentiment: Positive

        Text: "The food and service were unacceptable, but the concierge were nice."
        Sentence sentiment: Positive
        Positive score: 0.84
        Negative score: 0.16
        Neutral score: 0.00

        Aspect: food, Value: Negative
                Related Opinion: unacceptable, Value: Negative
        Aspect: service, Value: Negative
                Related Opinion: unacceptable, Value: Negative
        Aspect: concierge, Value: Positive
                Related Opinion: nice, Value: Positive


Document sentiment: Positive

        Text: "The rooms were beautiful."
        Sentence sentiment: Positive
        Positive score: 1.00
        Negative score: 0.00
        Neutral score: 0.00

        Aspect: rooms, Value: Positive
                Related Opinion: beautiful, Value: Positive
        Text: "The AC was good and quiet."
        Sentence sentiment: Positive
        Positive score: 1.00
        Negative score: 0.00
        Neutral score: 0.00

        Aspect: AC, Value: Positive
                Related Opinion: good, Value: Positive
                Related Opinion: quiet, Value: Positive


Document sentiment: Negative

        Text: "The breakfast was good, but the toilet was smelly."
        Sentence sentiment: Negative
        Positive score: 0.01
        Negative score: 0.99
        Neutral score: 0.00

        Aspect: breakfast, Value: Positive
                Related Opinion: good, Value: Positive
        Aspect: toilet, Value: Negative
                Related Opinion: smelly, Value: Negative


Document sentiment: Positive

        Text: "Loved this hotel - good breakfast - nice shuttle service - clean rooms."
        Sentence sentiment: Positive
        Positive score: 1.00
        Negative score: 0.00
        Neutral score: 0.00

        Aspect: hotel, Value: Positive
                Related Opinion: good, Value: Positive
        Aspect: breakfast, Value: Positive
                Related Opinion: nice, Value: Positive
        Aspect: shuttle service, Value: Positive
                Related Opinion: loved, Value: Positive
        Aspect: rooms, Value: Positive
                Related Opinion: good, Value: Positive
                Related Opinion: nice, Value: Positive
                Related Opinion: clean, Value: Positive
                Related Opinion: loved, Value: Positive


Document sentiment: Positive

        Text: "I had a great unobstructed view of the Microsoft campus."
        Sentence sentiment: Positive
        Positive score: 1.00
        Negative score: 0.00
        Neutral score: 0.00

        Aspect: view, Value: Positive
                Related Opinion: great, Value: Positive
                Related Opinion: unobstructed, Value: Positive


Document sentiment: Negative

        Text: "Nice rooms but bathrooms were old and the toilet was dirty when we arrived."
        Sentence sentiment: Negative
        Positive score: 0.00
        Negative score: 1.00
        Neutral score: 0.00

        Aspect: rooms, Value: Positive
                Related Opinion: nice, Value: Positive
        Aspect: bathrooms, Value: Negative
                Related Opinion: old, Value: Negative
        Aspect: toilet, Value: Negative
                Related Opinion: dirty, Value: Negative


Document sentiment: Neutral

        Text: "We changed rooms as the toilet smelled."
        Sentence sentiment: Neutral
        Positive score: 0.01
        Negative score: 0.03
        Neutral score: 0.96

        Aspect: rooms, Value: Negative
                Related Opinion: smelled, Value: Negative
        Aspect: toilet, Value: Negative
                Related Opinion: smelled, Value: Negative

Dil algılamaLanguage detection

LanguageDetectionExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun ve DetectLanguage() işlevini çağırın.Create a new function called LanguageDetectionExample() that takes the client that you created earlier, and call its DetectLanguage() function. Döndürülen Response<DetectedLanguage> nesne, adı ve ISO-6391 koduyla birlikte algılanan dili içerir.The returned Response<DetectedLanguage> object will contain the detected language along with its name and ISO-6391 code. Bir hata oluşursa, bir oluşturur RequestFailedException .If there was an error, it will throw a RequestFailedException.

İpucu

Bazı durumlarda, girişi temel alarak dilleri ayırt etmek zor olabilir.In some cases it may be hard to disambiguate languages based on the input. countryHintParametresini 2 harfli bir ülke/bölge kodu belirtmek için kullanabilirsiniz.You can use the countryHint parameter to specify a 2-letter country/region code. Varsayılan olarak, API varsayılan Countryipucu olarak "US" kullanıyor, bu davranışı kaldırmak için bu değeri boş dize olarak ayarlayarak bu parametreyi sıfırlayabilirsiniz countryHint = "" .By default the API is using the "US" as the default countryHint, to remove this behavior you can reset this parameter by setting this value to empty string countryHint = "". Farklı bir varsayılan ayarlamak için, özelliği ayarlayın TextAnalyticsClientOptions.DefaultCountryHint ve istemcinin başlatılması sırasında geçirin.To set a different default, set the TextAnalyticsClientOptions.DefaultCountryHint property and pass it during the client's initialization.

static void LanguageDetectionExample(TextAnalyticsClient client)
{
    DetectedLanguage detectedLanguage = client.DetectLanguage("Ce document est rédigé en Français.");
    Console.WriteLine("Language:");
    Console.WriteLine($"\t{detectedLanguage.Name},\tISO-6391: {detectedLanguage.Iso6391Name}\n");
}

ÇıkışOutput

Language:
        French, ISO-6391: fr

Adlandırılmış varlık tanıma (NER)Named Entity Recognition (NER)

EntityRecognitionExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun, RecognizeEntities() işlevini çağırın ve sonuçlar arasında yineleme yapın.Create a new function called EntityRecognitionExample() that takes the client that you created earlier, call its RecognizeEntities() function and iterate through the results. Döndürülen Response<CategorizedEntityCollection> nesne, algılanan varlıkların koleksiyonunu içerir CategorizedEntity .The returned Response<CategorizedEntityCollection> object will contain the collection of detected entities CategorizedEntity. Bir hata oluşursa, bir oluşturur RequestFailedException .If there was an error, it will throw a RequestFailedException.

static void EntityRecognitionExample(TextAnalyticsClient client)
{
    var response = client.RecognizeEntities("I had a wonderful trip to Seattle last week.");
    Console.WriteLine("Named Entities:");
    foreach (var entity in response.Value)
    {
        Console.WriteLine($"\tText: {entity.Text},\tCategory: {entity.Category},\tSub-Category: {entity.SubCategory}");
        Console.WriteLine($"\t\tScore: {entity.ConfidenceScore:F2},\tLength: {entity.Length},\tOffset: {entity.Offset}\n");
    }
}

ÇıkışOutput

Named Entities:
        Text: trip,     Category: Event,        Sub-Category:
                Score: 0.61,    Length: 4,      Offset: 18

        Text: Seattle,  Category: Location,     Sub-Category: GPE
                Score: 0.82,    Length: 7,      Offset: 26

        Text: last week,        Category: DateTime,     Sub-Category: DateRange
                Score: 0.80,    Length: 9,      Offset: 34

Varlık bağlamaEntity linking

EntityLinkingExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun, RecognizeLinkedEntities() işlevini çağırın ve sonuçlar arasında yineleme yapın.Create a new function called EntityLinkingExample() that takes the client that you created earlier, call its RecognizeLinkedEntities() function and iterate through the results. Döndürülen Response<LinkedEntityCollection> nesne, algılanan varlıkların koleksiyonunu içerir LinkedEntity .The returned Response<LinkedEntityCollection> object will contain the collection of detected entities LinkedEntity. Bir hata oluşursa, bir oluşturur RequestFailedException .If there was an error, it will throw a RequestFailedException. Bağlantılı varlıklar benzersiz olarak tanımlandıklarından, aynı varlığın oluşumları LinkedEntity nesne listesi olarak bir nesne altında gruplandırılır LinkedEntityMatch .Since linked entities are uniquely identified, occurrences of the same entity are grouped under a LinkedEntity object as a list of LinkedEntityMatch objects.

static void EntityLinkingExample(TextAnalyticsClient client)
{
    var response = client.RecognizeLinkedEntities(
        "Microsoft was founded by Bill Gates and Paul Allen on April 4, 1975, " +
        "to develop and sell BASIC interpreters for the Altair 8800. " +
        "During his career at Microsoft, Gates held the positions of chairman, " +
        "chief executive officer, president and chief software architect, " +
        "while also being the largest individual shareholder until May 2014.");
    Console.WriteLine("Linked Entities:");
    foreach (var entity in response.Value)
    {
        Console.WriteLine($"\tName: {entity.Name},\tID: {entity.DataSourceEntityId},\tURL: {entity.Url}\tData Source: {entity.DataSource}");
        Console.WriteLine("\tMatches:");
        foreach (var match in entity.Matches)
        {
            Console.WriteLine($"\t\tText: {match.Text}");
            Console.WriteLine($"\t\tScore: {match.ConfidenceScore:F2}");
            Console.WriteLine($"\t\tLength: {match.Length}");
            Console.WriteLine($"\t\tOffset: {match.Offset}\n");
        }
    }
}

ÇıkışOutput

Linked Entities:
        Name: Microsoft,        ID: Microsoft,  URL: https://en.wikipedia.org/wiki/Microsoft    Data Source: Wikipedia
        Matches:
                Text: Microsoft
                Score: 0.55
                Length: 9
                Offset: 0

                Text: Microsoft
                Score: 0.55
                Length: 9
                Offset: 150

        Name: Bill Gates,       ID: Bill Gates, URL: https://en.wikipedia.org/wiki/Bill_Gates   Data Source: Wikipedia
        Matches:
                Text: Bill Gates
                Score: 0.63
                Length: 10
                Offset: 25

                Text: Gates
                Score: 0.63
                Length: 5
                Offset: 161

        Name: Paul Allen,       ID: Paul Allen, URL: https://en.wikipedia.org/wiki/Paul_Allen   Data Source: Wikipedia
        Matches:
                Text: Paul Allen
                Score: 0.60
                Length: 10
                Offset: 40

        Name: April 4,  ID: April 4,    URL: https://en.wikipedia.org/wiki/April_4      Data Source: Wikipedia
        Matches:
                Text: April 4
                Score: 0.32
                Length: 7
                Offset: 54

        Name: BASIC,    ID: BASIC,      URL: https://en.wikipedia.org/wiki/BASIC        Data Source: Wikipedia
        Matches:
                Text: BASIC
                Score: 0.33
                Length: 5
                Offset: 89

        Name: Altair 8800,      ID: Altair 8800,        URL: https://en.wikipedia.org/wiki/Altair_8800  Data Source: Wikipedia
        Matches:
                Text: Altair 8800
                Score: 0.88
                Length: 11
                Offset: 116

Kişisel olarak tanımlanabilir bilgi tanımaPersonally Identifiable Information recognition

RecognizePIIExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun, RecognizePiiEntities() işlevini çağırın ve sonuçlar arasında yineleme yapın.Create a new function called RecognizePIIExample() that takes the client that you created earlier, call its RecognizePiiEntities() function and iterate through the results. Döndürülen PiiEntityCollection PII varlıklarının listesini temsil eder.The returned PiiEntityCollection represents the list of detected PII entities. Bir hata oluşursa, bir oluşturur RequestFailedException .If there was an error, it will throw a RequestFailedException.

static void RecognizePIIExample(TextAnalyticsClient client)
{
    string document = "A developer with SSN 859-98-0987 whose phone number is 800-102-1100 is building tools with our APIs.";

    PiiEntityCollection entities = client.RecognizePiiEntities(document).Value;

    Console.WriteLine($"Redacted Text: {entities.RedactedText}");
    if (entities.Count > 0)
    {
        Console.WriteLine($"Recognized {entities.Count} PII entit{(entities.Count > 1 ? "ies" : "y")}:");
        foreach (PiiEntity entity in entities)
        {
            Console.WriteLine($"Text: {entity.Text}, Category: {entity.Category}, SubCategory: {entity.SubCategory}, Confidence score: {entity.ConfidenceScore}");
        }
    }
    else
    {
        Console.WriteLine("No entities were found.");
    }
}

ÇıkışOutput

Redacted Text: A developer with SSN *********** whose phone number is ************ is building tools with our APIs.
Recognized 2 PII entities:
Text: 859-98-0987, Category: U.S. Social Security Number (SSN), SubCategory: , Confidence score: 0.65
Text: 800-102-1100, Category: Phone Number, SubCategory: , Confidence score: 0.8

Anahtar ifade ayıklamaKey phrase extraction

KeyPhraseExtractionExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun ve ExtractKeyPhrases() işlevini çağırın.Create a new function called KeyPhraseExtractionExample() that takes the client that you created earlier, and call its ExtractKeyPhrases() function. Döndürülen <Response<KeyPhraseCollection> nesne, algılanan anahtar tümceciklerin listesini içerir.The returned <Response<KeyPhraseCollection> object will contain the list of detected key phrases. Bir hata oluşursa, bir oluşturur RequestFailedException .If there was an error, it will throw a RequestFailedException.

static void KeyPhraseExtractionExample(TextAnalyticsClient client)
{
    var response = client.ExtractKeyPhrases("My cat might need to see a veterinarian.");

    // Printing key phrases
    Console.WriteLine("Key phrases:");

    foreach (string keyphrase in response.Value)
    {
        Console.WriteLine($"\t{keyphrase}");
    }
}

ÇıkışOutput

Key phrases:
    cat
    veterinarian

Önemli

  • Metin Analizi API'si en son kararlı sürümü 3.0 .The latest stable version of the Text Analytics API is 3.0.
  • Bu makaledeki kod, basitlik nedenlerle zaman uyumlu Yöntemler ve güvenli olmayan kimlik bilgileri depolaması kullanır.The code in this article uses synchronous methods and un-secured credentials storage for simplicity reasons. Üretim senaryolarında, performans ve ölçeklenebilirlik için toplu zaman uyumsuz yöntemleri kullanmanızı öneririz.For production scenarios, we recommend using the batched asynchronous methods for performance and scalability. Aşağıdaki başvuru belgelerine bakın.See the reference documentation below.

ÖnkoşullarPrerequisites

  • Azure aboneliği- ücretsiz olarak bir tane oluşturunAzure subscription - Create one for free
  • Java Development Kit (JDK) sürüm 8 veya üzeriJava Development Kit (JDK) with version 8 or above
  • Azure aboneliğiniz olduktan sonra, anahtarınızı ve uç noktanızı almak için Azure Portal bir metin analizi kaynağı oluşturun metin analizi bir kaynak oluşturun.Once you have your Azure subscription, create a Text Analytics resource in the Azure portal to get your key and endpoint. Dağıtıldıktan sonra Kaynağa Git ' etıklayın.After it deploys, click Go to resource.
    • Uygulamanızı Metin Analizi API'si bağlamak için oluşturduğunuz kaynaktaki anahtar ve uç nokta gerekir.You will need the key and endpoint from the resource you create to connect your application to the Text Analytics API. Anahtarınızı ve uç noktanızı daha sonra hızlı başlangıçta aşağıdaki koda yapıştırabilirsiniz.You'll paste your key and endpoint into the code below later in the quickstart.
    • F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.You can use the free pricing tier (F0) to try the service, and upgrade later to a paid tier for production.

AyarlanıyorSetting up

İstemci kitaplığını eklemeAdd the client library

Tercih ettiğiniz IDE veya geliştirme ortamınızda Maven projesi oluşturun.Create a Maven project in your preferred IDE or development environment. Sonra projenizin pom.xml dosyasına aşağıdaki bağımlılığı ekleyin.Then add the following dependency to your project's pom.xml file. Diğer derleme araçlarının uygulama sözdizimini çevrimiçi olarak bulabilirsiniz.You can find the implementation syntax for other build tools online.

<dependencies>
     <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-ai-textanalytics</artifactId>
        <version>5.1.0-beta.1</version>
    </dependency>
</dependencies>

Adlı bir Java dosyası oluşturun TextAnalyticsSamples.java .Create a Java file named TextAnalyticsSamples.java. Dosyasını açın ve aşağıdaki import deyimlerini ekleyin:Open the file and add the following import statements:

import com.azure.core.credential.AzureKeyCredential;
import com.azure.ai.textanalytics.models.*;
import com.azure.ai.textanalytics.TextAnalyticsClientBuilder;
import com.azure.ai.textanalytics.TextAnalyticsClient;

Java dosyasında, yeni bir sınıf ekleyin ve aşağıda gösterildiği gibi Azure kaynağınızın anahtarını ve uç noktasını ekleyin.In the java file, add a new class and add your Azure resource's key and endpoint as shown below.

Önemli

Azure portalına gidin.Go to the Azure portal. Önkoşullar bölümünde oluşturduğunuz metin analizi kaynak başarıyla dağıtılırsa, sonraki adımlaraltında Kaynağa Git düğmesine tıklayın.If the Text Analytics resource you created in the Prerequisites section deployed successfully, click the Go to Resource button under Next Steps. Anahtar ve uç noktanızı kaynağın anahtar ve uç nokta sayfasında, kaynak yönetimialtında bulabilirsiniz.You can find your key and endpoint in the resource's key and endpoint page, under resource management.

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin.Remember to remove the key from your code when you're done, and never post it publicly. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün.For production, consider using a secure way of storing and accessing your credentials. Örneğin, Azure Anahtar Kasası.For example, Azure key vault.

public class TextAnalyticsSamples {
    private static String KEY = "<replace-with-your-text-analytics-key-here>";
    private static String ENDPOINT = "<replace-with-your-text-analytics-endpoint-here>";
}

Aşağıdaki Main yöntemini sınıfına ekleyin.Add the following main method to the class. Burada, daha sonra çağrılan yöntemleri tanımlayacaksınız.You will define the methods called here later.

public static void main(String[] args) {
    //You will create these methods later in the quickstart.
    TextAnalyticsClient client = authenticateClient(KEY, ENDPOINT);

    sentimentAnalysisWithOpinionMiningExample(client)
    detectLanguageExample(client);
    recognizeEntitiesExample(client);
    recognizeLinkedEntitiesExample(client);
    recognizePiiEntitiesExample(client);
    extractKeyPhrasesExample(client);
}

Nesne modeliObject model

Metin Analizi istemcisi, TextAnalyticsClient anahtarınızı kullanarak Azure 'da kimlik doğrulayan bir nesnedir ve metni tek dizeler veya toplu işlem olarak kabul etmek için işlevler sağlar.The Text Analytics client is a TextAnalyticsClient object that authenticates to Azure using your key, and provides functions to accept text as single strings or as a batch. API 'ye eşzamanlı olarak veya zaman uyumsuz olarak metin gönderebilirsiniz.You can send text to the API synchronously, or asynchronously. Yanıt nesnesi, göndereceğiniz her belge için analiz bilgilerini içerecektir.The response object will contain the analysis information for each document you send.

Kod örnekleriCode examples

İstemcinin kimliğini doğrulamaAuthenticate the client

TextAnalyticsClientMetin analizi kaynağınız için anahtar ve uç nokta ile nesneyi örneklendirilecek bir yöntem oluşturun.Create a method to instantiate the TextAnalyticsClient object with the key and endpoint for your Text Analytics resource. Bu örnek, API 'nin 3,0 ve 3,1 sürümleri için aynıdır.This example is the same for versions 3.0 and 3.1 of the API.

static TextAnalyticsClient authenticateClient(String key, String endpoint) {
    return new TextAnalyticsClientBuilder()
        .credential(new AzureKeyCredential(key))
        .endpoint(endpoint)
        .buildClient();
}

Programınızın main() yönteminde, istemcisini başlatmak için kimlik doğrulama yöntemini çağırın.In your program's main() method, call the authentication method to instantiate the client.

Yaklaşım analiziSentiment analysis

Not

Şu sürümde 3.1 :In version 3.1:

  • Yaklaşım Analizi, isteğe bağlı bayrak olan görüşleriniz araştırma analizini içerir.Sentiment Analysis includes Opinion Mining analysis which is optional flag.
  • Görüşleriniz madenciliği, en boy ve görüş düzeyi yaklaşımı içerir.Opinion Mining contains aspect and opinion level sentiment.

Yaklaşım analizini bir yaklaşım analizi yapmak için, daha önce oluşturduğunuz istemciyi alan adlı adlı yeni bir işlev oluşturun sentimentAnalysisWithOpinionMiningExample() ve analyzeSentiment() işlevini seçenek nesnesi ile çağırın AnalyzeSentimentOptions .To perform sentiment analysis with opinion mining, create a new function called sentimentAnalysisWithOpinionMiningExample() that takes the client that you created earlier, and call its analyzeSentiment() function with setting option object AnalyzeSentimentOptions. Döndürülen AnalyzeSentimentResult nesne documentSentiment sentenceSentiments , başarılı olursa, veya değilse errorMessage .The returned AnalyzeSentimentResult object will contain documentSentiment and sentenceSentiments if successful, or an errorMessage if not.

static void sentimentAnalysisWithOpinionMiningExample(TextAnalyticsClient client)
{
    // The Document that needs be analyzed.
    String document = "Bad atmosphere. Not close to plenty of restaurants, hotels, and transit! Staff are not friendly and helpful.";

    System.out.printf("Document = %s%n", document);

    AnalyzeSentimentOptions options = new AnalyzeSentimentOptions().setIncludeOpinionMining(true);
    final DocumentSentiment documentSentiment = client.analyzeSentiment(document, "en", options);
    SentimentConfidenceScores scores = documentSentiment.getConfidenceScores();
    System.out.printf(
            "\tRecognized document sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n",
            documentSentiment.getSentiment(), scores.getPositive(), scores.getNeutral(), scores.getNegative());

    documentSentiment.getSentences().forEach(sentenceSentiment -> {
        SentimentConfidenceScores sentenceScores = sentenceSentiment.getConfidenceScores();
        System.out.printf("\t\tSentence sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n",
                sentenceSentiment.getSentiment(), sentenceScores.getPositive(), sentenceScores.getNeutral(), sentenceScores.getNegative());
        sentenceSentiment.getMinedOpinions().forEach(minedOpinions -> {
            AspectSentiment aspectSentiment = minedOpinions.getAspect();
            System.out.printf("\t\t\tAspect sentiment: %s, aspect text: %s%n", aspectSentiment.getSentiment(),
                    aspectSentiment.getText());
            for (OpinionSentiment opinionSentiment : minedOpinions.getOpinions()) {
                System.out.printf("\t\t\t\t'%s' opinion sentiment because of \"%s\". Is the opinion negated: %s.%n",
                        opinionSentiment.getSentiment(), opinionSentiment.getText(), opinionSentiment.isNegated());
            }
        });
    });
}

ÇıkışOutput

Text = Bad atmosphere. Not close to plenty of restaurants, hotels, and transit! Staff are not friendly and helpful.
    Recognized document sentiment: negative, positive score: 0.010000, neutral score: 0.140000, negative score: 0.850000.
        Sentence sentiment: negative, positive score: 0.000000, neutral score: 0.000000, negative score: 1.000000.
            Aspect sentiment: negative, aspect text: atmosphere
                'negative' opinion sentiment because of "bad". Is the opinion negated: false.
        Sentence sentiment: negative, positive score: 0.020000, neutral score: 0.440000, negative score: 0.540000.
        Sentence sentiment: negative, positive score: 0.000000, neutral score: 0.000000, negative score: 1.000000.
            Aspect sentiment: negative, aspect text: Staff
                'negative' opinion sentiment because of "friendly". Is the opinion negated: true.
                'negative' opinion sentiment because of "helpful". Is the opinion negated: true.

Process finished with exit code 0

Dil algılamaLanguage detection

detectLanguageExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun ve detectLanguage() işlevini çağırın.Create a new function called detectLanguageExample() that takes the client that you created earlier, and call its detectLanguage() function. Döndürülen DetectLanguageResult nesne, algılanan birincil dili, başarılı olursa algılanan diğer dillerin bir listesini ya da olmadığını içerir errorMessage .The returned DetectLanguageResult object will contain a primary language detected, a list of other languages detected if successful, or an errorMessage if not. Bu örnek, API 'nin 3,0 ve 3,1 sürümleri için aynıdır.This example is the same for versions 3.0 and 3.1 of the API.

İpucu

Bazı durumlarda, girişi temel alarak dilleri ayırt etmek zor olabilir.In some cases it may be hard to disambiguate languages based on the input. countryHintParametresini 2 harfli bir ülke kodu belirtmek için kullanabilirsiniz.You can use the countryHint parameter to specify a 2-letter country code. Varsayılan olarak, API varsayılan Countryipucu olarak "US" kullanıyor, bu davranışı kaldırmak için bu değeri boş dize olarak ayarlayarak bu parametreyi sıfırlayabilirsiniz countryHint = "" .By default the API is using the "US" as the default countryHint, to remove this behavior you can reset this parameter by setting this value to empty string countryHint = "". Farklı bir varsayılan ayarlamak için, özelliği ayarlayın TextAnalyticsClientOptions.DefaultCountryHint ve istemcinin başlatılması sırasında geçirin.To set a different default, set the TextAnalyticsClientOptions.DefaultCountryHint property and pass it during the client's initialization.

static void detectLanguageExample(TextAnalyticsClient client)
{
    // The text that need be analyzed.
    String text = "Ce document est rédigé en Français.";

    DetectedLanguage detectedLanguage = client.detectLanguage(text);
    System.out.printf("Detected primary language: %s, ISO 6391 name: %s, score: %.2f.%n",
        detectedLanguage.getName(),
        detectedLanguage.getIso6391Name(),
        detectedLanguage.getConfidenceScore());
}

ÇıkışOutput

Detected primary language: French, ISO 6391 name: fr, score: 1.00.

Adlandırılmış varlık tanıma (NER)Named Entity recognition (NER)

Not

Şu sürümde 3.1 :In version 3.1:

  • NER kişisel bilgileri algılamak için ayrı yöntemler içerir.NER includes separate methods for detecting personal information.
  • Varlık bağlama, NER 'den ayrı bir istek.Entity linking is a separate request than NER.

recognizeEntitiesExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun ve recognizeEntities() işlevini çağırın.Create a new function called recognizeEntitiesExample() that takes the client that you created earlier, and call its recognizeEntities() function. Döndürülen CategorizedEntityCollection nesne CategorizedEntity , başarılı olursa bir liste veya değilse bir listesi içerir errorMessage .The returned CategorizedEntityCollection object will contain a list of CategorizedEntity if successful, or an errorMessage if not.

static void recognizeEntitiesExample(TextAnalyticsClient client)
{
    // The text that need be analyzed.
    String text = "I had a wonderful trip to Seattle last week.";

    for (CategorizedEntity entity : client.recognizeEntities(text)) {
        System.out.printf(
            "Recognized entity: %s, entity category: %s, entity sub-category: %s, score: %s, offset: %s, length: %s.%n",
            entity.getText(),
            entity.getCategory(),
            entity.getSubcategory(),
            entity.getConfidenceScore(),
            entity.getOffset(),
            entity.getLength());
    }
}

ÇıkışOutput

Recognized entity: trip, entity category: Event, entity sub-category: null, score: 0.61, offset: 8, length: 4.
Recognized entity: Seattle, entity category: Location, entity sub-category: GPE, score: 0.82, offset: 16, length: 7.
Recognized entity: last week, entity category: DateTime, entity sub-category: DateRange, score: 0.8, offset: 24, length: 9.

Varlık bağlamaEntity linking

recognizeLinkedEntitiesExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun ve recognizeLinkedEntities() işlevini çağırın.Create a new function called recognizeLinkedEntitiesExample() that takes the client that you created earlier, and call its recognizeLinkedEntities() function. Döndürülen LinkedEntityCollection nesne LinkedEntity , başarılı olursa bir liste veya değilse bir listesi içerir errorMessage .The returned LinkedEntityCollection object will contain a list of LinkedEntity if successful, or an errorMessage if not. Bağlantılı varlıklar benzersiz olarak tanımlandıklarından, aynı varlığın oluşumları LinkedEntity nesne listesi olarak bir nesne altında gruplandırılır LinkedEntityMatch .Since linked entities are uniquely identified, occurrences of the same entity are grouped under a LinkedEntity object as a list of LinkedEntityMatch objects.

static void recognizeLinkedEntitiesExample(TextAnalyticsClient client)
{
    // The text that need be analyzed.
    String text = "Microsoft was founded by Bill Gates and Paul Allen on April 4, 1975, " +
        "to develop and sell BASIC interpreters for the Altair 8800. " +
        "During his career at Microsoft, Gates held the positions of chairman, " +
        "chief executive officer, president and chief software architect, " +
        "while also being the largest individual shareholder until May 2014.";

    System.out.printf("Linked Entities:%n");
    for (LinkedEntity linkedEntity : client.recognizeLinkedEntities(text)) {
        System.out.printf("Name: %s, ID: %s, URL: %s, Data Source: %s.%n",
            linkedEntity.getName(),
            linkedEntity.getDataSourceEntityId(),
            linkedEntity.getUrl(),
            linkedEntity.getDataSource());
        System.out.printf("Matches:%n");
        for (LinkedEntityMatch linkedEntityMatch : linkedEntity.getMatches()) {
            System.out.printf("Text: %s, Score: %.2f, Offset: %s, Length: %s%n",
            linkedEntityMatch.getText(),
            linkedEntityMatch.getConfidenceScore(),
            linkedEntityMatch.getOffset(),
            linkedEntityMatch.getLength());
        }
    }
}

ÇıkışOutput

Linked Entities:
Name: Microsoft, ID: Microsoft, URL: https://en.wikipedia.org/wiki/Microsoft, Data Source: Wikipedia.
Matches:
Text: Microsoft, Score: 0.55, Offset: 9, Length: 0
Text: Microsoft, Score: 0.55, Offset: 9, Length: 150
Name: Bill Gates, ID: Bill Gates, URL: https://en.wikipedia.org/wiki/Bill_Gates, Data Source: Wikipedia.
Matches:
Text: Bill Gates, Score: 0.63, Offset: 10, Length: 25
Text: Gates, Score: 0.63, Offset: 5, Length: 161
Name: Paul Allen, ID: Paul Allen, URL: https://en.wikipedia.org/wiki/Paul_Allen, Data Source: Wikipedia.
Matches:
Text: Paul Allen, Score: 0.60, Offset: 10, Length: 40
Name: April 4, ID: April 4, URL: https://en.wikipedia.org/wiki/April_4, Data Source: Wikipedia.
Matches:
Text: April 4, Score: 0.32, Offset: 7, Length: 54
Name: BASIC, ID: BASIC, URL: https://en.wikipedia.org/wiki/BASIC, Data Source: Wikipedia.
Matches:
Text: BASIC, Score: 0.33, Offset: 5, Length: 89
Name: Altair 8800, ID: Altair 8800, URL: https://en.wikipedia.org/wiki/Altair_8800, Data Source: Wikipedia.
Matches:
Text: Altair 8800, Score: 0.88, Offset: 11, Length: 116

Kişisel olarak tanımlanabilir bilgi tanımaPersonally Identifiable Information Recognition

recognizePiiEntitiesExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun ve recognizePiiEntities() işlevini çağırın.Create a new function called recognizePiiEntitiesExample() that takes the client that you created earlier, and call its recognizePiiEntities() function. Döndürülen PiiEntityCollection nesne PiiEntity , başarılı olursa bir liste veya değilse bir listesi içerir errorMessage .The returned PiiEntityCollection object will contain a list of PiiEntity if successful, or an errorMessage if not. Aynı zamanda, tüm tanımlanabilir varlıkların değiştirildiği metin giriş metninin bulunduğu Redaksiyonu yapılmış metni de içerecektir ***** .It will also contain the redacted text, which consists of the input text with all identifiable entities replaced with *****.

static void recognizePiiEntitiesExample(TextAnalyticsClient client)
{
    // The text that need be analyzed.
    String document = "My SSN is 859-98-0987";
    PiiEntityCollection piiEntityCollection = client.recognizePiiEntities(document);
    System.out.printf("Redacted Text: %s%n", piiEntityCollection.getRedactedText());
    piiEntityCollection.forEach(entity -> System.out.printf(
        "Recognized Personally Identifiable Information entity: %s, entity category: %s, entity subcategory: %s,"
            + " confidence score: %f.%n",
        entity.getText(), entity.getCategory(), entity.getSubcategory(), entity.getConfidenceScore()));
}

ÇıkışOutput

Redacted Text: My SSN is ***********
Recognized Personally Identifiable Information entity: 859-98-0987, entity category: U.S. Social Security Number (SSN), entity subcategory: null, confidence score: 0.650000.

Anahtar ifade ayıklamaKey phrase extraction

extractKeyPhrasesExample()Daha önce oluşturduğunuz istemciyi alan adlı yeni bir işlev oluşturun ve extractKeyPhrases() işlevini çağırın.Create a new function called extractKeyPhrasesExample() that takes the client that you created earlier, and call its extractKeyPhrases() function. Döndürülen ExtractKeyPhraseResult nesne, başarılı olursa anahtar tümceciklerin bir listesini içerir ya da errorMessage böyle değildir.The returned ExtractKeyPhraseResult object will contain a list of key phrases if successful, or an errorMessage if not. Bu örnek, API 'nin sürüm 3,0 ve 3,1 ' de aynıdır.This example is the same for version 3.0 and 3.1 of the API.

static void extractKeyPhrasesExample(TextAnalyticsClient client)
{
    // The text that need be analyzed.
    String text = "My cat might need to see a veterinarian.";

    System.out.printf("Recognized phrases: %n");
    for (String keyPhrase : client.extractKeyPhrases(text)) {
        System.out.printf("%s%n", keyPhrase);
    }
}

ÇıkışOutput

Recognized phrases: 
cat
veterinarian

Önemli

  • Metin Analizi API'si en son kararlı sürümü 3.0 .The latest stable version of the Text Analytics API is 3.0.
    • Yalnızca kullandığınız sürüme ait yönergeleri izlediğinizden emin olun.Be sure to only follow the instructions for the version you are using.
  • Bu makaledeki kod, basitlik nedenlerle zaman uyumlu Yöntemler ve güvenli olmayan kimlik bilgileri depolaması kullanır.The code in this article uses synchronous methods and un-secured credentials storage for simplicity reasons. Üretim senaryolarında, performans ve ölçeklenebilirlik için toplu zaman uyumsuz yöntemleri kullanmanızı öneririz.For production scenarios, we recommend using the batched asynchronous methods for performance and scalability. Aşağıdaki başvuru belgelerine bakın.See the reference documentation below.
  • Metin Analizi istemci kitaplığı 'nın bu sürümünü tarayıcınızdade çalıştırabilirsiniz.You can also run this version of the Text Analytics client library in your browser.

ÖnkoşullarPrerequisites

  • Azure aboneliği- ücretsiz olarak bir tane oluşturunAzure subscription - Create one for free
  • Node.jsgeçerli sürümü.The current version of Node.js.
  • Azure aboneliğiniz olduktan sonra, anahtarınızı ve uç noktanızı almak için Azure Portal bir metin analizi kaynağı oluşturun metin analizi bir kaynak oluşturun.Once you have your Azure subscription, create a Text Analytics resource in the Azure portal to get your key and endpoint. Dağıtıldıktan sonra Kaynağa Git ' etıklayın.After it deploys, click Go to resource.
    • Uygulamanızı Metin Analizi API'si bağlamak için oluşturduğunuz kaynaktaki anahtar ve uç nokta gerekir.You will need the key and endpoint from the resource you create to connect your application to the Text Analytics API. Anahtarınızı ve uç noktanızı daha sonra hızlı başlangıçta aşağıdaki koda yapıştırabilirsiniz.You'll paste your key and endpoint into the code below later in the quickstart.
    • F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.You can use the free pricing tier (F0) to try the service, and upgrade later to a paid tier for production.

AyarlanıyorSetting up

Yeni bir Node.js uygulaması oluşturmaCreate a new Node.js application

Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu uygulamaya gidin.In a console window (such as cmd, PowerShell, or Bash), create a new directory for your app, and navigate to it.

mkdir myapp 

cd myapp

npm initBir dosya ile bir düğüm uygulaması oluşturmak için komutunu çalıştırın package.json .Run the npm init command to create a node application with a package.json file.

npm init

İstemci kitaplığını yüklerInstall the client library

@azure/ai-text-analyticsNPM paketlerini yüklerken:Install the @azure/ai-text-analytics NPM packages:

npm install --save @azure/ai-text-analytics@5.1.0-beta.1

İpucu

Tüm hızlı başlangıç kodu dosyasını aynı anda görüntülemek mi istiyorsunuz?Want to view the whole quickstart code file at once? Bu hızlı başlangıçta kod örneklerini içeren GitHub 'dabulabilirsiniz.You can find it on GitHub, which contains the code examples in this quickstart.

Uygulamanızın package.json dosyası bağımlılıklarla güncelleştirilir.Your app's package.json file will be updated with the dependencies. Adlı bir dosya oluşturun index.js ve aşağıdakileri ekleyin:Create a file named index.js and add the following:

"use strict";

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");

Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun.Create variables for your resource's Azure endpoint and key.

Önemli

Azure portalına gidin.Go to the Azure portal. Önkoşullar bölümünde oluşturduğunuz metin analizi kaynak başarıyla dağıtılırsa, sonraki adımlaraltında Kaynağa Git düğmesine tıklayın.If the Text Analytics resource you created in the Prerequisites section deployed successfully, click the Go to Resource button under Next Steps. Anahtar ve uç noktanızı kaynağın anahtar ve uç nokta sayfasında, kaynak yönetimialtında bulabilirsiniz.You can find your key and endpoint in the resource's key and endpoint page, under resource management.

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin.Remember to remove the key from your code when you're done, and never post it publicly. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün.For production, consider using a secure way of storing and accessing your credentials. Örneğin, Azure Anahtar Kasası.For example, Azure key vault.

const key = '<paste-your-text-analytics-key-here>';
const endpoint = '<paste-your-text-analytics-endpoint-here>';

Nesne modeliObject model

Metin Analizi istemcisi, TextAnalyticsClient anahtarınızı kullanarak Azure 'da kimlik doğrulayan bir nesnedir.The Text Analytics client is a TextAnalyticsClient object that authenticates to Azure using your key. İstemci, tek bir dize veya bir toplu iş olarak metin çözümlemek için çeşitli yöntemler sağlar.The client provides several methods for analyzing text, as a single string, or a batch.

Metin, documents dictionary id text language kullanılan yöntemine bağlı olarak, ve özniteliklerinin bir birleşimini içeren nesneler olan bir listesi olarak API 'ye gönderilir.Text is sent to the API as a list of documents, which are dictionary objects containing a combination of id, text, and language attributes depending on the method used. textÖzniteliği, kaynak olarak çözümlenecek metni depolar language ve id herhangi bir değer olabilir.The text attribute stores the text to be analyzed in the origin language, and the id can be any value.

Yanıt nesnesi, her belge için analiz bilgilerini içeren bir listesidir.The response object is a list containing the analysis information for each document.

Kod örnekleriCode examples

İstemci Kimlik DoğrulamasıClient Authentication

TextAnalyticsClientAnahtarınızla ve uç noktanızla parametreler olarak yeni bir nesne oluşturun.Create a new TextAnalyticsClient object with your key and endpoint as parameters.

const textAnalyticsClient = new TextAnalyticsClient(endpoint,  new AzureKeyCredential(key));

Yaklaşım analiziSentiment analysis

Çözümlemek istediğiniz belgeyi içeren bir dize dizisi oluşturun.Create an array of strings containing the document you want to analyze. İstemcinin analyzeSentiment() metodunu çağırın ve döndürülen SentimentBatchResult nesneyi alın.Call the client's analyzeSentiment() method and get the returned SentimentBatchResult object. Sonuçlar listesinde yineleme yapın ve her belgenin KIMLIĞINI, belge düzeyi yaklaşımını güven puanlarına göre yazdırın.Iterate through the list of results, and print each document's ID, document level sentiment with confidence scores. Sonuç, her belge için kenar boşlukları, uzunluk ve güvenirlik puanlarıyla birlikte tümce düzeyinde yaklaşım içerir.For each document, result contains sentence level sentiment along with offsets, length, and confidence scores.

async function sentimentAnalysis(client){

    const sentimentInput = [
        "I had the best day of my life. I wish you were there with me."
    ];
    const sentimentResult = await client.analyzeSentiment(sentimentInput);

    sentimentResult.forEach(document => {
        console.log(`ID: ${document.id}`);
        console.log(`\tDocument Sentiment: ${document.sentiment}`);
        console.log(`\tDocument Scores:`);
        console.log(`\t\tPositive: ${document.confidenceScores.positive.toFixed(2)} \tNegative: ${document.confidenceScores.negative.toFixed(2)} \tNeutral: ${document.confidenceScores.neutral.toFixed(2)}`);
        console.log(`\tSentences Sentiment(${document.sentences.length}):`);
        document.sentences.forEach(sentence => {
            console.log(`\t\tSentence sentiment: ${sentence.sentiment}`)
            console.log(`\t\tSentences Scores:`);
            console.log(`\t\tPositive: ${sentence.confidenceScores.positive.toFixed(2)} \tNegative: ${sentence.confidenceScores.negative.toFixed(2)} \tNeutral: ${sentence.confidenceScores.neutral.toFixed(2)}`);
        });
    });
}
sentimentAnalysis(textAnalyticsClient)

Kodunuzu node index.js konsol pencerenizde çalıştırın.Run your code with node index.js in your console window.

ÇıkışOutput

ID: 0
        Document Sentiment: positive
        Document Scores:
                Positive: 1.00  Negative: 0.00  Neutral: 0.00
        Sentences Sentiment(2):
                Sentence sentiment: positive
                Sentences Scores:
                Positive: 1.00  Negative: 0.00  Neutral: 0.00
                Sentence sentiment: neutral
                Sentences Scores:
                Positive: 0.21  Negative: 0.02  Neutral: 0.77

Fikrinizi inceleme ile yaklaşım analizi yapmak için, çözümlemek istediğiniz belgeyi içeren bir dize dizisi oluşturun.In order to do sentiment analysis with opinion mining, create an array of strings containing the document you want to analyze. analyzeSentiment()Seçenek bayrağı ekleyerek istemcinin metodunu çağırın includeOpinionMining: true ve döndürülen SentimentBatchResult nesneyi alın.Call the client's analyzeSentiment() method with adding option flag includeOpinionMining: true and get the returned SentimentBatchResult object. Sonuçlar listesinde yineleme yapın ve her belgenin KIMLIĞINI, belge düzeyi yaklaşımını güven puanlarına göre yazdırın.Iterate through the list of results, and print each document's ID, document level sentiment with confidence scores. Her belge için, sonuç yalnızca yukarıdaki gibi tümce düzeyinde yaklaşım içermez, ayrıca en önemli ve önemli yaklaşım da vardır.For each document, result contains not only sentence level sentiment as above, but also aspect and opinion level sentiment.

async function sentimentAnalysisWithOpinionMining(client){

    const sentimentInput = [
        {
            text: "The food and service were unacceptable, but the concierge were nice",
            id: "0",
            language: "en"
        }
    ];
    const sentimentResult = await client.analyzeSentiment(sentimentInput, { includeOpinionMining: true });

    sentimentResult.forEach(document => {
        console.log(`ID: ${document.id}`);
        console.log(`\tDocument Sentiment: ${document.sentiment}`);
        console.log(`\tDocument Scores:`);
        console.log(`\t\tPositive: ${document.confidenceScores.positive.toFixed(2)} \tNegative: ${document.confidenceScores.negative.toFixed(2)} \tNeutral: ${document.confidenceScores.neutral.toFixed(2)}`);
        console.log(`\tSentences Sentiment(${document.sentences.length}):`);
        document.sentences.forEach(sentence => {
            console.log(`\t\tSentence sentiment: ${sentence.sentiment}`)
            console.log(`\t\tSentences Scores:`);
            console.log(`\t\tPositive: ${sentence.confidenceScores.positive.toFixed(2)} \tNegative: ${sentence.confidenceScores.negative.toFixed(2)} \tNeutral: ${sentence.confidenceScores.neutral.toFixed(2)}`);
            console.log("    Mined opinions");
            for (const { aspect, opinions } of sentence.minedOpinions) {
                console.log(`      - Aspect text: ${aspect.text}`);
                console.log(`        Aspect sentiment: ${aspect.sentiment}`);
                console.log("        Aspect confidence scores:", aspect.confidenceScores);
                console.log("        Aspect opinions");
                for (const { text, sentiment } of opinions) {
                console.log(`        - Text: ${text}`);
                console.log(`          Sentiment: ${sentiment}`);
                }
            }
        });
    });
}
sentimentAnalysisWithOpinionMining(textAnalyticsClient)

Kodunuzu node index.js konsol pencerenizde çalıştırın.Run your code with node index.js in your console window.

ÇıkışOutput

ID: 0
        // Document Sentiment: positive
        // Document Scores:
                // Positive: 0.84  Negative: 0.16  Neutral: 0.00
        // Sentences Sentiment(1):
                // Sentence sentiment: positive
                // Sentences Scores:
                // Positive: 0.84  Negative: 0.16  Neutral: 0.00
    // Mined opinions
      // - Aspect text: food
        // Aspect sentiment: negative
        // Aspect confidence scores: { positive: 0.01, negative: 0.99 }
        // Aspect opinions
        // - Text: unacceptable
          // Sentiment: negative
      // - Aspect text: service
        // Aspect sentiment: negative
        // Aspect confidence scores: { positive: 0.01, negative: 0.99 }
        // Aspect opinions
        // - Text: unacceptable
          // Sentiment: negative
      // - Aspect text: concierge
        // Aspect sentiment: positive
        // Aspect confidence scores: { positive: 1, negative: 0 }
        // Aspect opinions
        // - Text: nice
          // Sentiment: positive

Dil algılamaLanguage detection

Çözümlemek istediğiniz belgeyi içeren bir dize dizisi oluşturun.Create an array of strings containing the document you want to analyze. İstemcinin detectLanguage() metodunu çağırın ve döndürülen geri alın DetectLanguageResultCollection .Call the client's detectLanguage() method and get the returned DetectLanguageResultCollection. Sonra sonuçlar arasında yineleme yapın ve her belgenin KIMLIĞINI ilgili birincil dille yazdırın.Then iterate through the results, and print each document's ID with respective primary language.

async function languageDetection(client) {

    const languageInputArray = [
        "Ce document est rédigé en Français."
    ];
    const languageResult = await client.detectLanguage(languageInputArray);

    languageResult.forEach(document => {
        console.log(`ID: ${document.id}`);
        console.log(`\tPrimary Language ${document.primaryLanguage.name}`)
    });
}
languageDetection(textAnalyticsClient);

Kodunuzu node index.js konsol pencerenizde çalıştırın.Run your code with node index.js in your console window.

ÇıkışOutput

ID: 0
        Primary Language French

Adlandırılmış varlık tanıma (NER)Named Entity Recognition (NER)

Not

Şu sürümde 3.1 :In version 3.1:

  • Varlık bağlama, NER 'den ayrı bir istek.Entity linking is a separate request than NER.

Çözümlemek istediğiniz belgeyi içeren bir dize dizisi oluşturun.Create an array of strings containing the document you want to analyze. İstemcinin recognizeEntities() metodunu çağırın ve RecognizeEntitiesResult nesneyi alın.Call the client's recognizeEntities() method and get the RecognizeEntitiesResult object. Sonuçlar listesinde yineleme yapın ve varlık adı, türü, alt tür, kaydırma, uzunluk ve puanı yazdırın.Iterate through the list of results, and print the entity name, type, subtype, offset, length, and score.

async function entityRecognition(client){

    const entityInputs = [
        "Microsoft was founded by Bill Gates and Paul Allen on April 4, 1975, to develop and sell BASIC interpreters for the Altair 8800",
        "La sede principal de Microsoft se encuentra en la ciudad de Redmond, a 21 kilómetros de Seattle."
    ];
    const entityResults = await client.recognizeEntities(entityInputs);

    entityResults.forEach(document => {
        console.log(`Document ID: ${document.id}`);
        document.entities.forEach(entity => {
            console.log(`\tName: ${entity.text} \tCategory: ${entity.category} \tSubcategory: ${entity.subCategory ? entity.subCategory : "N/A"}`);
            console.log(`\tScore: ${entity.confidenceScore}`);
        });
    });
}
entityRecognition(textAnalyticsClient);

Kodunuzu node index.js konsol pencerenizde çalıştırın.Run your code with node index.js in your console window.

ÇıkışOutput

Document ID: 0
        Name: Microsoft         Category: Organization  Subcategory: N/A
        Score: 0.29
        Name: Bill Gates        Category: Person        Subcategory: N/A
        Score: 0.78
        Name: Paul Allen        Category: Person        Subcategory: N/A
        Score: 0.82
        Name: April 4, 1975     Category: DateTime      Subcategory: Date
        Score: 0.8
        Name: 8800      Category: Quantity      Subcategory: Number
        Score: 0.8
Document ID: 1
        Name: 21        Category: Quantity      Subcategory: Number
        Score: 0.8
        Name: Seattle   Category: Location      Subcategory: GPE
        Score: 0.25

Varlık BağlamaEntity Linking

Çözümlemek istediğiniz belgeyi içeren bir dize dizisi oluşturun.Create an array of strings containing the document you want to analyze. İstemcinin recognizeLinkedEntities() metodunu çağırın ve RecognizeLinkedEntitiesResult nesneyi alın.Call the client's recognizeLinkedEntities() method and get the RecognizeLinkedEntitiesResult object. Sonuçlar listesinde yineleme yapın ve varlık adı, KIMLIĞI, veri kaynağı, URL ve eşleşmeleri yazdırın.Iterate through the list of results, and print the entity name, ID, data source, url, and matches. Dizideki her nesne, matches Bu eşleşme için uzaklığa, uzunluğa ve puana sahip olur.Every object in matches array will contain offset, length, and score for that match.

async function linkedEntityRecognition(client){

    const linkedEntityInput = [
        "Microsoft was founded by Bill Gates and Paul Allen on April 4, 1975, to develop and sell BASIC interpreters for the Altair 8800. During his career at Microsoft, Gates held the positions of chairman, chief executive officer, president and chief software architect, while also being the largest individual shareholder until May 2014."
    ];
    const entityResults = await client.recognizeLinkedEntities(linkedEntityInput);

    entityResults.forEach(document => {
        console.log(`Document ID: ${document.id}`);
        document.entities.forEach(entity => {
            console.log(`\tName: ${entity.name} \tID: ${entity.dataSourceEntityId} \tURL: ${entity.url} \tData Source: ${entity.dataSource}`);
            console.log(`\tMatches:`)
            entity.matches.forEach(match => {
                console.log(`\t\tText: ${match.text} \tScore: ${match.confidenceScore.toFixed(2)}`);
        })
        });
    });
}
linkedEntityRecognition(textAnalyticsClient);

Kodunuzu node index.js konsol pencerenizde çalıştırın.Run your code with node index.js in your console window.

ÇıkışOutput

Document ID: 0
        Name: Altair 8800       ID: Altair 8800         URL: https://en.wikipedia.org/wiki/Altair_8800  Data Source: Wikipedia
        Matches:
                Text: Altair 8800       Score: 0.88
        Name: Bill Gates        ID: Bill Gates  URL: https://en.wikipedia.org/wiki/Bill_Gates   Data Source: Wikipedia
        Matches:
                Text: Bill Gates        Score: 0.63
                Text: Gates     Score: 0.63
        Name: Paul Allen        ID: Paul Allen  URL: https://en.wikipedia.org/wiki/Paul_Allen   Data Source: Wikipedia
        Matches:
                Text: Paul Allen        Score: 0.60
        Name: Microsoft         ID: Microsoft   URL: https://en.wikipedia.org/wiki/Microsoft    Data Source: Wikipedia
        Matches:
                Text: Microsoft         Score: 0.55
                Text: Microsoft         Score: 0.55
        Name: April 4   ID: April 4     URL: https://en.wikipedia.org/wiki/April_4      Data Source: Wikipedia
        Matches:
                Text: April 4   Score: 0.32
        Name: BASIC     ID: BASIC       URL: https://en.wikipedia.org/wiki/BASIC        Data Source: Wikipedia
        Matches:
                Text: BASIC     Score: 0.33

Kişisel tanımlama bilgileri (PII) tanımaPersonally Identifying Information (PII) Recognition

Çözümlemek istediğiniz belgeyi içeren bir dize dizisi oluşturun.Create an array of strings containing the document you want to analyze. İstemcinin recognizePiiEntities() metodunu çağırın ve RecognizePIIEntitiesResult nesneyi alın.Call the client's recognizePiiEntities() method and get the RecognizePIIEntitiesResult object. Sonuçlar listesinde yineleme yapın ve varlık adını, türünü ve Puanını yazdırın.Iterate through the list of results, and print the entity name, type, and score.

async function piiRecognition(client) {

    const documents = [
        "The employee's phone number is (555) 555-5555."
    ];

    const results = await client.recognizePiiEntities(documents, "en");
    for (const result of results) {
        if (result.error === undefined) {
            console.log("Redacted Text: ", result.redactedText);
            console.log(" -- Recognized PII entities for input", result.id, "--");
            for (const entity of result.entities) {
                console.log(entity.text, ":", entity.category, "(Score:", entity.confidenceScore, ")");
            }
        } else {
            console.error("Encountered an error:", result.error);
        }
    }
}
piiRecognition(textAnalyticsClient)

Kodunuzu node index.js konsol pencerenizde çalıştırın.Run your code with node index.js in your console window.

ÇıkışOutput

Redacted Text:  The employee's phone number is **************.
 -- Recognized PII entities for input 0 --
(555) 555-5555 : Phone Number (Score: 0.8 )

Anahtar ifade ayıklamaKey phrase extraction

Çözümlemek istediğiniz belgeyi içeren bir dize dizisi oluşturun.Create an array of strings containing the document you want to analyze. İstemcinin extractKeyPhrases() metodunu çağırın ve döndürülen ExtractKeyPhrasesResult nesneyi alın.Call the client's extractKeyPhrases() method and get the returned ExtractKeyPhrasesResult object. Sonuçlar arasında yineleme yapın ve her belge KIMLIĞINI ve algılanan anahtar tümceleri yazdırın.Iterate through the results and print each document's ID, and any detected key phrases.

async function keyPhraseExtraction(client){

    const keyPhrasesInput = [
        "My cat might need to see a veterinarian.",
    ];
    const keyPhraseResult = await client.extractKeyPhrases(keyPhrasesInput);
    
    keyPhraseResult.forEach(document => {
        console.log(`ID: ${document.id}`);
        console.log(`\tDocument Key Phrases: ${document.keyPhrases}`);
    });
}
keyPhraseExtraction(textAnalyticsClient);

Kodunuzu node index.js konsol pencerenizde çalıştırın.Run your code with node index.js in your console window.

ÇıkışOutput

ID: 0
        Document Key Phrases: cat,veterinarian

Uygulamayı çalıştırmaRun the application

Uygulamayı node hızlı başlangıç dosyanızdaki komutla çalıştırın.Run the application with the node command on your quickstart file.

node index.js

Önemli

  • Metin Analizi API'si en son kararlı sürümü 3.0 .The latest stable version of the Text Analytics API is 3.0.
    • Yalnızca kullandığınız sürüme ait yönergeleri izlediğinizden emin olun.Be sure to only follow the instructions for the version you are using.
  • Bu makaledeki kod, basitlik nedenlerle zaman uyumlu Yöntemler ve güvenli olmayan kimlik bilgileri depolaması kullanır.The code in this article uses synchronous methods and un-secured credentials storage for simplicity reasons. Üretim senaryolarında, performans ve ölçeklenebilirlik için toplu zaman uyumsuz yöntemleri kullanmanızı öneririz.For production scenarios, we recommend using the batched asynchronous methods for performance and scalability. Aşağıdaki başvuru belgelerine bakın.See the reference documentation below.

ÖnkoşullarPrerequisites

  • Azure aboneliği- ücretsiz olarak bir tane oluşturunAzure subscription - Create one for free
  • Python 3.xPython 3.x
  • Azure aboneliğiniz olduktan sonra, anahtarınızı ve uç noktanızı almak için Azure Portal bir metin analizi kaynağı oluşturun metin analizi bir kaynak oluşturun.Once you have your Azure subscription, create a Text Analytics resource in the Azure portal to get your key and endpoint. Dağıtıldıktan sonra Kaynağa Git ' etıklayın.After it deploys, click Go to resource.
    • Uygulamanızı Metin Analizi API'si bağlamak için oluşturduğunuz kaynaktaki anahtar ve uç nokta gerekir.You will need the key and endpoint from the resource you create to connect your application to the Text Analytics API. Anahtarınızı ve uç noktanızı daha sonra hızlı başlangıçta aşağıdaki koda yapıştırabilirsiniz.You'll paste your key and endpoint into the code below later in the quickstart.
    • F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.You can use the free pricing tier (F0) to try the service, and upgrade later to a paid tier for production.

AyarlanıyorSetting up

İstemci kitaplığını yüklerInstall the client library

Python yükledikten sonra, ile istemci kitaplığını yükleyebilirsiniz:After installing Python, you can install the client library with:

pip install azure-ai-textanalytics --pre

İpucu

Tüm hızlı başlangıç kodu dosyasını aynı anda görüntülemek mi istiyorsunuz?Want to view the whole quickstart code file at once? Bu hızlı başlangıçta kod örneklerini içeren GitHub 'dabulabilirsiniz.You can find it on GitHub, which contains the code examples in this quickstart.

Yeni bir Python uygulaması oluşturmaCreate a new python application

Yeni bir Python dosyası oluşturun ve kaynağınızın Azure uç noktası ve abonelik anahtarı için değişkenler oluşturun.Create a new Python file and create variables for your resource's Azure endpoint and subscription key.

Önemli

Azure portalına gidin.Go to the Azure portal. Önkoşullar bölümünde oluşturduğunuz metin analizi kaynak başarıyla dağıtılırsa, sonraki adımlaraltında Kaynağa Git düğmesine tıklayın.If the Text Analytics resource you created in the Prerequisites section deployed successfully, click the Go to Resource button under Next Steps. Anahtar ve uç noktanızı kaynağın anahtar ve uç nokta sayfasında, kaynak yönetimialtında bulabilirsiniz.You can find your key and endpoint in the resource's key and endpoint page, under resource management.

İşiniz bittiğinde kodu koddan kaldırmayı unutmayın ve hiçbir zaman herkese açık bir şekilde nakletmeyin.Remember to remove the key from your code when you're done, and never post it publicly. Üretim için, kimlik bilgilerinizi depolamak ve bunlara erişmek için güvenli bir yol kullanmayı düşünün.For production, consider using a secure way of storing and accessing your credentials. Örneğin, Azure Anahtar Kasası.For example, Azure key vault.

key = "<paste-your-text-analytics-key-here>"
endpoint = "<paste-your-text-analytics-endpoint-here>"

Nesne modeliObject model

Metin Analizi istemcisi, Azure 'da TextAnalyticsClient kimlik doğrulayan bir nesnedir.The Text Analytics client is a TextAnalyticsClient object that authenticates to Azure. İstemci, metin çözümlemek için çeşitli yöntemler sağlar.The client provides several methods for analyzing text.

İşleme metni, bir documents dize listesi, bir dict benzeri gösterim listesi veya bir listesi olarak olan bir liste olarak API 'ye gönderilir TextDocumentInput/DetectLanguageInput .When processing text is sent to the API as a list of documents, which is either as a list of string, a list of dict-like representation, or as a list of TextDocumentInput/DetectLanguageInput. Bir dict-like nesnesi,, ve birleşimini id içerir text language/country_hint .A dict-like object contains a combination of id, text, and language/country_hint. textÖzniteliği, kaynak olarak çözümlenecek metni depolar country_hint ve id herhangi bir değer olabilir.The text attribute stores the text to be analyzed in the origin country_hint, and the id can be any value.

Yanıt nesnesi, her belge için analiz bilgilerini içeren bir listesidir.The response object is a list containing the analysis information for each document.

Kod örnekleriCode examples

Bu kod parçacıkları, Python için Metin Analizi istemci kitaplığı ile aşağıdaki görevlerin nasıl yapılacağını gösterir:These code snippets show you how to do the following tasks with the Text Analytics client library for Python:

İstemcinin kimliğini doğrulamaAuthenticate the client

TextAnalyticsClient key Yukarıda oluşturduğunuz ve oluşturduğunuz nesneyi başlatmak için bir işlev oluşturun endpoint .Create a function to instantiate the TextAnalyticsClient object with your key AND endpoint created above. Ardından yeni bir istemci oluşturun.Then create a new client.

from azure.ai.textanalytics import TextAnalyticsClient
from azure.core.credentials import AzureKeyCredential

def authenticate_client():
    ta_credential = AzureKeyCredential(key)
    text_analytics_client = TextAnalyticsClient(
            endpoint=endpoint, 
            credential=ta_credential)
    return text_analytics_client

client = authenticate_client()

Yaklaşım analiziSentiment analysis

sentiment_analysis_example()İstemciyi bağımsız değişken olarak alan adlı yeni bir işlev oluşturun, sonra analyze_sentiment() işlevi çağırır.Create a new function called sentiment_analysis_example() that takes the client as an argument, then calls the analyze_sentiment() function. Döndürülen yanıt nesnesi, tüm giriş belgesi için yaklaşım etiketini ve Puanını, her tümce için de yaklaşım analizini içerir.The returned response object will contain the sentiment label and score of the entire input document, as well as a sentiment analysis for each sentence.

def sentiment_analysis_example(client):

    documents = ["I had the best day of my life. I wish you were there with me."]
    response = client.analyze_sentiment(documents=documents)[0]
    print("Document Sentiment: {}".format(response.sentiment))
    print("Overall scores: positive={0:.2f}; neutral={1:.2f}; negative={2:.2f} \n".format(
        response.confidence_scores.positive,
        response.confidence_scores.neutral,
        response.confidence_scores.negative,
    ))
    for idx, sentence in enumerate(response.sentences):
        print("Sentence: {}".format(sentence.text))
        print("Sentence {} sentiment: {}".format(idx+1, sentence.sentiment))
        print("Sentence score:\nPositive={0:.2f}\nNeutral={1:.2f}\nNegative={2:.2f}\n".format(
            sentence.confidence_scores.positive,
            sentence.confidence_scores.neutral,
            sentence.confidence_scores.negative,
        ))
          
sentiment_analysis_example(client)

ÇıkışOutput

Document Sentiment: positive
Overall scores: positive=1.00; neutral=0.00; negative=0.00 

Sentence: I had the best day of my life.
Sentence 1 sentiment: positive
Sentence score:
Positive=1.00
Neutral=0.00
Negative=0.00

Sentence: I wish you were there with me.
Sentence 2 sentiment: neutral
Sentence score:
Positive=0.21
Neutral=0.77
Negative=0.02

Fikrinizi inceleme ile yaklaşım analizi yapmak için, sentiment_analysis_with_opinion_mining_example() istemciyi bağımsız değişken olarak alan adlı yeni bir işlev oluşturun, sonra analyze_sentiment() işlevi seçenek bayrağıyla çağırır show_opinion_mining=True .In order to do sentiment analysis with opinion mining, create a new function called sentiment_analysis_with_opinion_mining_example() that takes the client as an argument, then calls the analyze_sentiment() function with option flag show_opinion_mining=True. Döndürülen yanıt nesnesi, her tümce için yaklaşım analiziyle birlikte tüm giriş belgesi ve açıklama düzeyi yaklaşım analizini değil yalnızca yaklaşım etiketini ve Puanını içermez.The returned response object will contain not only the sentiment label and score of the entire input document with sentiment analysis for each sentence, but also aspect and opinion level sentiment analysis.

def sentiment_analysis_with_opinion_mining_example(client):

    documents = [
        "The food and service were unacceptable, but the concierge were nice",
        "The rooms were beautiful but dirty. The AC was good and quiet, but the elevator was broken"
    ]

    result = text_analytics_client.analyze_sentiment(documents, show_opinion_mining=True)
    doc_result = [doc for doc in result if not doc.is_error]

    positive_reviews = [doc for doc in doc_result if doc.sentiment == "positive"]
    negative_reviews = [doc for doc in doc_result if doc.sentiment == "negative"]

    positive_mined_opinions = []
    mixed_mined_opinions = []
    negative_mined_opinions = []

    for document in doc_result:
        print("Document Sentiment: {}".format(document.sentiment))
        print("Overall scores: positive={0:.2f}; neutral={1:.2f}; negative={2:.2f} \n".format(
            document.confidence_scores.positive,
            document.confidence_scores.neutral,
            document.confidence_scores.negative,
        ))
        for sentence in document.sentences:
            print("Sentence: {}".format(sentence.text))
            print("Sentence sentiment: {}".format(sentence.sentiment))
            print("Sentence score:\nPositive={0:.2f}\nNeutral={1:.2f}\nNegative={2:.2f}\n".format(
                sentence.confidence_scores.positive,
                sentence.confidence_scores.neutral,
                sentence.confidence_scores.negative,
            ))
            for mined_opinion in sentence.mined_opinions:
                aspect = mined_opinion.aspect
                print("......'{}' aspect '{}'".format(aspect.sentiment, aspect.text))
                for opinion in mined_opinion.opinions:
                    print("......'{}' opinion '{}'".format(opinion.sentiment, opinion.text))
        print("\n")
          
sentiment_analysis_with_opinion_mining_example(client)

ÇıkışOutput

Document Sentiment: positive
Overall scores: positive=0.84; neutral=0.00; negative=0.16

Sentence: The food and service were unacceptable, but the concierge were nice
Sentence sentiment: positive
Sentence score:
Positive=0.84
Neutral=0.00
Negative=0.16

......'negative' aspect 'food'
......'negative' opinion 'unacceptable'
......'negative' aspect 'service'
......'negative' opinion 'unacceptable'
......'positive' aspect 'concierge'
......'positive' opinion 'nice'


Document Sentiment: negative
Overall scores: positive=0.00; neutral=0.00; negative=1.00

Sentence: The rooms were beautiful but dirty.
Sentence sentiment: negative
Sentence score:
Positive=0.01
Neutral=0.00
Negative=0.99

......'mixed' aspect 'rooms'
......'positive' opinion 'beautiful'
......'negative' opinion 'dirty'
Sentence: The AC was good and quiet, but the elevator was broken
Sentence sentiment: negative
Sentence score:
Positive=0.00
Neutral=0.00
Negative=1.00

......'positive' aspect 'AC'
......'positive' opinion 'good'
......'positive' opinion 'quiet'
......'negative' aspect 'elevator'
......'negative' opinion 'broken'

Dil algılamaLanguage detection

language_detection_example()İstemciyi bağımsız değişken olarak alan adlı yeni bir işlev oluşturun, sonra detect_language() işlevi çağırır.Create a new function called language_detection_example() that takes the client as an argument, then calls the detect_language() function. Döndürülen yanıt nesnesi, başarılı olursa ' da algılanan dili içerir primary_language ve bunu error değildir.The returned response object will contain the detected language in primary_language if successful, and an error if not.

İpucu

Bazı durumlarda, girişi temel alarak dilleri ayırt etmek zor olabilir.In some cases it may be hard to disambiguate languages based on the input. country_hintParametresini 2 harfli bir ülke kodu belirtmek için kullanabilirsiniz.You can use the country_hint parameter to specify a 2-letter country code. Varsayılan olarak, API varsayılan Countryipucu olarak "US" kullanıyor, bu davranışı kaldırmak için bu değeri boş dize olarak ayarlayarak bu parametreyi sıfırlayabilirsiniz country_hint : "" .By default the API is using the "US" as the default countryHint, to remove this behavior you can reset this parameter by setting this value to empty string country_hint : "".

def language_detection_example(client):
    try:
        documents = ["Ce document est rédigé en Français."]
        response = client.detect_language(documents = documents, country_hint = 'us')[0]
        print("Language: ", response.primary_language.name)

    except Exception as err:
        print("Encountered exception. {}".format(err))
language_detection_example(client)

ÇıkışOutput

Language:  French

Adlandırılmış varlık tanıma (NER)Named Entity recognition (NER)

Not

Şu sürümde 3.1 :In version 3.1:

  • Varlık bağlama, NER 'den ayrı bir istek.Entity linking is a separate request than NER.

entity_recognition_exampleİstemciyi bir bağımsız değişken olarak alan adlı yeni bir işlev oluşturun, sonra recognize_entities() işlevi çağırır ve sonuçlar boyunca yinelenir.Create a new function called entity_recognition_example that takes the client as an argument, then calls the recognize_entities() function and iterates through the results. Döndürülen yanıt nesnesi, başarılı olursa ' da algılanan varlıkların listesini içerir entity ve bunu error değildir.The returned response object will contain the list of detected entities in entity if successful, and an error if not. Algılanan her varlık için, varsa kategorisini ve alt kategorisini yazdırın.For each detected entity, print its Category and Sub-Category if exists.

def entity_recognition_example(client):

    try:
        documents = ["I had a wonderful trip to Seattle last week."]
        result = client.recognize_entities(documents = documents)[0]

        print("Named Entities:\n")
        for entity in result.entities:
            print("\tText: \t", entity.text, "\tCategory: \t", entity.category, "\tSubCategory: \t", entity.subcategory,
                    "\n\tConfidence Score: \t", round(entity.confidence_score, 2), "\tLength: \t", entity.length, "\tOffset: \t", entity.offset, "\n")

    except Exception as err:
        print("Encountered exception. {}".format(err))
entity_recognition_example(client)

ÇıkışOutput

Named Entities:

        Text:    trip   Category:        Event  SubCategory:     None
        Confidence Score:        0.61   Length:          4      Offset:          18

        Text:    Seattle        Category:        Location       SubCategory:     GPE
        Confidence Score:        0.82   Length:          7      Offset:          26

        Text:    last week      Category:        DateTime       SubCategory:     DateRange
        Confidence Score:        0.8    Length:          9      Offset:          34

Varlık BağlamaEntity Linking

entity_linking_example()İstemciyi bir bağımsız değişken olarak alan adlı yeni bir işlev oluşturun, sonra recognize_linked_entities() işlevi çağırır ve sonuçlar boyunca yinelenir.Create a new function called entity_linking_example() that takes the client as an argument, then calls the recognize_linked_entities() function and iterates through the results. Döndürülen yanıt nesnesi, başarılı olursa ' da algılanan varlıkların listesini içerir entities ve bunu error değildir.The returned response object will contain the list of detected entities in entities if successful, and an error if not. Bağlantılı varlıklar benzersiz olarak tanımlandıklarından, aynı varlığın oluşumları entity nesne listesi olarak bir nesne altında gruplandırılır match .Since linked entities are uniquely identified, occurrences of the same entity are grouped under a entity object as a list of match objects.

def entity_linking_example(client):

    try:
        documents = ["""Microsoft was founded by Bill Gates and Paul Allen on April 4, 1975, 
        to develop and sell BASIC interpreters for the Altair 8800. 
        During his career at Microsoft, Gates held the positions of chairman,
        chief executive officer, president and chief software architect, 
        while also being the largest individual shareholder until May 2014."""]
        result = client.recognize_linked_entities(documents = documents)[0]

        print("Linked Entities:\n")
        for entity in result.entities:
            print("\tName: ", entity.name, "\tId: ", entity.data_source_entity_id, "\tUrl: ", entity.url,
            "\n\tData Source: ", entity.data_source)
            print("\tMatches:")
            for match in entity.matches:
                print("\t\tText:", match.text)
                print("\t\tConfidence Score: {0:.2f}".format(match.confidence_score))
                print("\t\tOffset: {}".format(match.offset))
                print("\t\tLength: {}".format(match.length))
            
    except Exception as err:
        print("Encountered exception. {}".format(err))
entity_linking_example(client)

ÇıkışOutput

Linked Entities:

        Name:  Microsoft        Id:  Microsoft  Url:  https://en.wikipedia.org/wiki/Microsoft
        Data Source:  Wikipedia
        Matches:
                Text: Microsoft
                Confidence Score: 0.55
                Offset: 0
                Length: 9
                Text: Microsoft
                Confidence Score: 0.55
                Offset: 168
                Length: 9
        Name:  Bill Gates       Id:  Bill Gates         Url:  https://en.wikipedia.org/wiki/Bill_Gates
        Data Source:  Wikipedia
        Matches:
                Text: Bill Gates
                Confidence Score: 0.63
                Offset: 25
                Length: 10
                Text: Gates
                Confidence Score: 0.63
                Offset: 179
                Length: 5
        Name:  Paul Allen       Id:  Paul Allen         Url:  https://en.wikipedia.org/wiki/Paul_Allen
        Data Source:  Wikipedia
        Matches:
                Text: Paul Allen
                Confidence Score: 0.60
                Offset: 40
                Length: 10
        Name:  April 4  Id:  April 4    Url:  https://en.wikipedia.org/wiki/April_4
        Data Source:  Wikipedia
        Matches:
                Text: April 4
                Confidence Score: 0.32
                Offset: 54
                Length: 7
        Name:  BASIC    Id:  BASIC      Url:  https://en.wikipedia.org/wiki/BASIC
        Data Source:  Wikipedia
        Matches:
                Text: BASIC
                Confidence Score: 0.33
                Offset: 98
                Length: 5
        Name:  Altair 8800      Id:  Altair 8800        Url:  https://en.wikipedia.org/wiki/Altair_8800
        Data Source:  Wikipedia
        Matches:
                Text: Altair 8800
                Confidence Score: 0.88
                Offset: 125
                Length: 11

Kişisel olarak tanımlanabilir bilgi tanımaPersonally Identifiable Information recognition

pii_recognition_exampleİstemciyi bir bağımsız değişken olarak alan adlı yeni bir işlev oluşturun, sonra recognize_pii_entities() işlevi çağırır ve sonuçlar boyunca yinelenir.Create a new function called pii_recognition_example that takes the client as an argument, then calls the recognize_pii_entities() function and iterates through the results. Döndürülen yanıt nesnesi, başarılı olursa ' da algılanan varlıkların listesini içerir entity ve bunu error değildir.The returned response object will contain the list of detected entities in entity if successful, and an error if not. Algılanan her varlık için, varsa kategorisini ve alt kategorisini yazdırın.For each detected entity, print its Category and Sub-Category if exists.

def pii_recognition_example(client):
    documents = [
        "The employee's SSN is 859-98-0987.",
        "The employee's phone number is 555-555-5555."
    ]
    response = client.recognize_pii_entities(documents, language="en")
    result = [doc for doc in response if not doc.is_error]
    for doc in result:
        print("Redacted Text: {}".format(doc.redacted_text))
        for entity in doc.entities:
            print("Entity: {}".format(entity.text))
            print("\tCategory: {}".format(entity.category))
            print("\tConfidence Score: {}".format(entity.confidence_score))
            print("\tOffset: {}".format(entity.offset))
            print("\tLength: {}".format(entity.length))
pii_recognition_example(client)

ÇıkışOutput

Redacted Text: The employee's SSN is ***********.
Entity: 859-98-0987
        Category: U.S. Social Security Number (SSN)
        Confidence Score: 0.65
        Offset: 22
        Length: 11
Redacted Text: The employee's phone number is ************.
Entity: 555-555-5555
        Category: Phone Number
        Confidence Score: 0.8
        Offset: 31
        Length: 12

Anahtar ifade ayıklamaKey phrase extraction

key_phrase_extraction_example()İstemciyi bağımsız değişken olarak alan adlı yeni bir işlev oluşturun, sonra extract_key_phrases() işlevi çağırır.Create a new function called key_phrase_extraction_example() that takes the client as an argument, then calls the extract_key_phrases() function. Sonuç, başarılı olursa ' de algılanan anahtar tümceciklerin listesini içerir key_phrases ve bunu error değildir.The result will contain the list of detected key phrases in key_phrases if successful, and an error if not. Algılanan tüm anahtar tümceleri yazdır.Print any detected key phrases.

def key_phrase_extraction_example(client):

    try:
        documents = ["My cat might need to see a veterinarian."]

        response = client.extract_key_phrases(documents = documents)[0]

        if not response.is_error:
            print("\tKey Phrases:")
            for phrase in response.key_phrases:
                print("\t\t", phrase)
        else:
            print(response.id, response.error)

    except Exception as err:
        print("Encountered exception. {}".format(err))
        
key_phrase_extraction_example(client)

ÇıkışOutput

    Key Phrases:
         cat
         veterinarian

Ek dil desteğiAdditional language support

Bu sekmeye tıkladıysanız, büyük olasılıkla en sevdiğiniz programlama dilinde bir hızlı başlangıç görmezsiniz.If you've clicked this tab, you probably didn't see a quickstart in your favorite programming language. Endişelenmeyin, kullanılabilir ek hızlı başlangıçlara ihtiyacımız var.Don't worry, we have additional quickstarts available. Programlama dilinizin doğru örneğini bulmak için tabloyu kullanın.Use the table to find the right sample for your programming language.

DilLanguage Kullanılabilir sürümAvailable version
RubyRuby Sürüm 2,1Version 2.1
GoGo Sürüm 2,1Version 2.1

Kaynakları temizlemeClean up resources

Bilişsel hizmetler aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz.If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. Kaynak grubunun silinmesi, onunla ilişkili diğer tüm kaynakları da siler.Deleting the resource group also deletes any other resources associated with it.

Sonraki adımlarNext steps