我需要从一个句子中得到人名。
例如:My Name is David Bonds and i live in new york.
,我想提取名称David Bonds
。My Name is
肯定会出现在每个句子中。但在名称之后,它可以包含句子的其余部分,也可以什么都不是。从这个answer我能够得到My Name is
的点。但它会把剩下的句子打印出来。我想确保它只抓取next two words
。
if let range = conversation.range(of: "My Name is") {
let name = conversation.substring(from: range.upperBound).trimmingCharacters(in: .whitespacesAndNewlines)
print(name)
}
6条答案
按热度按时间9ceoxa921#
快到Swift 4,iOS 11的时候了,在这里使用
NSLinguisticTagger
会更容易一些。因此,为了将来的参考,您可以使用NSLinguisticTagger从句子中提取名称。这不依赖于命名标记后面的名称或两个单词的名称。
这是来自一个Xcode 9Playground
2023年9月编辑
自从我写了这个答案已经有一段时间了,事情已经发生了变化。
NSLinguisticTagger
在iOS 14中被弃用,支持新的NaturalLanguage
框架现代版本的做法是:
zpjtge222#
当你有文本的其余部分时,你可以用“”来分隔它。然后first和second元素是first和last name
ckocjqey3#
您可以按如下方式实现它:
需要说明的是,如果您 * 非常确定 *“My Name is“应该在名称之前,那么
dropFirst(11)
应该可以正常工作,因为它的字符数是11。uqzxnwby4#
使用下面的代码
输出:
zbdgwd5y5#
您可以删除前缀字符串“My Name is大卫“,然后用““分隔。
kgsdhlau6#
根据您需要数据的方式: