LoginSignup
4
2

More than 5 years have passed since last update.

NSLinguisticTaggerで形態素解析してみた

Last updated at Posted at 2017-06-15

NSLinguisticTaggerとは?

テキストを形態素解析と品詞分解してくれるクラス

形態素解析のコードを書いてみる

今回はPlaygroundで

import UIKit

var text = "伊能忠敬は全国を歩いて測量の旅をしたよ"

// "ja" = 日本語
// "en" = 英語
let tagger = NSLinguisticTagger(tagSchemes: NSLinguisticTagger.availableTagSchemes(forLanguage: "ja"), options: 0)

tagger.string = text

tagger.enumerateTags(in: NSRange(location: 0, length: text.characters.count),
    scheme: NSLinguisticTagSchemeTokenType,
    options: [.omitWhitespace]) { tag, tokenRange, sentenceRange, stop in

    let subString = (text as NSString).substring(with: tokenRange)
    print("\(subString) : \(tag)")
}

これを実行すると

スクリーンショット 2017-06-15 18.06.08.png
まぁこんな感じ
英語も同じようにやってくれるようです

品詞分解をやってみる

英語はしっかりと品詞分解までやってくるそうなのでやってみます
日本語は対応してないみたい

コードの変更点

言語は"en"(英語)に変更
schemeを"NSLinguisticTagSchemeLexicalClass"に変更

import UIKit

var text = "Tadataka Ino traveled the whole country and made a journey of surveying"
// "ja" = 日本語
// "en" = 英語
let tagger = NSLinguisticTagger(tagSchemes: NSLinguisticTagger.availableTagSchemes(forLanguage: "en"), options: 0)

tagger.string = text

tagger.enumerateTags(in: NSRange(location: 0, length: text.characters.count),
    scheme: NSLinguisticTagSchemeLexicalClass,
    options: [.omitWhitespace]) { tag, tokenRange, sentenceRange, stop in

    let subString = (text as NSString).substring(with: tokenRange)
    print("\(subString) : \(tag)")
}

実行するとこんな感じ
スクリーンショット 2017-06-15 18.43.14.png
if文を使えば名詞(Noun)や動詞(Verb)のみを抽出もできたので参考になれば

if (tag == "Noun")
4
2
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
4
2