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 przykładową aplikacją platformy XamarinNL. W tej przykładowej aplikacji pokazano, jak używać struktury języka naturalnego do:

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 HandleDetermineLanguageButtonTapLanguageRecognizerViewController 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 GetTokensmetoda .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 opakowuje NSRange token w oryginalnym tekście.
  • Tablica NLTag wartości — kategorie tokenów NSValue w tym samym indeksie tablicy.

W LanguageTaggerViewControllerobiekcie HandlePartsOfSpeechButtonTap i HandleNamedEntitiesButtonTap każde wywołanie ShowTagsprzekazuje element NLTagSchemeNLTagScheme.LexicalClass (w przypadku części mowy) lub NLTagScheme.NameType (dla nazwanych jednostek).

ShowTags Tworzy wystąpienie obiektu NLTaggerza 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.