3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOSで品詞分解がしたかったときの話 (NSLinguisticTagger)

Posted at

iOSアプリで日本語の品詞分解をしたくて調べたのですが、結局使えなくてYahooが提供している日本語形態素解析APIを利用するに至ったときのメモです。

iOS5.0から文章を分解してくれるNSLinguisticTaggerがというクラスが用意されています。
https://developer.apple.com/documentation/foundation/nslinguistictagger

NSLinguisticTagSchemeLexicalClassがトークンを品詞に分類してくれるスキームらしいので、以下のようなサンプルコードで品詞分解を試してみたところ...

let tagger = NSLinguisticTagger(tagSchemes: [NSLinguisticTagSchemeTokenType, NSLinguisticTagSchemeLanguage, NSLinguisticTagSchemeScript, NSLinguisticTagSchemeLemma, NSLinguisticTagSchemeLexicalClass, NSLinguisticTagSchemeNameType, NSLinguisticTagSchemeNameTypeOrLexicalClass], options: 0)

let str = "Welcome to Wikipedia,the free encyclopedia that anyone can edit. This service is being provided in Austin."
let range = NSRange(location: 0, length: str.characters.count)
tagger.string = str
tagger.enumerateTags(in: range, scheme: NSLinguisticTagSchemeLexicalClass, options: [.omitWhitespace]) { (tag, range1, range2, stop) in
    let nsStr = str as NSString
    print("\(tag) : \(nsStr.substring(with: range1))")
}
Verb : Welcome
Preposition : to
Noun : Wikipedia
Punctuation : ,
Determiner : the
Adjective : free
Noun : encyclopedia
Preposition : that
Noun : anyone
Verb : can
Verb : edit
SentenceTerminator : .

ちゃんと分類してくれました。

ただし、以下のコードで利用可能なスキームを列挙してみるとわかるのですが...
残念ながらNSLinguisticTagSchemeLexicalClassは日本語に対応していないので使えません、無念。

NSLinguisticTagger.availableTagSchemes(forLanguage: "ja").forEach { (klass) in
    print(klass)
}
TokenType
Language
Script
// LexicalClassがない!!!

他にも、何種類か分解用のスキームが用意されていますが、今回は用途に合わなかったので詳しくは見てません。

NSLinguisticTagSchemeNameType

人名、地名、団体名を判別してくれるらしい(けど期待した結果は出せず)

OtherWord : Welcome
OtherWord : to
OtherWord : Wikipedia
Punctuation : ,
OtherWord : the
OtherWord : free
OtherWord : encyclopedia
OtherWord : that
OtherWord : anyone
OtherWord : can
OtherWord : edit
SentenceTerminator : .

NSLinguisticTagSchemeNameTypeOrLexicalClass

NameTypesとLexicalClassのあわせ技

Verb : Welcome
Preposition : to
Noun : Wikipedia
Punctuation : ,
Determiner : the
Adjective : free
Noun : encyclopedia
Preposition : that
Noun : anyone
Verb : can
Verb : edit
SentenceTerminator : .

NSLinguisticTagSchemeTokenType

単語、空白点、空白に分けてくれる

Word : Welcome
Word : to
Word : Wikipedia
Punctuation : ,
Word : the
Word : free
Word : encyclopedia
Word : that
Word : anyone
Word : can
Word : edit
Punctuation : .

NSLinguisticTagSchemeLanguage

BCP-47に従った言語コードを判別してくれる

en : Welcome
en : to
en : Wikipedia
 : ,
en : the
en : free
en : encyclopedia
en : that
en : anyone
en : can
en : edit
 : .

NSLinguisticTagSchemeScript

ISO 1592に従ったコードを判別してくれる

Latn : Welcome
Latn : to
Latn : Wikipedia
 : ,
Latn : the
Latn : free
Latn : encyclopedia
Latn : that
Latn : anyone
Latn : can
Latn : edit
 : .

NSLinguisticTagSchemeLemma

lemma、よくわからず。

welcome : Welcome
to : to
Wikipedia : Wikipedia
 : ,
the : the
free : free
 : encyclopedia
that : that
anyone : anyone
can : can
edit : edit
 : .
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?