JavaScript için Azure Metin Analizi istemci kitaplığı - sürüm 5.1.0

Azure TextAnalytics , ham metin üzerinde gelişmiş doğal dil işleme sağlayan bulut tabanlı bir hizmettir ve altı ana işlev içerir:

Not: Bu SDK, Azure Metin Analizi hizmet API'si sürüm 3.1.0'a yöneliktir.

  • Dil Algılama
  • Yaklaşım Analizi
  • Anahtar İfade Ayıklama
  • Adlandırılmış Varlık Tanıma
  • Kişisel Bilgilerin Tanınması
  • Bağlı Varlık Tanıma
  • Sağlık Analizi
  • Belge Başına Birden Çok Eylemi Destekleme

İstemci kitaplığını kullanarak:

  • Hangi dil giriş metninin yazıldıklarını algılama.
  • Pozitif veya negatif yaklaşım hakkındaki ipuçları için ham metni analiz ederek müşterilerin markanız veya konunuz hakkında ne düşündüğünü belirleyin.
  • Anahtar ifadeleri otomatik olarak ayıklayarak metnin önemli noktalarını hızla belirleyin.
  • Metninizdeki varlıkları kişiler, yerler, kuruluşlar, tarih/saat, miktarlar, yüzdeler, para birimleri, sağlık hizmetleri ve daha fazlası olarak tanımlayın ve kategorilere ayırın.
  • Yukarıdaki görevlerin birden çokını aynı anda gerçekleştirin.

Önemli bağlantılar:

Başlarken

Şu anda desteklenen ortamlar

Daha fazla ayrıntı için destek ilkemize bakın.

Önkoşullar

Azure CLI kullanıyorsanız ve <your-resource-name> yerine kendi benzersiz adlarınızı yazın<your-resource-group-name>:

az cognitiveservices account create --kind TextAnalytics --resource-group <your-resource-group-name> --name <your-resource-name> --sku <your-sku-name> --location <your-location>

@azure/ai-text-analytics paketini yükleyin

ile npmJavaScript için Azure Metin Analizi istemci kitaplığını yükleyin:

npm install @azure/ai-text-analytics

Oluşturma ve kimlik doğrulaması TextAnalyticsClient

Metin Analizi API'sine erişmek üzere bir istemci nesnesi oluşturmak için Metin Analizi kaynağınızın ve bir credentialöğesinin olması gerekirendpoint. Metin Analizi istemcisi kimlik doğrulaması için Azure Active Directory kimlik bilgilerini veya API anahtarı kimlik bilgilerini kullanabilir.

Metin analizi kaynağınızın uç noktasını Azure Portal'da veya aşağıdaki Azure CLI parçacığını kullanarak bulabilirsiniz:

az cognitiveservices account show --name <your-resource-name> --resource-group <your-resource-group-name> --query "endpoint"

API Anahtarı Kullanma

azure portalını kullanarak Metin Analizi kaynağınıza göz atın ve bir API anahtarı alın veya aşağıdaki Azure CLI parçacığını kullanın:

Not: Bazen API anahtarına "abonelik anahtarı" veya "abonelik API anahtarı" denir.

az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>

API anahtarınız ve uç noktanız olduktan sonra, istemcinin kimliğini doğrulamak için sınıfını AzureKeyCredential aşağıdaki gibi kullanabilirsiniz:

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

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

Azure Active Directory Kimlik Bilgisi Kullanma

İstemci API anahtarı kimlik doğrulaması örneklerin çoğunda kullanılır, ancak Azure Kimlik kitaplığını kullanarak Azure Active Directory ile de kimlik doğrulaması yapabilirsiniz. Aşağıda gösterilen DefaultAzureCredential sağlayıcısını veya Azure SDK ile sağlanan diğer kimlik bilgisi sağlayıcılarını kullanmak için lütfen paketi yükleyin @azure/identity :

npm install @azure/identity

Ayrıca yeni bir AAD uygulaması kaydetmeniz ve rolü hizmet sorumlunuza atayarak "Cognitive Services User" Metin Analizi erişimi vermeniz gerekir (not: gibi "Owner" diğer roller gerekli izinleri vermez, yalnızca "Cognitive Services User" örnekleri ve örnek kodu çalıştırmak için yeterli olur).

AAD uygulamasının istemci kimliği, kiracı kimliği ve istemci gizli dizisi değerlerini ortam değişkenleri olarak ayarlayın: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.

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

const client = new TextAnalyticsClient("<endpoint>", new DefaultAzureCredential());

Önemli kavramlar

TextAnalyticsClient

