Consulte o texto contra uma lista de termos personalizados em C #Check text against a custom term list in C#

A lista global predefinida de termos no Azure Content Moderator é suficiente para a maioria das necessidades de moderação de conteúdo.The default global list of terms in Azure Content Moderator is sufficient for most content moderation needs. No entanto, poderá ter de filtrar termos que são específicos da sua organização.However, you might need to screen for terms that are specific to your organization. Por exemplo, poderá querer etiquetar nomes de concorrentes para nova revisão.For example, you might want to tag competitor names for further review.

Pode utilizar o SDK do Content Moderator para .NET para criar listas personalizadas de termos para utilizar com a API de Moderação de Texto.You can use the Content Moderator SDK for .NET to create custom lists of terms to use with the Text Moderation API.

Este artigo fornece informações e exemplos de código para ajudá-lo a começar a utilizar o SDK do Content Moderator para .NET, para:This article provides information and code samples to help you get started using the Content Moderator SDK for .NET to:

  • Criar uma lista.Create a list.
  • Adicionar termos a uma lista.Add terms to a list.
  • Filtrar termos em relação aos termos de uma lista.Screen terms against the terms in a list.
  • Eliminar termos de uma lista.Delete terms from a list.
  • Eliminar uma lista.Delete a list.
  • Editar informações da lista.Edit list information.
  • Atualizar o índice para que as alterações à lista sejam incluídas numa nova análise.Refresh the index so that changes to the list are included in a new scan.

Se não tiver uma subscrição Azure, crie uma conta gratuita antes de começar.If you don't have an Azure subscription, create a free account before you begin.

Inscrever-se nos serviços do Content ModeratorSign up for Content Moderator services

Antes de poder utilizar os serviços do Content Moderator através da API REST ou do SDK, irá precisar de uma chave de subscrição.Before you can use Content Moderator services through the REST API or the SDK, you'll need a subscription key. Subscrever o serviço do Content Moderator no portal do Azure para obter um.Subscribe to Content Moderator service in the Azure portal to obtain one.

Criar o projeto do Visual StudioCreate your Visual Studio project

  1. Adicione um novo projeto Aplicação de consola (.NET Framework) à sua solução.Add a new Console app (.NET Framework) project to your solution.

  2. Dê ao projeto o nome TermLists.Name the project TermLists. Selecione este projeto como o projeto de arranque único para a solução.Select this project as the single startup project for the solution.

Instalar pacotes necessáriosInstall required packages

Instale os seguintes pacotes NuGet para o projeto TermLists:Install the following NuGet packages for the TermLists project:

  • Microsoft.Azure.CognitiveServices.ContentModeratorMicrosoft.Azure.CognitiveServices.ContentModerator
  • Microsoft.Rest.ClientRuntimeMicrosoft.Rest.ClientRuntime
  • Microsoft.Rest.ClientRuntime.AzureMicrosoft.Rest.ClientRuntime.Azure
  • Newtonsoft.JsonNewtonsoft.Json

Atualizar as instruções de utilização do programaUpdate the program's using statements

Adicione as seguintes instruções using.Add the following using statements.

using Microsoft.Azure.CognitiveServices.ContentModerator;
using Microsoft.Azure.CognitiveServices.ContentModerator.Models;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;

Criar o cliente do Content ModeratorCreate the Content Moderator client

Adicione o seguinte código para criar um cliente do Content Moderator para a sua subscrição.Add the following code to create a Content Moderator client for your subscription. Atualize AzureEndpoint CMSubscriptionKey os campos e campos com os valores do URL final e chave de subscrição.Update the AzureEndpoint and CMSubscriptionKey fields with the values of your endpoint URL and subscription key. Pode encontrá-los no separador De arranque rápido do seu recurso no portal Azure.You can find these in the Quick start tab of your resource in the Azure portal.

/// <summary>
/// Wraps the creation and configuration of a Content Moderator client.
/// </summary>
/// <remarks>This class library contains insecure code. If you adapt this 
/// code for use in production, use a secure method of storing and using
/// your Content Moderator subscription key.</remarks>
public static class Clients
{
    /// <summary>
    /// The base URL fragment for Content Moderator calls.
    /// </summary>
    private static readonly string AzureEndpoint = "YOUR ENDPOINT URL";

