我使用Rosetta Code的教程来计算Levenshtein距离。看起来他们的代码是在Swift2中,所以我在执行此操作时得到这个错误Binary operator '+' cannot be applied to operands of type '[Int]' and 'Repeated<String.CharacterView>'
:var cur = [i + 2] + empty
其中let empty = repeatElement(s, count: 0)
。我怎么去解决这个问题?Swift3中的Levenshtein距离
1
A
回答
4
做了一些改变。
- 数组的构造为空。
- 枚举()现在枚举()
- 继任者(),所以我用+1
取代它不存在了这样的功能,现在是
func levDis(w1: String, w2: String) -> Int {
let (t, s) = (w1.characters, w2.characters)
let empty = Array<Int>(repeating:0, count: s.count)
var last = [Int](0...s.count)
for (i, tLett) in t.enumerated() {
var cur = [i + 1] + empty
for (j, sLett) in s.enumerated() {
cur[j + 1] = tLett == sLett ? last[j] : min(last[j], last[j + 1], cur[j])+1
}
last = cur
}
return last.last!
}
0
更新和改进回答Swift 4,基于@Spads回答。
func levenshteinDistanceScoreTo(string: String, ignoreCase: Bool = true, trimWhiteSpacesAndNewLines: Bool = true) -> Float {
var firstString = self
var secondString = string
if ignoreCase {
firstString = firstString.lowercased()
secondString = secondString.lowercased()
}
if trimWhiteSpacesAndNewLines {
firstString = firstString.trimmingCharacters(in: .whitespacesAndNewlines)
secondString = secondString.trimmingCharacters(in: .whitespacesAndNewlines)
}
let empty = [Int](repeating:0, count: secondString.count)
var last = [Int](0...secondString.count)
for (i, tLett) in firstString.enumerated() {
var cur = [i + 1] + empty
for (j, sLett) in secondString.enumerated() {
cur[j + 1] = tLett == sLett ? last[j] : Swift.min(last[j], last[j + 1], cur[j])+1
}
last = cur
}
// maximum string length between the two
let lowestScore = max(firstString.count, secondString.count)
if let validDistance = last.last {
return 1 - (Float(validDistance)/Float(lowestScore))
}
return Float.leastNormalMagnitude
}
相关问题
- 1. Levenshtein距离成本
- 2. 反向Levenshtein距离
- 3. Levenshtein距离组合
- 4. 计算Levenshtein距离
- 5. Haskell程序Levenshtein距离
- 6. OCR:加权Levenshtein距离
- 7. Levenshtein距离与阵列
- 8. 移植C#Levenshtein距离Java
- 9. Levenshtein编辑距离Python
- 10. 同义词由Levenshtein距离
- 11. Python中的Levenshtein距离只给出1作为编辑距离
- 12. 正则表达式中的Levenshtein距离
- 13. R中的快速Levenshtein距离?
- 14. 句级R中的Levenshtein距离
- 15. Levenshtein Python中的距离循环
- 16. 在列表中计算levenshtein距离Python
- 17. 如何在Delphi中实现Levenshtein距离?
- 18. 在python中实现Levenshtein距离
- 19. 任意序列的Levenshtein /编辑距离
- 20. 非英语语言的Levenshtein距离
- 21. 作为全文替代的Levenshtein距离
- 22. 基于Levenshtein距离的方法Vs Soundex
- 23. Levenshtein与扰乱字符的距离?
- 24. 显示Levenshtein距离的结果
- 25. Damerau-Levenshtein距离的迭代版本
- 26. Damerau-Levenshtein距离的高效实现
- 27. 转换Levenshtein错误率的距离
- 28. 计算的Levenshtein编辑距离
- 29. 修改Levenshtein位置偏差的距离
- 30. 水母的Damerau-Levenshtein距离计算车?
不是直接回答你的问题,但在这里http://stackoverflow.com/questions/26990394/slow-swift-arrays-and-strings-performance是应该需要斯威夫特稍作修改的实施3. –
感谢,工作,但仍然喜欢使用他们的(罗塞塔)方法,因为它看起来更短。 – styl3r