检查Swift中两个字符串表达式之间的相似性

Art*_*lov 4 regex string text ios swift

我扫描了文字:

Mils, chiiese, wh_ite ch$col_te
Run Code Online (Sandbox Code Playgroud)

和表达式列表,例如:

- cheese
- bread
- white chocolate
- etc.
Run Code Online (Sandbox Code Playgroud)

我需要将破碎的表达与我列表中的表达式进行比较,例如."白巧克力","wh_ite ch $ col_te".

也许你推荐一些框架.

Dej*_*dar 12

弦距离 - Levenshtein距离

你需要做的是测量两个字符串之间的差异.为此,您可以使用Levenshtein距离.

为了你的运气,有人已经在Swift HERE中实现了这个算法.

为了使它在Swift 1.2中运行,你只需要自动修复一些出现的错误,没有什么太花哨的.

然后你可以像这样使用它:

println(levenshtein("wh_ite ch$col_te", bStr: "white chocolate")) // prints 3, because you have to change 3 letters to get from aStr to bStr

println(levenshtein("wh_ite ch$col_te", bStr: "whsdfdsite chosdfsdfcolate")) // prints 13, because you have to change 13 letters to get from aStr to bStr
Run Code Online (Sandbox Code Playgroud)

然后你只需设置公差即可完成!


Joe*_*lla 5

Dejan Skledar在正确的轨道上 - 你想利用Levenshtein距离.他指出的实现需要调整以在Swift 1.2中工作,并且它往往很慢.这是Swift 1.2兼容,更快的实现.

只需Tools在项目中包含该类即可.完成后,您可以通过这种方式获得表示两个字符串之间差异的数字:

Tools.levenshtein("cheese", bStr: "chee_e") // returns 1
Tools.levenshtein("butter", bStr: "b_tt_r") // returns 2
Tools.levenshtein("milk", bStr: "butter")   // returns 6
Run Code Online (Sandbox Code Playgroud)