Używanie struktury języka naturalnego z platformą Xamarin.iOS
Wprowadzona w systemie iOS 12 platforma języka naturalnego umożliwia przetwarzanie języka naturalnego na urządzeniu. Obsługuje rozpoznawanie języka, tokenizację i tagowanie. Tokenizacja dzieli tekst na wyrazy składowe, zdania lub akapity; Tagowanie identyfikuje części mowy, osób, miejsc i organizacji.
Struktura języka naturalnego może również używać niestandardowych modeli uczenia maszynowego Core DO klasyfikowania i oznaczania tekstu w wyspecjalizowanych kontekstach.
Klasa NSLinguisticTagger jest nadal dostępna. Jednak struktura języka naturalnego jest preferowanym mechanizmem używanym do przetwarzania języka naturalnego.
Przykładowa aplikacja: XamarinNL
Aby dowiedzieć się, jak używać struktury języka naturalnego w środowisku Xamarin.iOS, zapoznaj się z następującymi pojęciami:
- Rozpoznawanie języków.
- Tokenizuj tekst w słowach i zdaniach.
- Oznacz nazwane jednostki i części mowy.
Rozpoznawanie języków
Karta Rozpoznawanie przykładowej aplikacji pokazuje, jak używać elementu NLLanguageRecognizer
aby określić język bloku tekstu.
Uwaga
Rozpoznawanie języka to określony typ klasyfikacji tekstu. Platforma języka naturalnego obsługuje również niestandardową klasyfikację tekstu za pośrednictwem modeli uczenia maszynowego Core ML udostępnianych przez deweloperów. Aby uzyskać więcej informacji, zapoznaj się z sesją Introducing Natural Language Framework from WWDC 2018 (Wprowadzenie do struktury języka naturalnego z WWDC 2018).
Język dominujący
Naciśnij przycisk Język, aby zidentyfikować dominujący język w danych wejściowych użytkownika.
Metoda HandleDetermineLanguageButtonTap
LanguageRecognizerViewController
używa metody GetDominantLanguage
metoda pobierania NLLanguageRecognizer
elementu NLLanguage
dla języka podstawowego znalezionego w tekście:
partial void HandleDetermineLanguageButtonTap(UIButton sender)
{
UserInput.ResignFirstResponder();
if (!String.IsNullOrWhiteSpace(UserInput.Text))
{
NLLanguage lang = NLLanguageRecognizer.GetDominantLanguage(UserInput.Text);
DominantLanguageLabel.Text = lang.ToString();
}
}
Prawdopodobieństwa języka
Naciśnij przycisk Prawdopodobieństwa języka, aby pobrać listę hipotez językowych dla danych wejściowych użytkownika.
HandleLanguageProbabilitiesButtonTap
Metoda LanguageRecognizerViewController
klasy tworzy wystąpienie klasy NLLanguageRecognizer
i prosi oProcess
tekst użytkownika. Następnie wywołuje rozpoznawanie języka GetNativeLanguageHypotheses
metoda, która pobiera słownik języków i skojarzone prawdopodobieństwa. Następnie LanguageRecognizerTableViewController
klasa renderuje te języki i prawdopodobieństwa.
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);
}
}
Potencjalne NLLanguage
wartości obejmują:
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
Pełna lista obsługiwanych języków jest dostępna w ramach NLLanguage
Dokumentacja interfejsu API wyliczenia.
Tokenizowanie tekstu w wyrazy, zdania i akapity
Na karcie Tokenizer przykładowej aplikacji pokazano, jak oddzielić blok tekstu do wyrazów składników lub zdań za pomocą elementu NLTokenizer
.
Naciśnij przycisk Słowa lub Zdania, aby pobrać listę tokenów. Każdy token jest skojarzony ze słowem lub zdaniami w oryginalnym tekście.
ShowTokens
dzieli dane wejściowe użytkownika na tokeny przez wywołanie elementu GetTokens
metoda .NLTokenizer
Ta metoda zwraca tablicę NSValue
obiekty, z których każda opakowuje NSRange
wartość odpowiadającą tokenowi w oryginalnym tekście.
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
Renderuje pojedynczy token w każdej komórce tabeli. Wyodrębnia element NSRange
z tokenu NSValue
, znajduje odpowiedni ciąg w oryginalnym tekście i ustawia etykietę w komórce widoku tabeli:
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;
}
Tagowanie nazwanych jednostek i części mowy
Na karcie Tagger przykładowej aplikacji platformy XamarinNL pokazano, jak używać elementu NLTagger
klasa do skojarzenia kategorii z tokenami ciągu wejściowego.
Struktura języka naturalnego obejmuje wbudowaną obsługę rozpoznawania osób, miejsc, organizacji i części mowy.
Uwaga
Platforma języka naturalnego obsługuje również niestandardowe schematy tagowania za pośrednictwem modeli uczenia maszynowego Core ML udostępnianych przez deweloperów. Aby uzyskać więcej informacji, zapoznaj się z sesją Introducing Natural Language Framework from WWDC 2018 (Wprowadzenie do struktury języka naturalnego z WWDC 2018).
Naciśnij przycisk Nazwane jednostki lub Części mowy, aby pobrać:
- Tablica
NSValue
obiektów, z których każdy opakowujeNSRange
token w oryginalnym tekście. - Tablica
NLTag
wartości — kategorie tokenówNSValue
w tym samym indeksie tablicy.
W LanguageTaggerViewController
obiekcie HandlePartsOfSpeechButtonTap
i HandleNamedEntitiesButtonTap
każde wywołanie ShowTags
przekazuje element NLTagScheme
— NLTagScheme.LexicalClass
(w przypadku części mowy) lub NLTagScheme.NameType
(dla nazwanych jednostek).
ShowTags
Tworzy wystąpienie obiektu NLTagger
za pomocą tablicy NLTagScheme
typów, dla których będzie ono odpytywane (w tym przypadku jest to tylko przekazana NLTagScheme
wartość). Następnie używa GetTags
metoda na , NLTagger
aby określić tagi istotne dla tekstu w danych wejściowych użytkownika.
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);
}
}
Tagi są następnie wyświetlane w tabeli przez element LanguageTaggerTableViewController
.
Potencjalne NLTag
wartości obejmują:
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
Pełna lista obsługiwanych tagów jest dostępna w ramach NLTag
Dokumentacja interfejsu API wyliczenia.