Compartilhar via


Usando a estrutura de linguagem natural com o Xamarin.iOS

Introduzida no iOS 12, a estrutura de linguagem natural permite o processamento de linguagem natural no dispositivo. Ele oferece suporte a reconhecimento de idioma, tokenização e marcação. A tokenização divide o texto em palavras, frases ou parágrafos componentes; A marcação identifica partes do discurso, pessoas, lugares e organizações.

A estrutura de linguagem natural também pode usar modelos de ML principais personalizados para classificar e marcar texto em contextos especializados.

A classe NSLinguisticTagger ainda está disponível. No entanto, a estrutura de Linguagem Natural é o mecanismo preferido para uso para processamento de Linguagem Natural.

Aplicativo de exemplo: XamarinNL

Para saber como usar a estrutura de linguagem natural com o Xamarin.iOS, explore os seguintes conceitos:

Reconhecendo idiomas

A guia Reconhecedor do aplicativo de exemplo demonstra como usar um NLLanguageRecognizer para determinar o idioma de um bloco de texto.

Observação

O reconhecimento de linguagem é um tipo específico de classificação de texto. A estrutura de linguagem natural também oferece suporte à classificação de texto personalizada por meio de modelos Core ML fornecidos pelo desenvolvedor. Para obter mais informações, dê uma olhada na sessão Introducing Natural Language Framework da WWDC 2018.

Língua dominante

Toque no botão Idioma para identificar o idioma dominante na entrada do usuário.

O HandleDetermineLanguageButtonTap método dos LanguageRecognizerViewController usos do GetDominantLanguage método de um NLLanguageRecognizer para buscar o NLLanguage para o idioma principal encontrado no texto:

partial void HandleDetermineLanguageButtonTap(UIButton sender)
{
    UserInput.ResignFirstResponder();
    if (!String.IsNullOrWhiteSpace(UserInput.Text))
    {
        NLLanguage lang = NLLanguageRecognizer.GetDominantLanguage(UserInput.Text);
        DominantLanguageLabel.Text = lang.ToString();
    }
}

Probabilidades linguísticas

Toque no botão Probabilidades de idioma para buscar uma lista de hipóteses de idioma para a entrada do usuário.

O HandleLanguageProbabilitiesButtonTap método da LanguageRecognizerViewController classe instancia um NLLanguageRecognizer e pede que ele Process o texto do usuário. Em seguida, chama o reconhecedor de linguagem GetNativeLanguageHypotheses método, que busca um dicionário de línguas e probabilidades associadas. A LanguageRecognizerTableViewController classe então renderiza essas linguagens e probabilidades.

partial void HandleLanguageProbabilitiesButtonTap(UIButton sender)
{
    UserInput.ResignFirstResponder();
    if (!String.IsNullOrWhiteSpace(UserInput.Text))
    {
        var recognizer = new NLLanguageRecognizer();
        recognizer.Process(UserInput.Text);
        NSDictionary<NSString, NSNumber> probabilities = recognizer.GetNativeLanguageHypotheses(10);
        PerformSegue(ShowLanguageProbabilitiesSegue, this);
    }
}

Os valores potenciais NLLanguage incluem:

  • Amharic
  • Arabic
  • Armenian
  • Bengali
  • Bulgarian
  • Burmese
  • Catalan
  • Cherokee
  • Croatian
  • Czech
  • Danish
  • Dutch
  • English
  • Finnish
  • French
  • Georgian
  • German
  • Greek
  • Gujarati
  • Hebrew
  • Hindi
  • Hungarian
  • Icelandic
  • Indonesian
  • Italian
  • Japanese
  • Kannada
  • Khmer
  • Korean
  • Lao
  • Malay
  • Malayalam
  • Marathi
  • Mongolian
  • Norwegian
  • Oriya
  • Persian
  • Polish
  • Portuguese
  • Punjabi
  • Romanian
  • Russian
  • SimplifiedChinese
  • Sinhalese
  • Slovak
  • Spanish
  • Swedish
  • Tamil
  • Telugu
  • Thai
  • Tibetan
  • TraditionalChinese
  • Turkish
  • Ukrainian
  • Undetermined
  • Urdu
  • Vietnamese

Uma lista completa de idiomas suportados está disponível como parte do NLLanguage Documentação da API enum.

Tokenizando texto em palavras, frases e parágrafos

