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

この記事は公開されてから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を使用して各単語の品詞を識別する実装を紹介します。

参考資料