Xamarin.iOS ile Doğal Dil çerçevesini kullanma

iOS 12'de kullanıma sunulan Doğal Dil çerçevesi, cihaz içi doğal dil işlemeyi etkinleştirir. Dil tanımayı, belirteç oluşturmayı ve etiketlemeyi destekler. Belirteç oluşturma metni bileşen sözcüklerine, cümlelerine veya paragraflarına böler; etiketleme konuşma bölümlerini, kişileri, yerleri ve kuruluşları tanımlar.

Doğal Dil çerçevesi, metni özel bağlamlarda sınıflandırmak ve etiketlemek için özel Core ML modellerini de kullanabilir.

NSLinguisticTagger sınıfı hala kullanılabilir. Ancak Doğal Dil çerçevesi, Doğal Dil işleme için kullanılacak tercih edilen mekanizmadır.

Örnek uygulama: XamarinNL

Xamarin.iOS ile Doğal Dil çerçevesini kullanmayı öğrenmek için XamarinNL örnek uygulamasına göz atın. Bu örnek uygulama, Doğal Dil çerçevesinin nasıl kullanılacağını gösterir:

Dilleri tanıma

Örnek uygulamanın Tanıyıcı sekmesi,NLLanguageRecognizer bir metin bloğunun dilini belirlemek için.

Not

Dil tanıma, belirli bir metin sınıflandırma türüdür. Doğal Dil çerçevesi, geliştirici tarafından sağlanan Core ML modelleri aracılığıyla özel metin sınıflandırmasını da destekler. Daha fazla bilgi için WWDC 2018'in Doğal Dil Çerçevesi'ne Giriş oturumuna göz atın.

Baskın dil

Kullanıcı girişindeki baskın dili belirlemek için Dil düğmesine dokunun.

HandleDetermineLanguageButtonTap yöntemi,LanguageRecognizerViewControllerGetDominantLanguage öğesinin NLLanguageRecognizer getirilmeye yönelik yöntemi NLLanguage metinde bulunan birincil dil için:

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

Dil olasılıkları

Kullanıcı girişi için dil hipotezlerinin listesini getirmek için Dil olasılıkları düğmesine dokunun.

HandleLanguageProbabilitiesButtonTap sınıfının yöntemi LanguageRecognizerViewController bir NLLanguageRecognizer örneği oluşturur ve bunu isterProcess kullanıcı metnini seçin. Ardından dil tanıyıcısını çağırır GetNativeLanguageHypotheses yöntemi, dillerin ve ilişkili olasılıkların bir sözlüğünü getirir. Sınıf LanguageRecognizerTableViewController daha sonra bu dilleri ve olasılıkları işler.

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

Olası NLLanguage değerler şunlardır:

  • 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

Desteklenen dillerin tam listesi, NLLanguage enum API belgeleri.

Metni sözcükler, cümleler ve paragraflar halinde belirteç haline getirme

Örnek uygulamanın Belirteç Oluşturucu sekmesi, bir metin bloğunu ile NLTokenizerbileşen sözcüklerine veya cümlelerine ayırmayı gösterir.

Belirteç listesini getirmek için Sözcükler veya Tümceler düğmesine dokunun. Her belirteç, özgün metindeki bir sözcük veya tümceyle ilişkilendirilir.

ShowTokens çağrısı yaparak kullanıcının girişini belirteçlere böler GetTokensNLTokenizeryöntemi. Bu yöntem bir dizi döndürür: NSValue nesneleri, her birinin özgün metindeki bir NSRange belirteçle ilgili değeri kaydırması.

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 her tablo hücresinde tek bir belirteç oluşturur. Bir belirteçten NSValuebir NSRange ayıklar, özgün metinde karşılık gelen dizeyi bulur ve tablo görünümü hücresinde bir etiket ayarlar:

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

Adlandırılmış varlıkları ve konuşma bölümlerini etiketleme

XamarinNL örnek uygulamasının Tagger sekmesiNLTagger sınıfını kullanarak kategorileri giriş dizesinin belirteçleriyle ilişkilendirin. Doğal Dil çerçevesi kişileri, yerleri, kuruluşları ve konuşma bölümlerini tanımaya yönelik yerleşik destek içerir.

Not

Doğal Dil çerçevesi, geliştirici tarafından sağlanan Core ML modelleri aracılığıyla özel etiketleme düzenlerini de destekler. Daha fazla bilgi için WWDC 2018'in Doğal Dil Çerçevesi'ne Giriş oturumuna göz atın.

Getirmek için Adlandırılmış varlıklar veya Konuşma bölümleri düğmesine dokunun:

  • Her biri özgün metinde NSValue bir belirteç için bir NSRange sarmalama olan bir nesne dizisi.
  • Bir değer dizisi NLTag – aynı dizi dizinindeki NSValue belirteçler için kategoriler.

içinde LanguageTaggerViewControllerve HandleNamedEntitiesButtonTap her çağrısı ShowTags, ile NLTagSchemeNLTagScheme.LexicalClass birlikte (konuşma bölümleri için) veya NLTagScheme.NameType (adlandırılmış varlıklar içinHandlePartsOfSpeechButtonTap) iletir.

ShowTagssorgulanacağı bir tür dizisiyle NLTagScheme (bu örnekte yalnızca geçirilen NLTagScheme değer) örneği oluşturan bir NLTaggeroluşturur. Daha sonra GetTags yöntemine NLTagger tıklayarak kullanıcı girişindeki metinle ilgili etiketleri belirleyin.

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

Etiketler daha sonra tarafından bir tabloda LanguageTaggerTableViewControllergörüntülenir.

Olası NLTag değerler şunlardır:

  • 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

Desteklenen etiketlerin tam listesi, NLTag enum API belgeleri.