Uso del framework del linguaggio naturale con Xamarin.iOS
Introdotto in iOS 12, il framework del linguaggio naturale abilita l'elaborazione del linguaggio naturale sul dispositivo. Supporta il riconoscimento della lingua, la tokenizzazione e l'assegnazione di tag. La tokenizzazione suddivide il testo in parole, frasi o paragrafi componenti; L'assegnazione di tag identifica parti del parlato, delle persone, dei luoghi e delle organizzazioni.
Il framework del linguaggio naturale può anche usare modelli di Core ML personalizzati per classificare e contrassegnare il testo in contesti specializzati.
La classe NSLinguisticTagger è ancora disponibile. Tuttavia, il framework del linguaggio naturale è il meccanismo preferito da usare per l'elaborazione del linguaggio naturale.
App di esempio: XamarinNL
Per informazioni su come usare il framework del linguaggio naturale con Xamarin.iOS, esplorare i concetti seguenti:
- Riconoscere le lingue.
- Tokenizzare il testo in parole e frasi.
- Contrassegna le entità denominate e parti del parlato.
Riconoscimento delle lingue
La scheda Riconoscimento dell'app di esempio illustra come usare un NLLanguageRecognizer
per determinare la lingua per un blocco di testo.
Nota
Il riconoscimento della lingua è un tipo specifico di classificazione del testo. Il framework del linguaggio naturale supporta anche la classificazione del testo personalizzata tramite i modelli Core ML forniti dallo sviluppatore. Per altre informazioni, vedere la sessione Introducing Natural Language Framework from WWDC 2018 (Introduzione a Natural Language Framework da WWDC 2018).
Linguaggio dominante
Toccare il pulsante Lingua per identificare la lingua dominante nell'input dell'utente.
Il HandleDetermineLanguageButtonTap
metodo dell'oggetto utilizza l'oggetto LanguageRecognizerViewController
GetDominantLanguage
metodo di un NLLanguageRecognizer
oggetto da recuperare NLLanguage
per la lingua primaria presente nel testo:
partial void HandleDetermineLanguageButtonTap(UIButton sender)
{
UserInput.ResignFirstResponder();
if (!String.IsNullOrWhiteSpace(UserInput.Text))
{
NLLanguage lang = NLLanguageRecognizer.GetDominantLanguage(UserInput.Text);
DominantLanguageLabel.Text = lang.ToString();
}
}
Probabilità della lingua
Toccare il pulsante Probabilità lingua per recuperare un elenco di ipotesi di lingua per l'input dell'utente.
Il HandleLanguageProbabilitiesButtonTap
metodo della LanguageRecognizerViewController
classe crea un'istanza di e NLLanguageRecognizer
chiede di Process
testo dell'utente. Chiama quindi lo strumento di riconoscimento della lingua GetNativeLanguageHypotheses
metodo, che recupera un dizionario di lingue e probabilità associate. La classe esegue quindi il LanguageRecognizerTableViewController
rendering di queste lingue e probabilità.
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);
}
}
I valori potenziali NLLanguage
includono:
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
Un elenco completo delle lingue supportate è disponibile come parte di NLLanguage
Documentazione dell'API enum.
Tokenizzazione del testo in parole, frasi e paragrafi
La scheda Tokenizer dell'app di esempio illustra come separare un blocco di testo nelle parole o nelle frasi del componente con un oggetto NLTokenizer
.
Toccare il pulsante Parole o Frasi per recuperare un elenco di token. Ogni token è associato a una parola o una frase nel testo originale.
ShowTokens
suddivide l'input dell'utente in token chiamando GetTokens
metodo di un oggetto NLTokenizer
. Questo metodo restituisce una matrice di NSValue
oggetti, ognuno dei quali esegue il wrapping di un NSRange
valore corrispondente a un token nel testo originale.
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
esegue il rendering di un singolo token in ogni cella della tabella. Estrae un oggetto NSRange
da un token NSValue
, trova la stringa corrispondente nel testo originale e imposta un'etichetta nella cella di visualizzazione tabella:
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;
}
Assegnazione di tag a entità denominate e parti del riconoscimento vocale
La scheda Tagger dell'app di esempio XamarinNL illustra come usare NLTagger
classe per associare le categorie ai token di una stringa di input.
Il framework del linguaggio naturale include il supporto predefinito per il riconoscimento di persone, luoghi, organizzazioni e parti del parlato.
Nota
Il framework del linguaggio naturale supporta anche schemi di assegnazione di tag personalizzati tramite modelli Core ML forniti dallo sviluppatore. Per altre informazioni, vedere la sessione Introducing Natural Language Framework from WWDC 2018 (Introduzione a Natural Language Framework da WWDC 2018).
Toccare il pulsante Entità denominate o Parti del riconoscimento vocale per recuperare:
- Matrice di oggetti, ognuno dei quali esegue il wrapping di
NSValue
unNSRange
token nel testo originale. - Matrice di
NLTag
valori: categorie per iNSValue
token nello stesso indice di matrice.
In LanguageTaggerViewController
e HandleNamedEntitiesButtonTap
ogni chiamata ShowTags
passano un oggetto NLTagScheme
, NLTagScheme.LexicalClass
per parti del parlato, o NLTagScheme.NameType
(per le HandlePartsOfSpeechButtonTap
entità denominate).
ShowTags
crea un'istanza NLTagger
di , creando un'istanza con una matrice di NLTagScheme
tipi per cui verrà eseguita una query (in questo caso, solo il valore passato NLTagScheme
). Usa quindi il GetTags
metodo su NLTagger
per determinare i tag rilevanti per il testo nell'input dell'utente.
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);
}
}
I tag vengono quindi visualizzati in una tabella da LanguageTaggerTableViewController
.
I valori potenziali NLTag
includono:
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
Un elenco completo dei tag supportati è disponibile come parte di NLTag
Documentazione dell'API enum.