    /// <summary>
    /// Your Content Moderator subscription key.
    /// </summary>
    private static readonly string CMSubscriptionKey = "YOUR API KEY";

    /// <summary>
    /// Returns a new Content Moderator client for your subscription.
    /// </summary>
    /// <returns>The new client.</returns>
    /// <remarks>The <see cref="ContentModeratorClient"/> is disposable.
    /// When you have finished using the client,
    /// you should dispose of it either directly or indirectly. </remarks>
    public static ContentModeratorClient NewClient()
    {
        // Create and initialize an instance of the Content Moderator API wrapper.
        ContentModeratorClient client = new ContentModeratorClient(new ApiKeyServiceClientCredentials(CMSubscriptionKey));

        client.Endpoint = AzureEndpoint;
        return client;
    }
}

Adicionar propriedades privadasAdd private properties

Adicione as seguintes propriedades privadas ao espaço de nomes TermLists, classe Program.Add the following private properties to namespace TermLists, class Program.

/// <summary>
/// The language of the terms in the term lists.
/// </summary>
private const string lang = "eng";

/// <summary>
/// The minimum amount of time, in milliseconds, to wait between calls
/// to the Content Moderator APIs.
/// </summary>
private const int throttleRate = 3000;

/// <summary>
/// The number of minutes to delay after updating the search index before
/// performing image match operations against the list.
/// </summary>
private const double latencyDelay = 0.5;

Criar uma lista de termosCreate a term list

Crie uma lista de termos com ContentModeratorClient.ListManagementTermLists.Create.You create a term list with ContentModeratorClient.ListManagementTermLists.Create. O primeiro parâmetro a Criar é uma cadeia que contém um tipo MIME, que deve ser "application/json".The first parameter to Create is a string that contains a MIME type, which should be "application/json". Para obter mais informações, veja a Referência à API.For more information, see the API reference. O segundo parâmetro é um objeto Corpo que contém um nome e uma descrição para a nova lista de termos.The second parameter is a Body object that contains a name and description for the new term list.

Nota

Existe um limite máximo de 5 listas de termos, sendo que cada lista não pode exceder 10 000 termos.There is a maximum limit of 5 term lists with each list to not exceed 10,000 terms.

Adicione a seguinte definição de método ao espaço de nomes TermLists, classe Program.Add the following method definition to namespace TermLists, class Program.

Nota

A chave de serviço do Content Moderator tem um limite de velocidade de pedidos por segundo (RPS) e, se ultrapassar o limite, o SDK emite uma exceção com o código de erro 429.Your Content Moderator service key has a requests-per-second (RPS) rate limit, and if you exceed the limit, the SDK throws an exception with a 429 error code. Uma chave de escalão gratuito tem um limite de velocidade de um RPS.A free tier key has a one-RPS rate limit.

/// <summary>
/// Creates a new term list.
/// </summary>
/// <param name="client">The Content Moderator client.</param>
/// <returns>The term list ID.</returns>
static string CreateTermList (ContentModeratorClient client)
{
    Console.WriteLine("Creating term list.");

    Body body = new Body("Term list name", "Term list description");
    TermList list = client.ListManagementTermLists.Create("application/json", body);
    if (false == list.Id.HasValue)
    {
        throw new Exception("TermList.Id value missing.");
    }
    else
    {
        string list_id = list.Id.Value.ToString();
        Console.WriteLine("Term list created. ID: {0}.", list_id);
        Thread.Sleep(throttleRate);
        return list_id;
    }
}

Atualizar o nome e a descrição da lista de termosUpdate term list name and description

