この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では、iOS 12で追加されたNatural Language frameworkのNLTokenizerを使用して文章から単語を取り出す実装を紹介します。
本記事は 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を使用して各単語の品詞を識別する実装を紹介します。