TextAnalyticsClient, Metin Analizi istemci kitaplığını kullanan geliştiriciler için birincil arabirimdir. Erişebileceğiniz Metin Analizi hizmetinin farklı özelliklerini anlamak için bu istemci nesnesinde yöntemleri keşfedin.

Giriş

Belge, Metin Analizi hizmetindeki tahmine dayalı modeller tarafından analiz edilecek tek bir giriş birimini temsil eder. üzerindeki TextAnalyticsClient işlemler toplu iş olarak analiz edilecek girişlerin bir koleksiyonunu alır. İşlem yöntemleri, girişlerin dize olarak veya ekli meta verileri olan nesneler olarak temsil edilmesine izin veren aşırı yüklemelere sahiptir.

Örneğin, her belge bir dizide dize olarak geçirilebilir, örneğin.

const documents = [
  "I hated the movie. It was so slow!",
  "The movie made it into my top ten favorites.",
  "What a great movie!"
];

veya öğe başına bir belge id veya languagecountryHint/geçirmek isterseniz, bunlar işleme bağlı olarak veya DetectLanguageInput listesi TextDocumentInput olarak verilebilir;

const textDocumentInputs = [
  { id: "1", language: "en", text: "I hated the movie. It was so slow!" },
  { id: "2", language: "en", text: "The movie made it into my top ten favorites." },
  { id: "3", language: "en", text: "What a great movie!" }
];

Belge uzunluğu sınırları, maksimum toplu iş boyutu ve desteklenen metin kodlamaları dahil olmak üzere giriş için hizmet sınırlamalarına bakın.

Dönüş Değeri

Tek bir belgeye karşılık gelen dönüş değeri başarılı bir sonuç veya hata nesnesidir. Her TextAnalyticsClient yöntem, dizine göre girişlere karşılık gelen heterojen bir sonuç ve hata dizisi döndürür. Metin girişi ve sonucu, giriş ve sonuç koleksiyonlarında aynı dizine sahip olur. Koleksiyon isteğe bağlı olarak giriş toplu işlemi ve alanda nasıl işlendiği statistics hakkında bilgi de içerebilir.

gibi AnalyzeSentimentResultbir sonuç, tek bir metin girişiyle ilgili tahmin veya tahmin içeren bir Metin Analizi işleminin sonucudur. İşlemin sonuç türü isteğe bağlı olarak giriş belgesi ve nasıl işlendiği hakkında bilgi de içerebilir.

hata nesnesi, TextAnalyticsErrorResulthizmetin belgeyi işlerken bir hatayla karşılaştığını gösterir ve hata hakkında bilgi içerir.

Belge Hata İşleme

Bir işlem tarafından döndürülen koleksiyonda hatalar, hatayla karşılaşıldığında iç TextAnalyticsError nesneyi içeren özelliğin error varlığıyla başarılı yanıtlardan ayırt edilir. Başarılı sonuç nesneleri için bu özellik her zamanundefined vardır.

Örneğin, tüm hataları filtrelemek için aşağıdakini filterkullanabilirsiniz:

const results = await client.analyzeSentiment(documents);
const onlySuccessful = results.filter((result) => result.error === undefined);

Not: TypeScript kullanıcıları, yapılandırmada olarak ayarlandıysa compilerOptions.strictNullCheckstrue sonuç ve hata nesnelerinin daha iyi tür denetiminden tsconfig.json yararlanabilir. Örnek:

const [result] = await client.analyzeSentiment(["Hello world!"]);

if (result.error !== undefined) {
  // In this if block, TypeScript will be sure that the type of `result` is
  // `TextAnalyticsError` if compilerOptions.strictNullChecks is enabled in
  // the tsconfig.json

  console.log(result.error);
}

Bu özellik TypeScript 3.2'de kullanıma sunulmuştur, bu nedenle TypeScript 3.1 kullanıcılarının sonuç değerlerini karşılık gelen başarı varyantlarına aşağıdaki gibi atamaları gerekir:

const [result] = await client.detectLanguage(["Hello world!"]);

if (result.error === undefined) {
  const { primaryLanguage } = result as DetectLanguageSuccessResult;
}

Örnekler

Yaklaşımı Analiz Etme

Tümce başına yaklaşım analizi ve güvenilirlik puanları dahil olmak üzere pozitif, negatif, nötr veya karma olup olmadığını belirlemek için metnin yaklaşımını analiz edin.

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

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "I did not like the restaurant. The food was too spicy.",
  "The restaurant was decorated beautifully. The atmosphere was unlike any other restaurant I've been to.",
  "The food was yummy. :)"
];

