Использование платформы естественного языка с Xamarin.iOS
В iOS 12 платформа естественного языка обеспечивает обработку естественного языка на устройстве. Он поддерживает распознавание языка, маркеризацию и теги. Токенизация разбивает текст на слова компонента, предложения или абзацы; Тег определяет части речи, людей, мест и организаций.
Платформа естественного языка также может использовать пользовательские модели машинного обучения Core для классификации и тега текста в специализированных контекстах.
Класс NSLinguisticTagger по-прежнему доступен. Однако платформа естественного языка является предпочтительным механизмом для обработки естественного языка.
Пример приложения: XamarinNL
Чтобы узнать, как использовать платформу естественного языка с Xamarin.iOS, ознакомьтесь со следующими понятиями:
- Распознавание языков.
- Маркеризируйте текст в слова и предложения.
- Тег именованных сущностей и частей речи.
Распознавание языков
Вкладка Распознавателя примера приложения демонстрирует, как использовать NLLanguageRecognizer
для определения языка блока текста.
Примечание.
Распознавание речи — это определенный тип классификации текста. Платформа естественного языка также поддерживает настраиваемую классификацию текста с помощью моделей машинного обучения Core, предоставляемых разработчиком. Дополнительные сведения см. в рамках сеанса 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
отрисовывает один маркер в каждой ячейке таблицы. Он извлекает NSRange
из маркера NSValue
, находит соответствующую строку в исходном тексте и задает метку в ячейке представления таблицы:
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;
}
Теги именованных сущностей и частей речи
Вкладка Tagger примера приложения XamarinNL демонстрирует, как использовать NLTagger
класс для связывания категорий с маркерами входной строки.
Платформа естественного языка включает встроенную поддержку распознавания людей, мест, организаций и частей речи.
Примечание.
Платформа естественного языка также поддерживает пользовательские схемы тегов с помощью моделей core ML, предоставляемых разработчиком. Дополнительные сведения см. в рамках сеанса WWDC 2018 в рамках сеанса "Введение платформы естественного языка ".
Коснитесь именованных сущностей или частей речи, чтобы получить следующую команду:
- Массив
NSValue
объектов, каждый из которых упаковываетNSRange
маркер в исходный текст. - Массив значений — категории для
NSValue
маркеровNLTag
в одном индексе массива.
В 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 перечисления.