[WWDC18][iOS 12] NLTaggerを使用して文中の人物、場所、組織を識別する #WWDC18
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
前回の記事「NLTaggerを使用して文中の単語の品詞を識別する」に引き続き、iOS 12で追加されたNatural Language frameworkを扱います。
本記事では、NLTaggerを使用して文中の人物、場所、組織を識別する実装を紹介します。
本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。
検証環境
本記事は以下の環境で検証を行っています。
- macOS Sierra 10.13.5
- Xcode Version 10.0 beta 2 (10L177m)
- iOS Deployment target: 12.0
英語の文章内の人物、場所、組織を識別する
NLTaggerインスタンスの作成/テキスト設定などを行い、enumerateTags(in:unit:scheme:options:using:)
メソッドを呼びます。
let text = "Apple Inc. is an American technology company headquartered in Cupertino, California." // 1. スキームnameTypeを指定してNLTaggerインスタンスを作成する let tagger = NLTagger(tagSchemes: [.nameType]) // 2. テキストを設定する tagger.string = text // 3. 句読点/スペースを除外し、multiple-wordを結合するオプションを作成 let options: NLTagger.Options = [.omitPunctuation, .omitWhitespace, .joinNames] // 4. enumerateTags(in:unit:scheme:options:using:)を使用してタグ付けされた単語を列挙する let tags: [NLTag] = [.personalName, .placeName, .organizationName] tagger.enumerateTags(in: text.startIndex..<text.endIndex, unit: .word, scheme: .nameType, options: options) { tag, tokenRange in if let tag = tag, tags.contains(tag) { // 5. タグ付けされた単語をprintする print("\(text[tokenRange]): \(tag.rawValue)") } return true }
上記サンプルコードを実行すると、以下の結果が得られました。
Apple Inc.: OrganizationName Cupertino: PlaceName California: PlaceName
日本語の文章内の人物、場所、組織を識別する
英語の場合と同様に、テキストだけ変更して検証してみます。
let text = "アップルはカリフォルニア州クパチーノに本拠を置くアメリカのテクノロジー企業です。" let tagger = NLTagger(tagSchemes: [.nameType]) tagger.string = text let options: NLTagger.Options = [.omitPunctuation, .omitWhitespace, .joinNames] let tags: [NLTag] = [.personalName, .placeName, .organizationName] tagger.enumerateTags(in: text.startIndex..<text.endIndex, unit: .word, scheme: .nameType, options: options) { tag, tokenRange in if let tag = tag, tags.contains(tag) { print("\(text[tokenRange]): \(tag.rawValue)") } return true }
上記サンプルコードを実行してみましたが結果は0件になりました。
今のところ、日本語で表記された場所/組織などは検出できないようです。
さいごに
本記事では、NLTaggerを使用して文中の人物、場所、組織を識別する実装を紹介しました。
ドキュメントIdentifying People, Places, and Organizationsでは、以下のような活用例が挙げられています。
- 人物に関連する連絡先を表示させる
- その場所までの経路を表示する
これからNatural Language frameworkを触ってみようと思っている方の参考になれば幸いです。