async function main() {
  const results = await client.analyzeSentiment(documents);

  for (const result of results) {
    if (result.error === undefined) {
      console.log("Overall sentiment:", result.sentiment);
      console.log("Scores:", result.confidenceScores);
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}

main();

Doğal Dil İşlemede En Boy Tabanlı Yaklaşım Analizi (NLP) olarak da bilinen bir ürünün/hizmetin yönleriyle ilgili görüşler hakkında daha ayrıntılı bilgi edinmek için burada fikir madenciliği ile yaklaşım analizi örneğine bakın.

Varlıkları Tanıma

Metindeki varlıkları kişi, yer, kuruluş, tarih/saat, miktar, para birimi vb. olarak tanıyıp kategorilere ayırın.

language parametresi isteğe bağlıdır. Belirtilmezse, varsayılan İngilizce modeli kullanılır.

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

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Microsoft was founded by Bill Gates and Paul Allen.",
  "Redmond is a city in King County, Washington, United States, located 15 miles east of Seattle.",
  "Jeff bought three dozen eggs because there was a 50% discount."
];

async function main() {
  const results = await client.recognizeEntities(documents, "en");

  for (const result of results) {
    if (result.error === undefined) {
      console.log(" -- Recognized 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);
    }
  }
}

main();

PII Varlıklarını Tanıma

Sosyal Güvenlik Numaraları, banka hesap bilgileri, kredi kartı numaraları gibi metinlerdeki Kişisel Bilgileri (PII) tanımak için ayrı bir uç nokta ve işlem vardır. Kullanımı yukarıdaki standart varlık tanımaya çok benzer:

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");
const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));
const documents = [
  "The employee's SSN is 555-55-5555.",
  "The employee's phone number is (555) 555-5555."
];
async function main() {
  const results = await client.recognizePiiEntities(documents, "en");
  for (const result of results) {
    if (result.error === undefined) {
      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);
    }
  }
}
main();

Bağlantılı Varlıkları Tanıma

"Bağlantılı" varlık, bir bilgi bankası (Wikipedia gibi) bulunan varlıktır. Operasyon, recognizeLinkedEntities büyük olasılıkla bir bilgi bankası hangi girdiye başvuracaklarını belirleyerek varlıkları belirsiz kılabilir (örneğin, bir metin parçasında, "Mars" sözcüğü gezegene mi yoksa Roma savaş tanrısına mı başvuruyor). Bağlantılı varlıklar, varlığın tanımını sağlayan bilgi bankası ilişkili URL'ler içerir.

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

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Microsoft was founded by Bill Gates and Paul Allen.",
  "Easter Island, a Chilean territory, is a remote volcanic island in Polynesia.",
  "I use Azure Functions to develop my product."
];

