在 iOS 12 中引進,自然語言架構可啟用裝置上的自然語言處理。 它支援語言辨識、標記化和標記。 標記化會將文字分割成其元件文字、句子或段落;標記可識別語音、人員、地點和組織的各個部分。
自然語言架構也可以使用自定義核心 ML 模型,在特製化內容中分類和標記文字。
NSLinguisticTagger 類別仍然可用。 不過,自然語言架構是用於自然語言處理的慣用機制。
範例應用程式:XamarinNL
若要瞭解如何搭配 Xamarin.iOS 使用自然語言架構,請探索下列概念:
- 辨識語言。
- 將文字標記化為單字和句子。
- 標記具名實體和語音部分。
辨識語言
範例應用程式的辨識器索引標籤示範如何使用NLLanguageRecognizer 以判斷文字區塊的語言。
注意
語言辨識是特定類型的文字分類。 Natural Language 架構也透過開發人員提供的 Core ML 模型支援自定義文字分類。 如需詳細資訊,請參閱 WWDC 2018 簡介自然語言架構 研討會。
主要語言
點選 [ 語言] 按鈕,以識別使用者輸入中的主要語言。
HandleDetermineLanguageButtonTap的 LanguageRecognizerViewController 方法會使用GetDominantLanguage 要擷取 之 NLLanguageRecognizer 的方法 NLLanguage 在文字中找到的主要語言:
partial void HandleDetermineLanguageButtonTap(UIButton sender)
{
UserInput.ResignFirstResponder();
if (!String.IsNullOrWhiteSpace(UserInput.Text))
{
NLLanguage lang = NLLanguageRecognizer.GetDominantLanguage(UserInput.Text);
DominantLanguageLabel.Text = lang.ToString();
}
}
語言機率
點選 [ 語言機率] 按鈕,以擷取使用者輸入的語言假設清單。
類別 HandleLanguageProbabilitiesButtonTap 的 LanguageRecognizerViewController 方法會具現化 , NLLanguageRecognizer 並要求它 Process 用戶的文字。 然後它會呼叫語言辨識器的 GetNativeLanguageHypotheses 方法,其會擷取語言和相關連線率的字典。 類別 LanguageRecognizerTableViewController 接著會轉譯這些語言和機率。
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);
}
}
可能 NLLanguage 的值包括:
AmharicArabicArmenianBengaliBulgarianBurmeseCatalanCherokeeCroatianCzechDanishDutchEnglishFinnishFrenchGeorgianGermanGreekGujaratiHebrewHindiHungarianIcelandicIndonesianItalianJapaneseKannadaKhmerKoreanLaoMalayMalayalamMarathiMongolianNorwegianOriyaPersianPolishPortuguesePunjabiRomanianRussianSimplifiedChineseSinhaleseSlovakSpanishSwedishTamilTeluguThaiTibetanTraditionalChineseTurkishUkrainianUndeterminedUrduVietnamese
支援的語言完整清單可在中取得 NLLanguage 列舉 API 檔。
將文字標記成單字、句子和段落
範例 應用程式的Tokenizer 索引標籤示範如何使用 ,將文字區塊分成其元件字組或句子 NLTokenizer。
點選 [ 單字 或 句子] 按鈕以擷取令牌清單。 每個標記都會與原始文字中的單字或句子相關聯。
ShowTokens 藉由呼叫 ,將使用者的輸入分割成令牌 GetTokens 的 NLTokenizer方法。 這個方法會傳回的陣列 NSValue 物件,每個物件都會包裝 NSRange 與原始文字中標記對應的值。
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 會在每個數據表數據格中轉譯單一標記。 它會從權杖NSValue擷取 NSRange 、在原始文字中尋找對應的字串,並在資料表檢視資料格上設定標籤:
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;
}
標記具名實體和語音部分
XamarinNL 範例應用程式的 [標記器] 索引卷標示範如何使用NLTagger 類別,將類別與輸入字串的標記產生關聯。
自然語言架構包含內建支援,可辨識人員、地點、組織和語音的一部分。
注意
Natural Language 架構也支援透過開發人員提供的 Core ML 模型自定義標記配置。 如需詳細資訊,請參閱 WWDC 2018 簡介自然語言架構 研討會。
點選 [具名實體 ] 或 [語音 元件] 按鈕以擷取:
- 物件的陣列,每個物件
NSValue都會在NSRange原始文字中包裝標記的 。 - 值的陣列
NLTag– 位於相同陣列索引之NSValue標記的類別。
在 LanguageTaggerViewController中, HandlePartsOfSpeechButtonTap 以及 HandleNamedEntitiesButtonTap 每個呼叫 ShowTags,傳遞 NLTagScheme - NLTagScheme.LexicalClass 或 (針對語音部分) 或 NLTagScheme.NameType (針對具名實體)。
ShowTagsNLTagger會建立 ,以將查詢的類型NLTagScheme數位具現化它(在此案例中,只有傳入NLTagScheme的值)。 然後,它會使用 GetTags 上的 NLTagger 方法,決定與使用者輸入中文字相關的標記。
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);
}
}
然後,標籤會依 LanguageTaggerTableViewController顯示在數據表中。
可能 NLTag 的值包括:
AdjectiveAdverbClassifierCloseParenthesisCloseQuoteConjunctionDashDeterminerIdiomInterjectionNounNumberOpenParenthesisOpenQuoteOrganizationNameOtherOtherPunctuationOtherWhitespaceOtherWordParagraphBreakParticlePersonalNamePlaceNamePrepositionPronounPunctuationSentenceTerminatorVerbWhitespaceWordWordJoiner
支援標籤的完整清單可在中取得 NLTag 列舉 API 檔。