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

时间:2015-05-21 05:57:08

标签: ios regex string swift text

我扫描了文字:

Mils, chiiese, wh_ite ch$col_te

表达式列表,例如:

- cheese
- bread
- white chocolate
- etc.

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

也许你推荐一些框架。

4 个答案:

答案 0 :(得分:10)

字符串距离 - Levenshtein距离

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

为了你的运气,有人已经在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

然后你只需设置容差就可以了!

答案 1 :(得分:5)

Dejan Skledar走在正确的轨道上 - 你想要使用Levenshtein distance。他指出的实现需要调整以在Swift 1.2中工作,并且它往往很慢。 Here's a Swift 1.2-compatible, faster implementation.

只需在项目中包含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

答案 2 :(得分:1)

请找到Joey deVilla的答案here Swift 4 实现

您必须调用如下函数:

Tools.levenshtein(aStr: "Example", bStr: "Examples")

答案 3 :(得分:0)

使用 StringMetric 并快乐

https://github.com/autozimu/StringMetric.swift

# A tibble: 15 x 3
# Groups:   manufacturer [15]
#   manufacturer data               out       
#   <chr>        <list>             <list>    
# 1 audi         <tibble [18 × 10]> <dbl [18]>
# 2 chevrolet    <tibble [19 × 10]> <dbl [19]>
# 3 dodge        <tibble [37 × 10]> <dbl [1]> 
# 4 ford         <tibble [25 × 10]> <dbl [1]> 
# 5 honda        <tibble [9 × 10]>  <dbl [1]> 
# 6 hyundai      <tibble [14 × 10]> <dbl [1]> 
# 7 jeep         <tibble [8 × 10]>  <dbl [8]> 
# 8 land rover   <tibble [4 × 10]>  <dbl [1]> 
# 9 lincoln      <tibble [3 × 10]>  <dbl [1]> 
#10 mercury      <tibble [4 × 10]>  <dbl [1]> 
#11 nissan       <tibble [13 × 10]> <dbl [1]> 
#12 pontiac      <tibble [5 × 10]>  <dbl [1]> 
#13 subaru       <tibble [14 × 10]> <dbl [1]> 
#14 toyota       <tibble [34 × 10]> <dbl [1]> 
#15 volkswagen   <tibble [27 × 10]> <dbl [1]>