Share via


Verwenden des Frameworks für natürliche Sprache mit Xamarin.iOS

Das in iOS 12 eingeführte Framework für natürliche Sprache ermöglicht die Verarbeitung natürlicher Sprache auf Geräten. Es unterstützt Spracherkennung, Tokenisierung und Tagging. Die Tokenisierung teilt Text in die Komponentenwörter, Sätze oder Absätze auf; Durch Tagging werden Teile von Sprache, Personen, Orten und Organisationen identifiziert.

Das Framework für natürliche Sprache kann auch benutzerdefinierte Core ML-Modelle verwenden, um Text in speziellen Kontexten zu klassifizieren und zu markieren.

Die NSLinguisticTagger-Klasse ist weiterhin verfügbar. Das Framework für natürliche Sprache ist jedoch der bevorzugte Mechanismus für die Verarbeitung natürlicher Sprachen.

Beispiel-App: XamarinNL

Um zu erfahren, wie Sie das Framework für natürliche Sprache mit Xamarin.iOS verwenden, erkunden Sie die folgenden Konzepte:

Erkennen von Sprachen

Auf der Registerkarte "Erkennung " der Beispiel-App wird die Verwendung einer NLLanguageRecognizer um die Sprache für einen Textblock zu bestimmen.

Hinweis

Die Spracherkennung ist eine bestimmte Art von Textklassifizierung. Das Natural Language-Framework unterstützt auch die benutzerdefinierte Textklassifizierung über von Entwicklern bereitgestellte Core ML-Modelle. Weitere Informationen erhalten Sie in der Einführung der Natural Language Framework-Sitzung von WWDC 2018.

Dominante Sprache

Tippen Sie auf die Schaltfläche "Sprache ", um die dominante Sprache in der Benutzereingabe zu identifizieren.

Die HandleDetermineLanguageButtonTap Methode der Verwendung der LanguageRecognizerViewControllerGetDominantLanguage Methode eines NLLanguageRecognizer abzurufenden Elements NLLanguage für die primäre Sprache im Text:

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

Sprachwahrscheinlichkeiten

Tippen Sie auf die Schaltfläche "Sprachwahrscheinlichkeiten ", um eine Liste der Sprachhypothes für die Benutzereingabe abzurufen.

Die HandleLanguageProbabilitiesButtonTap Methode der LanguageRecognizerViewController Klasse instanziiert ein NLLanguageRecognizer und fordert sie auf Process der Text des Benutzers. Anschließend wird die Spracherkennung aufgerufen. GetNativeLanguageHypotheses methode, die ein Wörterbuch mit Sprachen und zugeordneten Wahrscheinlichkeiten abruft. Die LanguageRecognizerTableViewController Klasse rendert diese Sprachen und Wahrscheinlichkeiten.

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

Mögliche NLLanguage Werte sind:

  • 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

Eine vollständige Liste der unterstützten Sprachen ist im Rahmen der NLLanguage Enumerations-API-Dokumentation.

Tokenisieren von Text in Wörter, Sätze und Absätze

Auf der Registerkarte "Tokenizer " der Beispiel-App wird veranschaulicht, wie ein Textblock in die zugehörigen Komponentenwörter oder Sätze mit einem NLTokenizer.

Tippen Sie auf die Schaltfläche "Wörter " oder " Sätze", um eine Liste von Token abzurufen. Jedes Token ist einem Wort oder Satz im ursprünglichen Text zugeordnet.

ShowTokens teilt die Eingabe des Benutzers in Token durch Aufrufen der GetTokens -Methode einer NLTokenizer. Diese Methode gibt ein Array von NSValue objekte, die jeweils einen NSRange Wert umschließen, der einem Token im ursprünglichen Text entspricht.

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 rendert ein einzelnes Token in jeder Tabellenzelle. Es extrahiert ein NSRange Aus einem Token NSValue, findet die entsprechende Zeichenfolge im ursprünglichen Text und legt eine Beschriftung in der Tabellenansichtszelle fest:

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

Kategorisieren benannter Entitäten und Sprachteile

Die Registerkarte "Tagger " der XamarinNL-Beispiel-App veranschaulicht die Verwendung der NLTagger Klasse zum Zuordnen von Kategorien zu Token einer Eingabezeichenfolge. Das Framework für natürliche Sprache enthält integrierte Unterstützung für die Erkennung von Personen, Orten, Organisationen und Teilen der Sprache.

Hinweis

Das Natural Language-Framework unterstützt auch benutzerdefinierte Taggingschemas über vom Entwickler bereitgestellte Core ML-Modelle. Weitere Informationen erhalten Sie in der Einführung der Natural Language Framework-Sitzung von WWDC 2018.

Tippen Sie auf die Schaltfläche "Benannte Entitäten " oder "Teile der Spracherkennung ", um Folgendes abzurufen:

  • Ein Array von NSValue Objekten, die jeweils ein NSRange Token im ursprünglichen Text umschließen.
  • Ein Array von NLTag Werten – Kategorien für die NSValue Token im selben Arrayindex.

In LanguageTaggerViewController, HandlePartsOfSpeechButtonTap und HandleNamedEntitiesButtonTap jedem Aufruf ShowTagswird eine NLTagScheme – entweder NLTagScheme.LexicalClass (für Teile der Sprache) oder NLTagScheme.NameType (für benannte Entitäten) übergeben.

ShowTags erstellt eine NLTaggerInstanziierung mit einem Array von NLTagScheme Typen, für die sie abgefragt wird (in diesem Fall nur der übergebene NLTagScheme Wert). Anschließend wird die GetTags -Methode für die NLTagger Bestimmung der tags, die für den Text in der Benutzereingabe relevant sind.

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

Die Tags werden dann in einer Tabelle von der LanguageTaggerTableViewController.

Mögliche NLTag Werte sind:

  • 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

Eine vollständige Liste der unterstützten Tags ist als Teil der NLTag Enumerations-API-Dokumentation.