Použití architektury přirozeného jazyka s Xamarin.iOS

Architektura přirozeného jazyka představená v iOSu 12 umožňuje zpracování přirozeného jazyka na zařízení. Podporuje rozpoznávání jazyka, tokenizaci a označování. Tokenizace rozdělí text na slova, věty nebo odstavce součásti; Označování identifikuje slovní druhy, lidi, místa a organizace.

Architektura přirozeného jazyka může také používat vlastní modely Core ML ke klasifikaci a označování textu ve specializovaných kontextech.

Třída NSLinguisticTagger je stále k dispozici. Architektura přirozeného jazyka je však upřednostňovaným mechanismem pro zpracování přirozeného jazyka.

Ukázková aplikace: XamarinNL

Pokud se chcete naučit používat architekturu přirozeného jazyka s Xamarin.iOS, projděte si následující koncepty:

Rozpoznávání jazyků

Karta Rozpoznávání ukázkové aplikace ukazuje, jak používat NLLanguageRecognizer určit jazyk bloku textu.

Poznámka:

Rozpoznávání jazyka je konkrétní typ klasifikace textu. Architektura přirozeného jazyka také podporuje vlastní klasifikaci textu prostřednictvím modelů Core ML poskytovaných vývojářem. Další informace najdete v tématu Úvod do relace Rozhraní přirozeného jazyka z WWDC 2018.

Dominantní jazyk

Klepnutím na tlačítko Jazyk identifikujte dominantní jazyk ve vstupu uživatele.

Metoda HandleDetermineLanguageButtonTap použití metody LanguageRecognizerViewControllerGetDominantLanguageNLLanguageRecognizer metoda načtení metodyNLLanguage pro primární jazyk nalezený v textu:

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

Pravděpodobnosti jazyka

Klepnutím na tlačítko Pravděpodobnosti jazyka načtete seznam hypotéz jazyka pro vstup uživatele.

Metoda HandleLanguageProbabilitiesButtonTapLanguageRecognizerViewController třídy vytvoří NLLanguageRecognizer instanci třídy a požádá ji o Process text uživatele. Potom zavolá rozpoznávání jazyka. GetNativeLanguageHypotheses metoda, která načte slovník jazyků a přidružených pravděpodobností. Třída LanguageRecognizerTableViewController pak tyto jazyky a pravděpodobnosti vykreslí.

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

Mezi potenciální NLLanguage hodnoty patří:

  • 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

Úplný seznam podporovaných jazyků je k dispozici jako součást NLLanguage Dokumentace k rozhraní API výčtu

Tokenizace textu na slova, věty a odstavce

Karta Tokenizer ukázkové aplikace ukazuje, jak oddělit blok textu do jeho součástí slov nebo vět pomocí NLTokenizer.

Klepnutím na tlačítko Slova nebo věty načtete seznam tokenů. Každý token je přidružený ke slovu nebo větě v původním textu.

ShowTokens rozdělí vstup uživatele na tokeny voláním GetTokensNLTokenizermetoda . Tato metoda vrátí pole NSValue každý obtékání NSRange hodnoty odpovídající tokenu v původním textu.

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 v každé buňce tabulky vykreslí jeden token. Extrahuje z NSRange tokenu NSValue, najde odpovídající řetězec v původním textu a nastaví popisek na buňce zobrazení tabulky:

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

Označování pojmenovaných entit a částí řeči

Karta Tagger ukázkové aplikace XamarinNL ukazuje, jak používat NLTagger třída, která přidruží kategorie k tokenům vstupního řetězce. Architektura přirozeného jazyka zahrnuje integrovanou podporu pro rozpoznávání lidí, míst, organizací a slovních částí.

Poznámka:

Architektura přirozeného jazyka podporuje také vlastní schémata označování prostřednictvím modelů Core ML poskytovaných vývojářem. Další informace najdete v tématu Úvod do relace Rozhraní přirozeného jazyka z WWDC 2018.

Pokud chcete načíst pojmenované entity nebo slovní druhy, klepněte na tlačítko Pojmenované entity nebo slovní druhy:

  • Pole NSValue objektů, každé obtékání NSRange tokenu v původním textu.
  • Pole NLTag hodnot – kategorie pro NSValue tokeny ve stejném indexu pole.

In LanguageTaggerViewController, HandlePartsOfSpeechButtonTap a HandleNamedEntitiesButtonTap každé volání ShowTags, předávat – NLTagScheme buď NLTagScheme.LexicalClass (pro části řeči) nebo NLTagScheme.NameType (pro pojmenované entity).

ShowTags vytvoří instanci s NLTaggerpolem NLTagScheme typů, pro které se bude dotazovat (v tomto případě pouze předaná NLTagScheme hodnota). Pak použije GetTags metodu NLTagger pro určení značek relevantních pro text ve vstupu uživatele.

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

Značky se pak zobrazí v tabulce podle LanguageTaggerTableViewControllertabulky .

Mezi potenciální NLTag hodnoty patří:

  • 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

Úplný seznam podporovaných značek je k dispozici jako součást NLTag Dokumentace k rozhraní API výčtu