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:
- Sprachen erkennen.
- Tokenisieren Sie Text in Wörter und Sätze.
- Kategorisieren sie benannte Entitäten und Teile der Spracherkennung.
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 LanguageRecognizerViewController
GetDominantLanguage
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 einNSRange
Token im ursprünglichen Text umschließen. - Ein Array von
NLTag
Werten – Kategorien für dieNSValue
Token im selben Arrayindex.
In LanguageTaggerViewController
, HandlePartsOfSpeechButtonTap
und HandleNamedEntitiesButtonTap
jedem Aufruf ShowTags
wird eine NLTagScheme
– entweder NLTagScheme.LexicalClass
(für Teile der Sprache) oder NLTagScheme.NameType
(für benannte Entitäten) übergeben.
ShowTags
erstellt eine NLTagger
Instanziierung 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.