Partager via


Utilisation de l’infrastructure de langage naturel avec Xamarin.iOS

Introduit dans iOS 12, l’infrastructure de langage naturel permet le traitement en langage naturel sur appareil. Il prend en charge la reconnaissance linguistique, la jetonisation et le balisage. La tokenisation fractionne le texte en mots, phrases ou paragraphes composant ; l’étiquetage identifie les parties de la parole, des personnes, des lieux et des organisations.

L’infrastructure Natural Language peut également utiliser des modèles Core ML personnalisés pour classifier et baliser du texte dans des contextes spécialisés.

La classe NSLinguisticTagger est toujours disponible. Toutefois, le framework de langage naturel est le mécanisme préféré à utiliser pour le traitement du langage naturel.

Exemple d’application : XamarinNL

Pour savoir comment utiliser l’infrastructure de langage naturel avec Xamarin.iOS, explorez les concepts suivants :

Reconnaissance des langues

L’onglet Recognizer de l’exemple d’application montre comment utiliser un NLLanguageRecognizer pour déterminer la langue d’un bloc de texte.

Remarque

La reconnaissance linguistique est un type spécifique de classification de texte. L’infrastructure Natural Language prend également en charge la classification de texte personnalisée via des modèles Core ML fournis par les développeurs. Pour plus d’informations, consultez la session Introducing Natural Language Framework de WWDC 2018.

Langue dominante

Appuyez sur le bouton Langue pour identifier la langue dominante dans l’entrée utilisateur.

Méthode HandleDetermineLanguageButtonTap de l’utilisation de la LanguageRecognizerViewControllerGetDominantLanguage méthode d’un NLLanguageRecognizer pour extraire le NLLanguage pour la langue primaire trouvée dans le texte :

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

Probabilités linguistiques

Appuyez sur le bouton Probabilités linguistiques pour récupérer une liste d’hypothèses linguistiques pour l’entrée utilisateur.

La HandleLanguageProbabilitiesButtonTap méthode de la LanguageRecognizerViewController classe instancie un NLLanguageRecognizer et lui demande Process texte de l’utilisateur. Il appelle ensuite le module de reconnaissance de langue GetNativeLanguageHypotheses méthode, qui extrait un dictionnaire de langues et de probabilités associées. La LanguageRecognizerTableViewController classe affiche ensuite ces langues et ces probabilités.

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);
    }
}

Les valeurs potentielles NLLanguage sont les suivantes :

  • 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

Une liste complète des langues prises en charge est disponible dans le cadre de la NLLanguage Documentation de l’API enum.

Jeton de texte en mots, phrases et paragraphes

L’onglet Tokenizer de l’exemple d’application montre comment séparer un bloc de texte en mots ou phrases composant avec un NLTokenizer.

Appuyez sur le bouton Mots ou Phrases pour récupérer une liste de jetons. Chaque jeton est associé à un mot ou une phrase dans le texte d’origine.

ShowTokens fractionne l’entrée de l’utilisateur en jetons en appelant le GetTokens méthode d’un NLTokenizer. Cette méthode retourne un tableau de NSValue objets, chacun encapsulant une NSRange valeur correspondant à un jeton dans le texte d’origine.

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 restitue un seul jeton dans chaque cellule de tableau. Il extrait un NSRange jeton NSValue, recherche la chaîne correspondante dans le texte d’origine et définit une étiquette dans la cellule d’affichage de tableau :

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;
}

Étiquetage des entités nommées et des parties de la parole

L’onglet Tagger de l’exemple d’application XamarinNL montre comment utiliser l’application NLTagger classe à associer des catégories à des jetons d’une chaîne d’entrée. L’infrastructure du langage naturel inclut une prise en charge intégrée de la reconnaissance des personnes, des lieux, des organisations et des parties de la parole.

Remarque

L’infrastructure Natural Language prend également en charge les schémas d’étiquetage personnalisés via des modèles Core ML fournis par le développeur. Pour plus d’informations, consultez la session Introducing Natural Language Framework de WWDC 2018.

Appuyez sur les entités nommées ou les parties du bouton speech pour extraire :

  • Tableau d’objets NSValue , chaque habillage d’un NSRange jeton dans le texte d’origine.
  • Tableau de NLTag valeurs : catégories pour les NSValue jetons au même index de tableau.

Dans LanguageTaggerViewController, HandlePartsOfSpeechButtonTap et HandleNamedEntitiesButtonTap chaque appel ShowTags, en passant un NLTagScheme - NLTagScheme.LexicalClass soit (pour des parties de la parole) soit NLTagScheme.NameType (pour les entités nommées).

ShowTags crée un NLTagger, instanciant avec un tableau de NLTagScheme types pour lequel il sera interrogé (dans ce cas, seule la valeur passée NLTagScheme ). Il utilise ensuite le GetTags méthode sur la NLTagger façon de déterminer les balises pertinentes pour le texte dans l’entrée utilisateur.

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);
    }
}

Les balises sont ensuite affichées dans un tableau par le LanguageTaggerTableViewController.

Les valeurs potentielles NLTag sont les suivantes :

  • 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

Une liste complète des balises prises en charge est disponible dans le cadre de la NLTag Documentation de l’API enum.