搭配 Xamarin.iOS 使用自然語言架構
在 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
的值包括:
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
支援的語言完整清單可在中取得 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
(針對具名實體)。
ShowTags
NLTagger
會建立 ,以將查詢的類型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
的值包括:
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
支援標籤的完整清單可在中取得 NLTag
列舉 API 檔。