Swift version: 5.6
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!
SAVE 50% To celebrate Black Friday, all our books and bundles are half price, so you can take your Swift knowledge further without spending big! Get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn advanced design patterns, testing skills, 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.