假设我正在解析文档并尝试通过获取一些关键字并将它们与上述字符串匹配来查找 Test©/Testing© Keyword Finder
。
如果我使用的文档中的每个文本 block 都是分开的并且定义明确,这样就不会对句子/标题中连接的单词产生任何混淆,Swift 中是否有一种方法可以比较这样的带有关键字的单词 block 以找到匹配项?
最佳答案
Levenshtein 距离,又名编辑距离,是衡量两个字符串之间差异的指标。它的实现是here :
func levenshteinDist(test: String, key: String) -> Int {
let empty = Array<Int>(repeating:0, count: key.count)
var last = [Int](0...key.count)
for (i, testLetter) in test.enumerated() {
var cur = [i + 1] + empty
for (j, keyLetter) in key.enumerated() {
cur[j + 1] = testLetter == keyLetter ? last[j] : min(last[j], last[j + 1], cur[j]) + 1
}
last = cur
}
return last.last!
}
您可以按如下方式使用它:
let test1 = "Test©/Testing© Keyword Finder"
let test2 = "Test© Word Finder"
let test3 = "Number Categorizer"
let test4 = "Alphabet in Order"
let key = "Test Testing Keyword"
print(levenshteinDist(test: test1, key: key)) // 10
print(levenshteinDist(test: test2, key: key)) // 14
print(levenshteinDist(test: test3, key: key)) // 18
print(levenshteinDist(test: test4, key: key)) // 15
print(levenshteinDist(test: key, key: key)) // 0
如您所见,levensthlindist(test: key, key: key)
输出 0
,因为字符串相同。此外,最小输出为 10
,它对应于预期的测试字符串。
关于ios - 在 Swift 中将文本与关键字匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47669050/