Swift:如何在一句话中搜索关键词
Swift: How to search for keywords in a sentence
我正在尝试在 swift 的句子中进行关键字搜索。
给定的例子
关键字=[“黑色”、“包”、“爱”、“填充”]
Sentence1 = "在充满爱的房子里有一个黑色的袋子"
Sentence2 = "We are in a shop. There is a black bag on the counter"
Sentence3 = "The ocean is beautiful and lovely today"
我想在每个句子中搜索所有关键字以及 return 包含所有关键字和不包含所有关键字的句子。所以输出应该
Sentence1 : 4个关键词
Sentence2 : 3个关键词
句子 3:none
这是我试图解决的问题
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)")
}
在 swift 中实现这个的最佳方法是什么?
如果您只想匹配整个单词,则需要使用正则表达式并为关键字添加边界。您还可以使您的搜索大小写和变音符号不敏感:
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", "bag", "love", "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, options: [.regularExpression, .caseInsensitive, .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))]]
我正在尝试在 swift 的句子中进行关键字搜索。
给定的例子
关键字=[“黑色”、“包”、“爱”、“填充”]
Sentence1 = "在充满爱的房子里有一个黑色的袋子"
Sentence2 = "We are in a shop. There is a black bag on the counter"
Sentence3 = "The ocean is beautiful and lovely today"
我想在每个句子中搜索所有关键字以及 return 包含所有关键字和不包含所有关键字的句子。所以输出应该
Sentence1 : 4个关键词 Sentence2 : 3个关键词 句子 3:none
这是我试图解决的问题
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)")
}
在 swift 中实现这个的最佳方法是什么?
如果您只想匹配整个单词,则需要使用正则表达式并为关键字添加边界。您还可以使您的搜索大小写和变音符号不敏感:
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", "bag", "love", "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, options: [.regularExpression, .caseInsensitive, .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))]]