Share via


Xamarin.iOS에서 자연어 프레임워크 사용

iOS 12에 도입된 자연어 프레임워크는 디바이스 내 자연어 처리를 지원합니다. 언어 인식, 토큰화 및 태그 지정을 지원합니다. 토큰화는 텍스트를 구성 요소 단어, 문장 또는 단락으로 분할합니다. 태그 지정은 음성, 사람, 장소 및 조직의 일부를 식별합니다.

자연어 프레임워크는 사용자 지정 Core ML 모델을 사용하여 특수 컨텍스트에서 텍스트를 분류하고 태그를 지정할 수도 있습니다.

NSLinguisticTagger 클래스는 여전히 사용할 수 있습니다. 그러나 자연어 프레임워크는 자연어 처리에 사용하는 기본 메커니즘입니다.

샘플 앱: XamarinNL

Xamarin.iOS에서 자연어 프레임워크를 사용하는 방법을 알아보려면 다음 개념을 살펴보세요.

언어 인식

샘플 앱의 인식기 탭은 다음을 사용하는 방법을 보여 줍니다.NLLanguageRecognizer 텍스트 블록에 대한 언어를 확인하려면 입니다.

참고 항목

언어 인식은 특정 유형의 텍스트 분류입니다. 자연어 프레임워크는 개발자가 제공한 Core ML 모델을 통한 사용자 지정 텍스트 분류도 지원합니다. 자세한 내용은 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();
    }
}

언어 확률

언어 확률 단추를 탭하여 사용자 입력에 대한 언어 가설 목록을 가져옵니다.

클래스의 메서드는 HandleLanguageProbabilitiesButtonTapLanguageRecognizerViewControllerNLLanguageRecognizer 인스턴스화하고 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 enum 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 는 각 테이블 셀에 단일 토큰을 렌더링합니다. 토큰NSValue에서 추출하고NSRange, 원본 텍스트에서 해당 문자열을 찾고, 테이블 뷰 셀에 레이블을 설정합니다.

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;
}

명명된 엔터티 및 음성 부분 태그 지정

XamarinNL 샘플 앱의 태거 탭은 다음을 사용하는 방법을 보여 줍니다.NLTagger 입력 문자열의 토큰과 범주를 연결하는 클래스입니다. 자연어 프레임워크에는 사람, 장소, 조직 및 음성 부분을 인식하기 위한 기본 제공 지원이 포함되어 있습니다.

참고 항목

자연어 프레임워크는 개발자가 제공한 Core ML 모델을 통해 사용자 지정 태그 지정 체계도 지원합니다. 자세한 내용은 WWDC 2018의 자연어 프레임워크 소개 세션을 참조하세요.

명명된 엔터티 또는 음성 부분 단추를 탭하여 다음을 가져옵니다.

  • 원래 텍스트에서 NSValue 토큰을 NSRange 래핑하는 개체의 배열입니다.
  • 값 배열 NLTag - 동일한 배열 인덱스에 있는 토큰에 대한 NSValue 범주입니다.

HandlePartsOfSpeechButtonTapHandleNamedEntitiesButtonTap 및 각 호출ShowTags에서 LanguageTaggerViewController- NLTagScheme.LexicalClass (음성의 일부) 또는 NLTagScheme.NameType (명명된 엔터티의 경우) 전달 NLTagScheme 합니다.

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 enum API 설명서.