Atualize as informações da lista de termos com ContentModeratorClient.ListManagementTermLists.Update.You update the term list information with ContentModeratorClient.ListManagementTermLists.Update. O primeiro parâmetro a Atualizar é o ID da lista de termos.The first parameter to Update is the term list ID. O segundo parâmetro é um tipo MIME, que deve ser "application/json".The second parameter is a MIME type, which should be "application/json". Para obter mais informações, veja a Referência à API.For more information, see the API reference. O terceiro parâmetro é um objeto Corpo, que contém o novo nome e a descrição.The third parameter is a Body object, which contains the new name and description.

Adicione a seguinte definição de método ao espaço de nomes TermLists, classe Program.Add the following method definition to namespace TermLists, class Program.

/// <summary>
/// Update the information for the indicated term list.
/// </summary>
/// <param name="client">The Content Moderator client.</param>
/// <param name="list_id">The ID of the term list to update.</param>
/// <param name="name">The new name for the term list.</param>
/// <param name="description">The new description for the term list.</param>
static void UpdateTermList (ContentModeratorClient client, string list_id, string name = null, string description = null)
{
    Console.WriteLine("Updating information for term list with ID {0}.", list_id);
    Body body = new Body(name, description);
    client.ListManagementTermLists.Update(list_id, "application/json", body);
    Thread.Sleep(throttleRate);
}

Adicionar um termo a uma lista de termosAdd a term to a term list

Adicione a seguinte definição de método ao espaço de nomes TermLists, classe Program.Add the following method definition to namespace TermLists, class Program.

/// <summary>
/// Add a term to the indicated term list.
/// </summary>
/// <param name="client">The Content Moderator client.</param>
/// <param name="list_id">The ID of the term list to update.</param>
/// <param name="term">The term to add to the term list.</param>
static void AddTerm (ContentModeratorClient client, string list_id, string term)
{
    Console.WriteLine("Adding term \"{0}\" to term list with ID {1}.", term, list_id);
    client.ListManagementTerm.AddTerm(list_id, term, lang);
    Thread.Sleep(throttleRate);
}

Obter todos os termos numa lista de termosGet all terms in a term list

Adicione a seguinte definição de método ao espaço de nomes TermLists, classe Program.Add the following method definition to namespace TermLists, class Program.

/// <summary>
/// Get all terms in the indicated term list.
/// </summary>
/// <param name="client">The Content Moderator client.</param>
/// <param name="list_id">The ID of the term list from which to get all terms.</param>
static void GetAllTerms(ContentModeratorClient client, string list_id)
{
    Console.WriteLine("Getting terms in term list with ID {0}.", list_id);
    Terms terms = client.ListManagementTerm.GetAllTerms(list_id, lang);
    TermsData data = terms.Data;
    foreach (TermsInList term in data.Terms)
    {
        Console.WriteLine(term.Term);
    }
    Thread.Sleep(throttleRate);
}

Adicionar código para atualizar o índice de pesquisaAdd code to refresh the search index

Depois de fazer alterações a uma lista de termos, atualize o respetivo índice de pesquisa para que as alterações sejam incluídas da próxima vez que utilizar a lista de termos para filtrar texto.After you make changes to a term list, you refresh its search index for the changes to be included the next time you use the term list to screen text. Este processo é semelhante à forma como um motor de busca no ambiente de trabalho (se estiver ativado) ou um motor de busca na Web atualiza continuamente o respetivo índice para incluir novos ficheiros ou páginas.This is similar to how a search engine on your desktop (if enabled) or a web search engine continually refreshes its index to include new files or pages.

Atualize um índice de pesquisa da lista de termos com ContentModeratorClient.ListManagementTermLists.RefreshIndexMethod.You refresh a term list search index with ContentModeratorClient.ListManagementTermLists.RefreshIndexMethod.

Adicione a seguinte definição de método ao espaço de nomes TermLists, classe Program.Add the following method definition to namespace TermLists, class Program.

/// <summary>
/// Refresh the search index for the indicated term list.
/// </summary>
/// <param name="client">The Content Moderator client.</param>
/// <param name="list_id">The ID of the term list to refresh.</param>
static void RefreshSearchIndex (ContentModeratorClient client, string list_id)
{
    Console.WriteLine("Refreshing search index for term list with ID {0}.", list_id);
    client.ListManagementTermLists.RefreshIndexMethod(list_id, lang);
    Thread.Sleep((int)(latencyDelay * 60 * 1000));
}

