Utilisation de l’infrastructure de langage naturel avec Xamarin.iOS
Introduit dans iOS 12, l’infrastructure de langage naturel permet le traitement en langage naturel sur appareil. Il prend en charge la reconnaissance linguistique, la jetonisation et le balisage. La tokenisation fractionne le texte en mots, phrases ou paragraphes composant ; l’étiquetage identifie les parties de la parole, des personnes, des lieux et des organisations.
L’infrastructure Natural Language peut également utiliser des modèles Core ML personnalisés pour classifier et baliser du texte dans des contextes spécialisés.
La classe NSLinguisticTagger est toujours disponible. Toutefois, le framework de langage naturel est le mécanisme préféré à utiliser pour le traitement du langage naturel.
Exemple d’application : XamarinNL
Pour savoir comment utiliser l’infrastructure de langage naturel avec Xamarin.iOS, explorez les concepts suivants :
- Reconnaître les langues.
- Jetons du texte en mots et phrases.
- Balise nommées entités et parties de la parole.
Reconnaissance des langues
L’onglet Recognizer de l’exemple d’application montre comment utiliser un NLLanguageRecognizer
pour déterminer la langue d’un bloc de texte.
Remarque
La reconnaissance linguistique est un type spécifique de classification de texte. L’infrastructure Natural Language prend également en charge la classification de texte personnalisée via des modèles Core ML fournis par les développeurs. Pour plus d’informations, consultez la session Introducing Natural Language Framework de WWDC 2018.
Langue dominante
Appuyez sur le bouton Langue pour identifier la langue dominante dans l’entrée utilisateur.
Méthode HandleDetermineLanguageButtonTap
de l’utilisation de la LanguageRecognizerViewController
GetDominantLanguage
méthode d’un NLLanguageRecognizer
pour extraire le NLLanguage
pour la langue primaire trouvée dans le texte :
partial void HandleDetermineLanguageButtonTap(UIButton sender)
{
UserInput.ResignFirstResponder();
if (!String.IsNullOrWhiteSpace(UserInput.Text))
{
NLLanguage lang = NLLanguageRecognizer.GetDominantLanguage(UserInput.Text);
DominantLanguageLabel.Text = lang.ToString();
}
}
Probabilités linguistiques
Appuyez sur le bouton Probabilités linguistiques pour récupérer une liste d’hypothèses linguistiques pour l’entrée utilisateur.
La HandleLanguageProbabilitiesButtonTap
méthode de la LanguageRecognizerViewController
classe instancie un NLLanguageRecognizer
et lui demande Process
texte de l’utilisateur. Il appelle ensuite le module de reconnaissance de langue GetNativeLanguageHypotheses
méthode, qui extrait un dictionnaire de langues et de probabilités associées. La LanguageRecognizerTableViewController
classe affiche ensuite ces langues et ces probabilités.
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);
}
}
Les valeurs potentielles NLLanguage
sont les suivantes :
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
Une liste complète des langues prises en charge est disponible dans le cadre de la NLLanguage
Documentation de l’API enum.
Jeton de texte en mots, phrases et paragraphes
L’onglet Tokenizer de l’exemple d’application montre comment séparer un bloc de texte en mots ou phrases composant avec un NLTokenizer
.
Appuyez sur le bouton Mots ou Phrases pour récupérer une liste de jetons. Chaque jeton est associé à un mot ou une phrase dans le texte d’origine.
ShowTokens
fractionne l’entrée de l’utilisateur en jetons en appelant le GetTokens
méthode d’un NLTokenizer
. Cette méthode retourne un tableau de NSValue
objets, chacun encapsulant une NSRange
valeur correspondant à un jeton dans le texte d’origine.
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
restitue un seul jeton dans chaque cellule de tableau. Il extrait un NSRange
jeton NSValue
, recherche la chaîne correspondante dans le texte d’origine et définit une étiquette dans la cellule d’affichage de tableau :
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;
}
Étiquetage des entités nommées et des parties de la parole
L’onglet Tagger de l’exemple d’application XamarinNL montre comment utiliser l’application NLTagger
classe à associer des catégories à des jetons d’une chaîne d’entrée.
L’infrastructure du langage naturel inclut une prise en charge intégrée de la reconnaissance des personnes, des lieux, des organisations et des parties de la parole.
Remarque
L’infrastructure Natural Language prend également en charge les schémas d’étiquetage personnalisés via des modèles Core ML fournis par le développeur. Pour plus d’informations, consultez la session Introducing Natural Language Framework de WWDC 2018.
Appuyez sur les entités nommées ou les parties du bouton speech pour extraire :
- Tableau d’objets
NSValue
, chaque habillage d’unNSRange
jeton dans le texte d’origine. - Tableau de
NLTag
valeurs : catégories pour lesNSValue
jetons au même index de tableau.
Dans LanguageTaggerViewController
, HandlePartsOfSpeechButtonTap
et HandleNamedEntitiesButtonTap
chaque appel ShowTags
, en passant un NLTagScheme
- NLTagScheme.LexicalClass
soit (pour des parties de la parole) soit NLTagScheme.NameType
(pour les entités nommées).
ShowTags
crée un NLTagger
, instanciant avec un tableau de NLTagScheme
types pour lequel il sera interrogé (dans ce cas, seule la valeur passée NLTagScheme
). Il utilise ensuite le GetTags
méthode sur la NLTagger
façon de déterminer les balises pertinentes pour le texte dans l’entrée utilisateur.
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);
}
}
Les balises sont ensuite affichées dans un tableau par le LanguageTaggerTableViewController
.
Les valeurs potentielles NLTag
sont les suivantes :
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
Une liste complète des balises prises en charge est disponible dans le cadre de la NLTag
Documentation de l’API enum.