Swift version: 5.10
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 more!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 5.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.