Filtrar texto com uma lista de termosScreen text using a term list

Para filtrar texto, utilize uma lista de termos com ContentModeratorClient.TextModeration.ScreenText, que utiliza os seguintes parâmetros.You screen text using a term list with ContentModeratorClient.TextModeration.ScreenText, which takes the following parameters.

  • O idioma dos termos na lista de termos.The language of the terms in the term list.
  • Um tipo MIME, que pode ser "text/html", "text/xml", "text/markdown" ou "text/plain".A MIME type, which can be "text/html", "text/xml", "text/markdown", or "text/plain".
  • O texto a filtrar.The text to screen.
  • Um valor booleano.A boolean value. Defina este campo como true para corrigir automaticamente o texto antes de filtrá-lo.Set this field to true to autocorrect the text before screening it.
  • Um valor booleano.A boolean value. Deteto este campo como verdadeiro para detetar dados pessoais no texto.Set this field to true to detect personal data in the text.
  • O ID da lista de termos.The term list ID.

Para obter mais informações, veja a Referência à API.For more information, see the API reference.

ScreenText devolve um objeto Screen, que tem uma propriedade Terms que lista quaisquer termos detetados pelo Content Moderator na filtragem.ScreenText returns a Screen object, which has a Terms property that lists any terms that Content Moderator detected in the screening. Note que, se o Content Moderator não detetou termos durante a filtragem, a propriedade Terms tem o valor nulo.Note that if Content Moderator did not detect any terms during the screening, the Terms property has value null.

Adicione a seguinte definição de método ao espaço de nomes TermLists, classe Program.Add the following method definition to namespace TermLists, class Program.

/// <summary>
/// Screen the indicated text for terms in the indicated term list.
/// </summary>
/// <param name="client">The Content Moderator client.</param>
/// <param name="list_id">The ID of the term list to use to screen the text.</param>
/// <param name="text">The text to screen.</param>
static void ScreenText (ContentModeratorClient client, string list_id, string text)
{
    Console.WriteLine("Screening text: \"{0}\" using term list with ID {1}.", text, list_id);
    Screen screen = client.TextModeration.ScreenText(lang, "text/plain", text, false, false, list_id);
    if (null == screen.Terms)
    {
        Console.WriteLine("No terms from the term list were detected in the text.");
    }
    else
    {
        foreach (DetectedTerms term in screen.Terms)
        {
            Console.WriteLine(String.Format("Found term: \"{0}\" from list ID {1} at index {2}.", term.Term, term.ListId, term.Index));
        }
    }
    read.Sleep(throttleRate);
}

Eliminar termos e listasDelete terms and lists

Eliminar um termo ou uma lista é simples.Deleting a term or a list is straightforward. Utilize o SDK para realizar as seguintes tarefas:You use the SDK to do the following tasks:

  • Eliminar um termo.Delete a term. (ContentModeratorClient.ListManagementTerm.DeleteTerm)(ContentModeratorClient.ListManagementTerm.DeleteTerm)
  • Eliminar todos os termos numa lista sem eliminar a lista.Delete all the terms in a list without deleting the list. (ContentModeratorClient.ListManagementTerm.DeleteAllTerms)(ContentModeratorClient.ListManagementTerm.DeleteAllTerms)
  • Eliminar uma lista e todo o conteúdo da mesma.Delete a list and all of its contents. (ContentModeratorClient.ListManagementTermLists.Delete)(ContentModeratorClient.ListManagementTermLists.Delete)

Eliminar um termoDelete a term

Adicione a seguinte definição de método ao espaço de nomes TermLists, classe Program.Add the following method definition to namespace TermLists, class Program.

/// <summary>
/// Delete a term from the indicated term list.
/// </summary>
/// <param name="client">The Content Moderator client.</param>
/// <param name="list_id">The ID of the term list from which to delete the term.</param>
/// <param name="term">The term to delete.</param>
static void DeleteTerm (ContentModeratorClient client, string list_id, string term)
{
    Console.WriteLine("Removed term \"{0}\" from term list with ID {1}.", term, list_id);
    client.ListManagementTerm.DeleteTerm(list_id, term, lang);
    Thread.Sleep(throttleRate);
}

