NSLinguisticTaggerクラス
解説
テキストの形態素解析を行うクラスです。
編集時のバージョン OS X 10.8/iOS 6.1
継承 | NSObject |
準拠 | NSObject (NSObject) |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能 | iOS 5.0以降 |
使用可能 | OS X 10.7以降 |
定義 | NSLinguisticTagger.h |
概要
本クラスについて
言語タグオブジェクトはテキストの形態素解析を行います。形態素解析とは各言語で意味を持つ最小単位まで分解して品詞の判別などを行うものです。日本語の形態素解析では品詞の他、読み、発声時の読みなどを返すものが多いのですが、このクラスはiOS5.1では形態素の分離のみ行え、品詞の情報などは得られない状態です。品詞情報については英語のみ取得できるようです。
作成
言語タグオブジェクトの作成
言語タグオブジェクトを作成するにはallocで作成した後(– initWithTagSchemes:options)メソッドで初期化します。
#pragma mark NSLinguisticTagger initWithTagSchemes -(void)method002 { NSString *aString = @"My name is OOMORI satoshi."; NSString *targetScheme = NSLinguisticTagSchemeLexicalClass;//品詞。英語のみ,Verb,Noun,SentenceTerminator NSArray *aScheme = [NSArray arrayWithObject:targetScheme]; NSLinguisticTagger *aTagger = [[NSLinguisticTagger alloc] initWithTagSchemes:aScheme options:0]; //ブロック内での結果を得るためにNSArrayを作っておく __block NSMutableArray *tagArray = [NSMutableArray arrayWithCapacity:0]; [aTagger setString:aString]; [aTagger enumerateTagsInRange:NSMakeRange(0, [aString length]) scheme:targetScheme options:(NSLinguisticTaggerOmitWhitespace | NSLinguisticTaggerOmitPunctuation) usingBlock: ^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) { NSString *token = [aString substringWithRange:tokenRange]; NSString *sentence = [aString substringWithRange:sentenceRange]; //あとで使うためにNSDictionaryにいれて NSDictionary *aDictionary = [NSDictionary dictionaryWithObjectsAndKeys: tag,@"tag", token,@"token", sentence,@"sentence", nil]; //aDictionaryをNSArrayに入れる [tagArray addObject:aDictionary]; } ]; NSLog(@"%s", __FUNCTION__); for (NSDictionary *tempDic in tagArray) { NSLog(@"tag = %@,token = %@,sentence = %@",[tempDic objectForKey:@"tag"], [tempDic objectForKey:@"token"], [tempDic objectForKey:@"sentence"]); } //=> }
タグスキームの取得
タグスキームとは形態素解析する際にどのような情報を取得したいかをシステムに知らせるものです。
タグスキームを得るには(– tagSchemes)メソッドを使用します。指定した言語で有効なスキームを取得するには(+ availableTagSchemesForLanguage:)メソッドを使用します。
iOS5.1において、英語(en)では(TokenType,Language,Script,Lemma,LexicalClass,NameType,NameTypeOrLexicalClass)、日本語(ja)では(TokenType,Language,Script)となっています。
タグスキーム
●NSLinguisticTagSchemeTokenType
トークンのタイプ
例:word, punctuation, whitespace
●NSLinguisticTagSchemeLexicalClass
品詞
例:Determiner,Whitespace,Noun,Verb
●NSLinguisticTagSchemeNameType
名前の分類、個人名、組織名、場所名
例:OtherWord,Whitespace,OrganizationName,SentenceTerminator
●NSLinguisticTagSchemeNameTypeOrLexicalClass
品詞または名前の分類
例:Determiner,Whitespace,Noun,Verb,OrganizationName,SentenceTerminator
●NSLinguisticTagSchemeLemma
語幹。英語のbe動詞の場合はbeが返る。動詞の過去形などの場合は原形が返る
例:be,say
●NSLinguisticTagSchemeLanguage
言語。enとかjaとか
例:en
●NSLinguisticTagSchemeScript
スクリプトコード。LatnやJpanなど
例:Latn
解析文字列の取得と設定
解析をする文字を取得したい場合は(– string)メソッドを使います。解析をする文字をセットしたい場合は(– setString)メソッドを使用します。
言語タグの列挙
言語タグを列挙するには(– enumerateTagsInRange:scheme:options:usingBlock)メソッドを使います。指定した位置のタグを得るには(– possibleTagsAtIndex:scheme:tokenRange:sentenceRange:scores)メソッドを使います。
指定した位置のタグを得るサンプル
#pragma mark NSLinguisticTagger possibleTagsAtIndex:scheme:tokenRange:sentenceRange:scores: -(void)method004 { NSMutableString *aString = [@"My name is OOMORI satoshi." mutableCopy]; NSString *targetScheme = NSLinguisticTagSchemeNameTypeOrLexicalClass; NSArray *aScheme = [NSArray arrayWithObject:targetScheme]; NSLinguisticTagger *aTagger = [[NSLinguisticTagger alloc] initWithTagSchemes:aScheme options:0]; [aTagger setString:aString]; NSInteger searchIndex = 0; while (searchIndex < [aString length]) { NSRange tokenRange; NSRange sentenceRange; NSArray *scoreArray; NSArray *anArray = [aTagger possibleTagsAtIndex:searchIndex scheme:targetScheme tokenRange:&tokenRange sentenceRange:&sentenceRange scores:&scoreArray]; for (NSString *tag in anArray) { NSLog(@"tag = %@",tag); } NSLog(@"(%u-%u)",tokenRange.location,tokenRange.length); NSLog(@"%@",[scoreArray description]); searchIndex +=tokenRange.length; } NSLog(@"%@",[aTagger string]); }
指定した位置のタグを得る方法として(– tagAtIndex:scheme:tokenRange:sentenceRange)メソッドがあります。指定した範囲のタグを配列で得る方法として(– tagsInRange:scheme:options:tokenRanges)メソッドがあります。
文の範囲
指定した範囲の文の範囲を得るには(– sentenceRangeForRange)メソッドを使用します。
メソッド
言語タグオブジェクトの作成
タグスキームの取得
解析文字列のセットと取得
Orthographyのセットと取得
言語タグの列挙
– enumerateTagsInRange:scheme:options:usingBlock
– possibleTagsAtIndex:scheme:tokenRange:sentenceRange:scores
– tagAtIndex:scheme:tokenRange:sentenceRange
– tagsInRange:scheme:options:tokenRanges
範囲のセンテンス解析
定数