Поделиться через


Использование платформы естественного языка с Xamarin.iOS

В 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 значения:

  • 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 разбивает входные данные пользователя на маркеры путем вызова 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 значения:

  • 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 перечисления.