Eliminar todos os termos numa lista de termosDelete all terms in a term list

Adicione a seguinte definição de método ao espaço de nomes TermLists, classe Program.Add the following method definition to namespace TermLists, class Program.

/// <summary>
/// Delete all terms from the indicated term list.
/// </summary>
/// <param name="client">The Content Moderator client.</param>
/// <param name="list_id">The ID of the term list from which to delete all terms.</param>
static void DeleteAllTerms (ContentModeratorClient client, string list_id)
{
    Console.WriteLine("Removing all terms from term list with ID {0}.", list_id);
    client.ListManagementTerm.DeleteAllTerms(list_id, lang);
    Thread.Sleep(throttleRate);
}

Eliminar uma lista de termosDelete a term list

Adicione a seguinte definição de método ao espaço de nomes TermLists, classe Program.Add the following method definition to namespace TermLists, class Program.

/// <summary>
/// Delete the indicated term list.
/// </summary>
/// <param name="client">The Content Moderator client.</param>
/// <param name="list_id">The ID of the term list to delete.</param>
static void DeleteTermList (ContentModeratorClient client, string list_id)
{
    Console.WriteLine("Deleting term list with ID {0}.", list_id);
    client.ListManagementTermLists.Delete(list_id);
    Thread.Sleep(throttleRate);
}

Componha o método principalCompose the Main method

Adicione a definição de método Main ao espaço de nomes TermLists, classe Program.Add the Main method definition to namespace TermLists, class Program. Por fim, feche a classe Program e o espaço de nomes TermLists.Finally, close the Program class and the TermLists namespace.

static void Main(string[] args)
{
    using (var client = Clients.NewClient())
    {
        string list_id = CreateTermList(client);

        UpdateTermList(client, list_id, "name", "description");
        AddTerm(client, list_id, "term1");
        AddTerm(client, list_id, "term2");

        GetAllTerms(client, list_id);

        // Always remember to refresh the search index of your list
        RefreshSearchIndex(client, list_id);

        string text = "This text contains the terms \"term1\" and \"term2\".";
        ScreenText(client, list_id, text);

        DeleteTerm(client, list_id, "term1");

        // Always remember to refresh the search index of your list
        RefreshSearchIndex(client, list_id);

        text = "This text contains the terms \"term1\" and \"term2\".";
        ScreenText(client, list_id, text);

        DeleteAllTerms(client, list_id);
        DeleteTermList(client, list_id);

        Console.WriteLine("Press ENTER to close the application.");
        Console.ReadLine();
    }
}

Executar a aplicação para ver o resultadoRun the application to see the output

A saída da consola será parecida com a seguinte:Your console output will look like the following:

Creating term list.
Term list created. ID: 252.
Updating information for term list with ID 252.

Adding term "term1" to term list with ID 252.
Adding term "term2" to term list with ID 252.

Getting terms in term list with ID 252.
term1
term2

Refreshing search index for term list with ID 252.

Screening text: "This text contains the terms "term1" and "term2"." using term list with ID 252.
Found term: "term1" from list ID 252 at index 32.
Found term: "term2" from list ID 252 at index 46.

Removed term "term1" from term list with ID 252.

Refreshing search index for term list with ID 252.

Screening text: "This text contains the terms "term1" and "term2"." using term list with ID 252.
Found term: "term2" from list ID 252 at index 46.

Removing all terms from term list with ID 252.
Deleting term list with ID 252.
Press ENTER to close the application.

Passos seguintesNext steps

Obtenha o SDK do Content Moderator para .NET e a solução Visual Studio para este e outros inícios rápidos do Content Moderator para .NET e comece a trabalhar na sua integração.Get the Content Moderator .NET SDK and the Visual Studio solution for this and other Content Moderator quickstarts for .NET, and get started on your integration.