[WWDC18][iOS 12] NLTokenizerを使用して文章から単語を取り出す #WWDC18

iOS 12で設定アプリと通知センターにアプリ内の通知設定画面へ遷移するためのボタンを表示できるようになりました。本記事では、アプリ内の通知設定画面への遷移をハンドリングする実装を紹介します。
2018.06.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

本記事では、iOS 12で追加されたNatural Language frameworkNLTokenizerを使用して文章から単語を取り出す実装を紹介します。

本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。

検証環境

本記事は以下の環境で検証を行っています。

  • macOS Sierra 10.13.5
  • Xcode Version 10.0 beta 2 (10L177m)
  • iOS Deployment target: 12.0

Natural Language framework

Natural Language frameworkは、以下のようなタスクを実行するためのフレームワークです。

  • 言語認識
  • トークンへの分解
  • 見出語解析
  • 品詞タグ付け
  • 固有表現認識

また、Create MLと併用すれば、カスタム自然言語モデルの訓練/配置を行うことができます。

英語の文章から単語を取り出す

NLTokenizerインスタンスの作成/テキスト設定を行い、enumerateTokens(in:using:)メソッドを呼びます。

let text = "Use the Natural Language framework to perform tasks like language and script identification, tokenization, lemmatization, parts-of-speech tagging, and named entity recognition."

// 1. 単位としてwordを指定してNLTokenizerインスタンスを作成する
let wordTokenizer = NLTokenizer(unit: .word)
// 2. テキストを設定する
wordTokenizer.string = text
// 3. enumerateTokens(in:using:)メソッドを使用して単語を列挙する
wordTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { tokenRange, _ in
    // 4. 取り出した単語をprintする
    print(text[tokenRange])
    return true
}

上記サンプルコードを実行すると、以下の結果が得られました。

Use
the
Natural
Language
framework
to
perform
tasks
like
language
and
script
identification
tokenization
lemmatization
parts
of
speech
tagging
and
named
entity
recognition

日本語の文章から単語を取り出す

英語の場合と同様に、文章だけ変更して検証してみます。

let text = "Natural Languageフレームワークは、言語やスクリプトの識別、トークン化、字形化、品詞タグ付け、名前付きエンティティ認識などのタスクを実行します。"

let wordTokenizer = NLTokenizer(unit: .word)
wordTokenizer.string = text
wordTokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { tokenRange, _ in
    print( text[tokenRange])
    return true
}

上記サンプルコードを実行すると、以下の結果が得られました。

Natural
Language
フレームワーク
は
言語
や
スクリプト
の
識別
トークン
化
字形
化
品詞
タグ
付け
名前
付き
エンティティ
認識
など
の
タスク
を
実行
し
ます

列挙された単語は、Yahoo! JAPANが提供している日本語形態素解析 Web APIで得られるものとほぼ同様になりました。(日本語自動品詞分解ツールなどで試せます。)

さいごに

本記事では、NLTokenizerを使用して文章から単語を取り出す実装を紹介しました。

次の記事ではNLTaggerを使用して各単語の品詞を識別する実装を紹介します。

参考資料