Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В iOS 12 платформа естественного языка обеспечивает обработку естественного языка на устройстве. Он поддерживает распознавание языка, маркеризацию и теги. Токенизация разбивает текст на слова компонента, предложения или абзацы; Тег определяет части речи, людей, мест и организаций.
Платформа естественного языка также может использовать пользовательские модели машинного обучения Core для классификации и тега текста в специализированных контекстах.
Класс NSLinguisticTagger по-прежнему доступен. Однако платформа естественного языка является предпочтительным механизмом для обработки естественного языка.
Пример приложения: XamarinNL
Чтобы узнать, как использовать платформу естественного языка с Xamarin.iOS, ознакомьтесь со следующими понятиями:
- Распознавание языков.
- Маркеризируйте текст в слова и предложения.
- Тег именованных сущностей и частей речи.
Распознавание языков
Вкладка Распознавателя примера приложения демонстрирует, как использовать NLLanguageRecognizer для определения языка блока текста.
Примечание.
Распознавание речи — это определенный тип классификации текста. Платформа естественного языка также поддерживает настраиваемую классификацию текста с помощью моделей машинного обучения Core, предоставляемых разработчиком. Дополнительные сведения см. в рамках сеанса WWDC 2018 в рамках сеанса "Введение платформы естественного языка ".
Доминирующий язык
Нажмите кнопку "Язык", чтобы определить доминирующий язык в входных данных пользователя.
Метод HandleDetermineLanguageButtonTapLanguageRecognizerViewController использования GetDominantLanguageNLLanguageRecognizer Метод получения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 разбивает входные данные пользователя на маркеры путем вызова GetTokensNLTokenizerМетод метода . Этот метод возвращает массив 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 (для именованных сущностей).
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 перечисления.