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 aşağıdaki kavramları inceleyin:
- Dilleri tanıma.
- Metni sözcükler ve cümleler halinde belirteç haline getir.
- Adlandırılmış varlıkları ve konuşma bölümlerini etiketleyin.
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,LanguageRecognizerViewController
GetDominantLanguage
öğ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 NLTokenizer
bileş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 GetTokens
NLTokenizer
yö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 NSValue
bir 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 birNSRange
sarmalama olan bir nesne dizisi. - Bir değer dizisi
NLTag
– aynı dizi dizinindekiNSValue
belirteçler için kategoriler.
içinde LanguageTaggerViewController
ve HandleNamedEntitiesButtonTap
her çağrısı ShowTags
, ile NLTagScheme
NLTagScheme.LexicalClass
birlikte (konuşma bölümleri için) veya NLTagScheme.NameType
(adlandırılmış varlıklar içinHandlePartsOfSpeechButtonTap
) iletir.
ShowTags
sorgulanacağı bir tür dizisiyle NLTagScheme
(bu örnekte yalnızca geçirilen NLTagScheme
değer) örneği oluşturan bir NLTagger
oluş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 LanguageTaggerTableViewController
gö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.