A guia Tokenizer do aplicativo de exemplo demonstra como separar um bloco de texto em suas palavras ou frases componentes com um NLTokenizerarquivo .

Toque no botão Palavras ou Frases para buscar uma lista de tokens. Cada token é associado a uma palavra ou frase no texto original.

ShowTokens divide a entrada do usuário em tokens chamando o GetTokens método de um NLTokenizer. Esse método retorna uma matriz de NSValue objetos, cada um encapsulando um NSRange valor correspondente a um token no texto original.

void ShowTokens(NLTokenUnit unit)
{
    if (!String.IsNullOrWhiteSpace(UserInput.Text))
    {
        var tokenizer = new NLTokenizer(unit);
        tokenizer.String = UserInput.Text;
        var range = new NSRange(0, UserInput.Text.Length);
        NSValue[] tokens = tokenizer.GetTokens(range);
        PerformSegue(ShowTokensSegue, this);
    }
}

LanguageTokenizerTableViewController Renderiza um único token em cada célula da tabela. Ele extrai um NSRange de um token NSValue, localiza a cadeia de caracteres correspondente no texto original e define um rótulo na célula de exibição de tabela:

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
    var cell = TableView.DequeueReusableCell(TokenCell);
    NSRange range = Tokens[indexPath.Row].RangeValue;
    cell.TextLabel.Text = Text.Substring((int)range.Location, (int)range.Length);
    return cell;
}

Marcando entidades nomeadas e partes da fala

A guia Tagger do aplicativo de exemplo XamarinNL demonstra como usar o NLTagger para associar categorias a tokens de uma cadeia de caracteres de entrada. A estrutura de Linguagem Natural inclui suporte interno para reconhecer pessoas, lugares, organizações e partes da fala.

Observação

A estrutura de linguagem natural também oferece suporte a esquemas de marcação personalizados por meio de modelos de ML Core fornecidos pelo desenvolvedor. Para obter mais informações, dê uma olhada na sessão Introducing Natural Language Framework da WWDC 2018.

Toque no botão Entidades nomeadas ou Partes da fala para buscar:

  • Uma matriz de NSValue objetos, cada um encapsulando um NSRange para um token no texto original.
  • Uma matriz de valores – categorias para os NSValue tokens no mesmo índice de NLTag matriz.

Em LanguageTaggerViewController, HandlePartsOfSpeechButtonTap e HandleNamedEntitiesButtonTap cada chamada ShowTags, passando um NLTagScheme – ou NLTagScheme.LexicalClass (para partes do discurso) ou NLTagScheme.NameType (para entidades nomeadas).

ShowTagscria um NLTagger, instanciando-o NLTagScheme com uma matriz de tipos para os quais ele será consultado NLTagScheme (nesse caso, apenas o valor passado). Em seguida, ele usa o GetTags no NLTagger para determinar as marcas relevantes para o texto na entrada do usuário.

void ShowTags(NLTagScheme tagScheme)
{
    if (!String.IsNullOrWhiteSpace(UserInput.Text))
    {
        var tagger = new NLTagger(new NLTagScheme[] { tagScheme });
        var range = new NSRange(0, UserInput.Text.Length);
        tagger.String = UserInput.Text;

        NLTag[] tags = tagger.GetTags(range, NLTokenUnit.Word, tagScheme, NLTaggerOptions.OmitWhitespace, out NSValue[] ranges);
        NSValue[] tokenRanges = ranges;
        detailViewTitle = tagScheme == NLTagScheme.NameType ? "Named Entities" : "Parts of Speech";

        PerformSegue(ShowEntitiesSegue, this);
    }
}

As tags são exibidas em uma tabela pelo LanguageTaggerTableViewController.

Os valores potenciais NLTag incluem:

  • Adjective
  • Adverb
  • Classifier
  • CloseParenthesis
  • CloseQuote
  • Conjunction
  • Dash
  • Determiner
  • Idiom
  • Interjection
  • Noun
  • Number
  • OpenParenthesis
  • OpenQuote
  • OrganizationName
  • Other
  • OtherPunctuation
  • OtherWhitespace
  • OtherWord
  • ParagraphBreak
  • Particle
  • PersonalName
  • PlaceName
  • Preposition
  • Pronoun
  • Punctuation
  • SentenceTerminator
  • Verb
  • Whitespace
  • Word
  • WordJoiner

Uma lista completa de tags suportadas está disponível como parte do NLTag Documentação da API enum.