Xamarin.iOS에서 자연어 프레임워크 사용
iOS 12에 도입된 자연어 프레임워크는 디바이스 내 자연어 처리를 지원합니다. 언어 인식, 토큰화 및 태그 지정을 지원합니다. 토큰화는 텍스트를 구성 요소 단어, 문장 또는 단락으로 분할합니다. 태그 지정은 음성, 사람, 장소 및 조직의 일부를 식별합니다.
자연어 프레임워크는 사용자 지정 Core ML 모델을 사용하여 특수 컨텍스트에서 텍스트를 분류하고 태그를 지정할 수도 있습니다.
NSLinguisticTagger 클래스는 여전히 사용할 수 있습니다. 그러나 자연어 프레임워크는 자연어 처리에 사용하는 기본 메커니즘입니다.
샘플 앱: XamarinNL
Xamarin.iOS에서 자연어 프레임워크를 사용하는 방법을 알아보려면 다음 개념을 살펴보세요.
- 언어 인식
- 텍스트를 단어와 문장으로 토큰화합니다.
- 명명된 엔터티 및 음성 부분에 태그를 지정합니다.
언어 인식
샘플 앱의 인식기 탭은 다음을 사용하는 방법을 보여 줍니다.NLLanguageRecognizer
텍스트 블록에 대한 언어를 확인하려면 입니다.
참고 항목
언어 인식은 특정 유형의 텍스트 분류입니다. 자연어 프레임워크는 개발자가 제공한 Core ML 모델을 통한 사용자 지정 텍스트 분류도 지원합니다. 자세한 내용은 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
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
범주입니다.
HandlePartsOfSpeechButtonTap
HandleNamedEntitiesButtonTap
및 각 호출ShowTags
에서 LanguageTaggerViewController
- NLTagScheme.LexicalClass
(음성의 일부) 또는 NLTagScheme.NameType
(명명된 엔터티의 경우) 전달 NLTagScheme
합니다.
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
enum API 설명서.