UPGRADE YOUR SKILLS: Learn advanced Swift and SwiftUI on Hacking with Swift+! >>

How to read names in a string using NSLinguisticTagger

Swift version: 5.6

Paul Hudson    @twostraws   

Foundation has a built-in class to parse strings of text, and it includes some useful options to extra names of people, places, organizations, and more.

To try it out, consider this string:

let text = "Apple Computer was established in Cupertino by Steve Jobs, Steve Wozniak, and Ronald Wayne."

That contains a company name, a place name, and three names of people all in one, and we can use NSLinguisticTagger to pull them all out.

First you create a linguistic tagger and tell it to look for the names of things inside that text string:

let tagger = NSLinguisticTagger(tagSchemes: [.nameType], options: 0)
tagger.string = text

Next you create the range to scan. This is done using the older NSRange type, like this:

let range = NSRange(location: 0, length: text.utf16.count)

Third, you tell NSLinguisticTagger what it should look for and how it should scan. One useful option here is .joinNames, which means it will return “Steve Jobs” as a single name rather than as two individual names:

let options: NSLinguisticTagger.Options = [.omitPunctuation, .omitWhitespace, .joinNames]
let tags: [NSLinguisticTag] = [.personalName, .placeName, .organizationName]

Finally, you tell NSLinguisticTagger to enumerate the tags in the input string, filter out any that aren’t in the tags array we’re looking for, convert the NSRange back to a Swift range, then print out each match:

tagger.enumerateTags(in: range, unit: .word, scheme: .nameType, options: options) { tag, tokenRange, stop in
    if let tag = tag, tags.contains(tag) {
        if let range = Range(tokenRange, in: text) {
            let name = text[range]
            print("\(name): \(tag)")
        }
    }
}

That will find the company, organization, and three people names in our string – nice!

TAKE YOUR SKILLS TO THE NEXT LEVEL If you like Hacking with Swift, you'll love Hacking with Swift+ – it's my premium service where you can learn advanced Swift and SwiftUI, functional programming, algorithms, and more. Plus it comes with stacks of benefits, including monthly live streams, downloadable projects, a 20% discount on all books, and free gifts!

Find out more

Sponsor Hacking with Swift and reach the world's largest Swift community!

Available from iOS 5.0

Similar solutions…

About the Swift Knowledge Base

This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.

BUY OUR BOOKS
Buy Pro Swift Buy Pro SwiftUI Buy Swift Design Patterns Buy Testing Swift Buy Hacking with iOS Buy Swift Coding Challenges Buy Swift on Sundays Volume One Buy Server-Side Swift Buy Advanced iOS Volume One Buy Advanced iOS Volume Two Buy Advanced iOS Volume Three Buy Hacking with watchOS Buy Hacking with tvOS Buy Hacking with macOS Buy Dive Into SpriteKit Buy Swift in Sixty Seconds Buy Objective-C for Swift Developers Buy Beyond Code

Was this page useful? Let us know!

Average rating: 5.0/5

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.