如何解决Swift:如何在句子中搜索关键字
我正在尝试快速地在句子中进行关键字搜索。
例如给出
关键字= [“黑色”,“袋子”,“爱”,“充满”]
Sentence1 =“房子里有一个装满爱的黑色袋子”
Sentence2 =“我们在商店里。柜台上有一个黑色袋子”
Sentence3 =“今天的海洋美丽而可爱”
我想在每个句子中搜索所有关键字,然后返回包含所有关键字和不包含所有关键字的句子。所以输出应该
句子1:4个关键字 句子2:3个关键字 句子3:无
这是我解决这个问题的尝试
var RawSentences = ["There is a black bag in a house filled with love","We are in a shop. There is a black bag on the counter"," The ocean is beautiful and lovely today"]
var keywords = ["black","bag","love","filled"]
for item in RawSentences {
var matchkeywords: [String] = []
for kword in keywords{
if item.range(of:kword) != nil {
print("Yes!!!! \(kword) is in \(generatedString)")
matchkeywords.append(kword)
}
}
print("There are \(String(matchkeywords.count)) keyword in \(item)")
}
迅速实施此操作的最佳方法是什么?
解决方法
如果您只想匹配整个单词,则需要使用正则表达式并为关键字添加边界。您还可以使搜索大小写和变音符号不敏感:
let sentences = ["There is a black bag in a house filled with love","We are in a shop. There is a black bag on the counter","The ocean is beautiful and lovely today"]
let keywords = ["black","bag","love","filled"]
var results: [String: [String]] = [:]
for sentence in sentences {
for keyword in keywords {
let escapedPattern = NSRegularExpression.escapedPattern(for: keyword)
let pattern = "\\b\(escapedPattern)\\b"
if sentence.range(of: pattern,options: [.regularExpression,.caseInsensitive,.diacriticInsensitive]) != nil {
results[sentence,default: []].append(keyword)
}
}
}
print(results) // ["There is a black bag in a house filled with love": ["black","filled"],"We are in a shop. There is a black bag on the counter": ["black","bag"]]
如果您想知道关键字在句子中的位置,您只需添加找到的范围而不是关键字:
var results: [String:[Range<String.Index>]] = [:]
for sentence in sentences {
for keyword in keywords {
let escapedPattern = NSRegularExpression.escapedPattern(for: keyword)
let pattern = "\\b\(escapedPattern)\\b"
if let range = sentence.range(of: pattern,.diacriticInsensitive]) {
results[sentence,default: []].append(range)
}
}
}
print(results) // ["We are in a shop. There is a black bag on the counter": [Range(Swift.String.Index(_rawBits: 1900544)..<Swift.String.Index(_rawBits: 2228224)),Range(Swift.String.Index(_rawBits: 2293760)..<Swift.String.Index(_rawBits: 2490368))],"There is a black bag in a house filled with love": [Range(Swift.String.Index(_rawBits: 720896)..<Swift.String.Index(_rawBits: 1048576)),Range(Swift.String.Index(_rawBits: 1114112)..<Swift.String.Index(_rawBits: 1310720)),Range(Swift.String.Index(_rawBits: 2883584)..<Swift.String.Index(_rawBits: 3145728)),Range(Swift.String.Index(_rawBits: 2097152)..<Swift.String.Index(_rawBits: 2490368))]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。