async function main() {
  const results = await client.recognizeLinkedEntities(documents, "en");

  for (const result of results) {
    if (result.error === undefined) {
      console.log(" -- Recognized linked entities for input", result.id, "--");
      for (const entity of result.entities) {
        console.log(entity.name, "(URL:", entity.url, ", Source:", entity.dataSource, ")");
        for (const match of entity.matches) {
          console.log(
            "  Occurrence:",
            '"' + match.text + '"',
            "(Score:",
            match.confidenceScore,
            ")"
          );
        }
      }
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}

main();

Anahtar İfadeleri Ayıklama

Anahtar İfade ayıklama, belgedeki ana konuşma noktalarını tanımlar. Örneğin, "Yemek lezzetliydi ve harika personel vardı" giriş metni verüldüğünde, hizmet "yemek" ve "harika personel" döndürür.

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

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Redmond is a city in King County, Washington, United States, located 15 miles east of Seattle.",
  "I need to take my cat to the veterinarian.",
  "I will travel to South America in the summer."
];

async function main() {
  const results = await client.extractKeyPhrases(documents, "en");

  for (const result of results) {
    if (result.error === undefined) {
      console.log(" -- Extracted key phrases for input", result.id, "--");
      console.log(result.keyPhrases);
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}

main();

Dili Algıla

Metin parçasının dilini belirleme.

countryHint parametresi isteğe bağlıdır, ancak kaynak ülke biliniyorsa hizmetin doğru çıkışı sağlamasına yardımcı olabilir. Sağlanırsa, ISO-3166 Alpha-2 iki harfli ülke koduna (Birleşik Devletler için "bize" veya Japonya için "jp" gibi) veya değerine "none"ayarlanmalıdır. Parametre sağlanmazsa varsayılan "us" (Birleşik Devletler) model kullanılır. Belgenin çıkış noktasını bilmiyorsanız parametresi "none" kullanılmalıdır ve Metin Analizi hizmeti bilinmeyen bir kaynak ülke için ayarlanmış bir model uygular.

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

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "This is written in English.",
  "Il documento scritto in italiano.",
  "Dies ist in deutscher Sprache verfasst."
];

async function main() {
  const results = await client.detectLanguage(documents, "none");

  for (const result of results) {
    if (result.error === undefined) {
      const { primaryLanguage } = result;
      console.log(
        "Input #",
        result.id,
        "identified as",
        primaryLanguage.name,
        "( ISO6391:",
        primaryLanguage.iso6391Name,
        ", Score:",
        primaryLanguage.confidenceScore,
        ")"
      );
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}

main();

Healthcare Varlıklarını Analiz Etme

Sağlık analizi, sağlık varlıklarını tanımlar. Örneğin, "Reçete edilen 100mg ibuprofen, günde iki kez alındı" giriş metni verildiğinde, hizmet Dozaj olarak kategorilere ayrılmış "100mg", MedicationName olarak "ibuprofen" ve Frequency olarak "günde iki kez" döndürür.

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

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Prescribed 100mg ibuprofen, taken twice daily.",
  "Patient does not suffer from high blood pressure."
];

async function main() {
  const poller = await client.beginAnalyzeHealthcareEntities(documents);
  const results = await poller.pollUntilDone();

  for await (const result of results) {
    console.log(`- Document ${result.id}`);
    if (!result.error) {
      console.log("\tRecognized Entities:");
      for (const entity of result.entities) {
        console.log(`\t- Entity ${entity.text} of type ${entity.category}`);
      }
    } else console.error("\tError:", result.error);
  }
}

main();

Eylemleri Analiz Etme

Analiz eylemleri, aynı anda birden çok çözümlemenin (adlandırılmış eylemler) uygulanmasını sağlar.

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

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Microsoft was founded by Bill Gates and Paul Allen.",
  "The employee's SSN is 555-55-5555.",
  "Easter Island, a Chilean territory, is a remote volcanic island in Polynesia.",
  "I use Azure Functions to develop my product."
];

async function main() {
  const actions = {
    recognizeEntitiesActions: [{ modelVersion: "latest" }],
    recognizePiiEntitiesActions: [{ modelVersion: "latest" }],
    extractKeyPhrasesActions: [{ modelVersion: "latest" }]
  };
  const poller = await client.beginAnalyzeActions(documents, actions);
  const resultPages = await poller.pollUntilDone();
  for await (const page of resultPages) {
    const keyPhrasesAction = page.extractKeyPhrasesResults[0];
    if (!keyPhrasesAction.error) {
      for (const doc of keyPhrasesAction.results) {
        console.log(`- Document ${doc.id}`);
        if (!doc.error) {
          console.log("\tKey phrases:");
          for (const phrase of doc.keyPhrases) {
            console.log(`\t- ${phrase}`);
          }
        } else {
          console.error("\tError:", doc.error);
        }
      }
    }

    const entitiesAction = page.recognizeEntitiesResults[0];
    if (!entitiesAction.error) {
      for (const doc of entitiesAction.results) {
        console.log(`- Document ${doc.id}`);
        if (!doc.error) {
          console.log("\tEntities:");
          for (const entity of doc.entities) {
            console.log(`\t- Entity ${entity.text} of type ${entity.category}`);
          }
        } else {
          console.error("\tError:", doc.error);
        }
      }
    }

    const piiEntitiesAction = page.recognizePiiEntitiesResults[0];
    if (!piiEntitiesAction.error) {
      for (const doc of piiEntitiesAction.results) {
        console.log(`- Document ${doc.id}`);
        if (!doc.error) {
          console.log("\tPii Entities:");
          for (const entity of doc.entities) {
            console.log(`\t- Entity ${entity.text} of type ${entity.category}`);
          }
        } else {
          console.error("\tError:", doc.error);
        }
      }
    }
  }
}

main();

Sorun giderme

Günlüğe Kaydetme

Günlüğün etkinleştirilmesi hatalarla ilgili yararlı bilgilerin ortaya çıkarılmasına yardımcı olabilir. HTTP isteklerinin ve yanıtlarının günlüğünü görmek için ortam değişkenini AZURE_LOG_LEVEL olarak infoayarlayın. Alternatif olarak, günlüğü çalışma zamanında içinde çağrılarak setLogLevel@azure/loggeretkinleştirilebilir:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Günlükleri etkinleştirme hakkında daha ayrıntılı yönergeler için @azure/günlükçü paketi belgelerine bakabilirsiniz.

Sonraki adımlar

Bu kitaplığın nasıl kullanılacağına ilişkin ayrıntılı örnekler için lütfen samples dizinine göz atın.

Katkıda bulunma

Bu kitaplığa katkıda bulunmak isterseniz, kodu derleme ve test etme hakkında daha fazla bilgi edinmek için lütfen katkıda bulunma kılavuzunu okuyun.

İzlenimler